git.delta.rocks / unique-network / refs/commits / c619fa15cf2f

difftreelog

Include ecosystem and walk-through in README

Greg Zaitsev2020-08-13parent: #c728eda.patch.diff
in: master

2 files changed

modifiedREADME.mddiffbeforeafterboth
before · README.md
1![Docker build](https://github.com/usetech-llc/nft_parachain/workflows/Docker%20build/badge.svg)23# NFT Parachain45## Project Description67The NFT Pallet is the core of NFT functionality. Like ERC-721 standard in Ethereum ecosystem, this pallet provides the basement for creating collections of unique non-divisible things, also called Non Fungible Tokens (NFTs), minting NFT of a given Collection, and managing their ownership.89The pallet also enables storing NFT properties. Though (according to ERC-721) NFT properties belong to logic of a concrete application that operates a Collection, so purposefully the NFT Tracking Module does not have any knowledge about properties except their byte size leaving application logic out to be controller by Smart Contracts.1011The NFT Chain also provides:1213* Smart Contracts Pallet and example smart contract that interacts with NFT Runtime14* ERC-1155 Functionality (currently PoC as Re-Fungible tokens, i.e. items that are still unique, but that can be split between multiple users)15* Variety of economic options for dapp producers to choose from to create freemium games and other ways to attract users. As a step one, we implemented an economic model when a collection sponsor can be set to pay for collection Transfer transactions.161718## Kusama Hackaphon Update1920During the Kusama Hackaphon the following changes were made:21* Enabled Smart Contracts Pallet22* Enabled integration between Smart Contracts and NFT Pallet (required special edition of RC4 Substrate version)23* Fixed misc. bugs in NFT Pallet24* Deployed NFT TestNet. Public node available at wss://unique.usetech.com, custom UI types - see below in this README.25* New Features:26  * Re-Fungible Token Mode27  * Off-Chain Schema to store token image URLs28  * Alternative economic model29  * White Lists and Public Mint Permission30* Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet Blockchain.3132## Application Development3334If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).3536## Building3738Building NFT chain requires special versions of Rust and toolchain. We don't use the most recent versions of everything so that we can keep the builds stable.39401. Install Rust:4142```bash43curl https://sh.rustup.rs -sSf | sh44sudo apt-get install libssl-dev pkg-config libclang-dev clang45```46472. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.48493. Install Rust Toolchain 1.44.0:5051```bash52rustup install 1.44.053```54554. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)56```bash57rustup toolchain list58rustup default 1.44.0-x86_64-unknown-linux-gnu59```60615. Install nightly toolchain and add wasm target for it:6263```bash64rustup toolchain install nightly-2020-05-0165rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu66```67686. Build:69```bash70cargo build71```7273## Run7475You can start a development chain with:7677```bash78cargo run -- --dev79```8081Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8283If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units. Give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminal windows open.8485We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below:8687```bash88cargo run -- \89  --base-path /tmp/alice \90  --chain=local \91  --alice \92  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \93  --telemetry-url ws://telemetry.polkadot.io:1024 \94  --validator95```9697In the second terminal, we'll start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's bootnode ID on TCP port 30333:9899```bash100cargo run -- \101  --base-path /tmp/bob \102  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \103  --chain=local \104  --bob \105  --port 30334 \106  --telemetry-url ws://telemetry.polkadot.io:1024 \107  --validator108```109110Additional CLI usage options are available and may be shown by running `cargo run -- --help`.111112113## UI custom types114```115{116  "Schedule": {117    "version": "u32",118    "put_code_per_byte_cost": "Gas",119    "grow_mem_cost": "Gas",120    "regular_op_cost": "Gas",121    "return_data_per_byte_cost": "Gas",122    "event_data_per_byte_cost": "Gas",123    "event_per_topic_cost": "Gas",124    "event_base_cost": "Gas",125    "call_base_cost": "Gas",126    "instantiate_base_cost": "Gas",127    "dispatch_base_cost": "Gas",128    "sandbox_data_read_cost": "Gas",129    "sandbox_data_write_cost": "Gas",130    "transfer_cost": "Gas",131    "instantiate_cost": "Gas",132    "max_event_topics": "u32",133    "max_stack_height": "u32",134    "max_memory_pages": "u32",135    "max_table_size": "u32",136    "enable_println": "bool",137    "max_subject_len": "u32"138  },139  "CollectionMode": {140    "_enum": {141      "Invalid": null,142      "NFT": "u32",143      "Fungible": "u32",144      "ReFungible": "(u32, u32)"145    }146  },147  "NftItemType": {148    "Collection": "u64",149    "Owner": "AccountId",150    "Data": "Vec<u8>"151  },152  "Ownership": {153    "owner": "AccountId",154    "fraction": "u128"155  },156  "ReFungibleItemType": {157    "Collection": "u64",158    "Owner": "Vec<Ownership<AccountId>>",159    "Data": "Vec<u8>"160  },161  "CollectionType": {162    "Owner": "AccountId",163    "Mode": "CollectionMode",164    "Access": "u8",165    "DecimalPoints": "u32",166    "Name": "Vec<u16>",167    "Description": "Vec<u16>",168    "TokenPrefix": "Vec<u8>",169    "CustomDataSize": "u32",170    "OffchainSchema": "Vec<u8>",171    "Sponsor": "AccountId",172    "UnconfirmedSponsor": "AccountId"173  },174  "RawData": "Vec<u8>",175  "Address": "AccountId",176  "LookupSource": "AccountId",177  "Weight": "u64"178}179```
after · README.md
1![Docker build](https://github.com/usetech-llc/nft_parachain/workflows/Docker%20build/badge.svg)23# NFT Parachain45## Project Description67The NFT Pallet is the core of NFT functionality. Like ERC-721 standard in Ethereum ecosystem, this pallet provides the basement for creating collections of unique non-divisible things, also called Non Fungible Tokens (NFTs), minting NFT of a given Collection, and managing their ownership.89The pallet also enables storing NFT properties. Though (according to ERC-721) NFT properties belong to logic of a concrete application that operates a Collection, so purposefully the NFT Tracking Module does not have any knowledge about properties except their byte size leaving application logic out to be controlled by Smart Contracts.1011The NFT Chain also provides:1213* Smart Contracts Pallet and example smart contract that interacts with NFT Runtime14* ERC-1155 Functionality (currently PoC as Re-Fungible tokens, i.e. items that are still unique, but that can be split between multiple users)15* Variety of economic options for dapp producers to choose from to create freemium games and other ways to attract users. As a step one, we implemented an economic model when a collection sponsor can be set to pay for collection Transfer transactions.1617Wider NFT Ecosystem:18(Most of it was also developed during Hackusama)19* [SubstraPunks Game hosted on IPFS](https://github.com/usetech-llc/substrapunks)20* [NFT Wallet and UI](https://uniqueapps.usetech.com/#/nft)21* [NFT Asset for Unity Framework](https://github.com/usetech-llc/nft_unity)2223Please see our [walk-thorugh instructions](demo/hackusama_walk_through.md) to try everything out!2425## Hackusama Update2627During the Kusama Hackaphon the following changes were made:28* Enabled Smart Contracts Pallet29* Enabled integration between Smart Contracts and NFT Pallet (required special edition of RC4 Substrate version)30* Fixed misc. bugs in NFT Pallet31* Deployed NFT TestNet. Public node available at wss://unique.usetech.com, custom UI types - see below in this README.32* New Features:33  * Re-Fungible Token Mode34  * Off-Chain Schema to store token image URLs35  * Alternative economic model36  * White Lists and Public Mint Permission37* Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet Blockchain.3839## Application Development4041If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).4243## Building4445Building NFT chain requires special versions of Rust and toolchain. We don't use the most recent versions of everything so that we can keep the builds stable.46471. Install Rust:4849```bash50curl https://sh.rustup.rs -sSf | sh51sudo apt-get install libssl-dev pkg-config libclang-dev clang52```53542. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.55563. Install Rust Toolchain 1.44.0:5758```bash59rustup install 1.44.060```61624. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)63```bash64rustup toolchain list65rustup default 1.44.0-x86_64-unknown-linux-gnu66```67685. Install nightly toolchain and add wasm target for it:6970```bash71rustup toolchain install nightly-2020-05-0172rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu73```74756. Build:76```bash77cargo build78```7980## Run8182You can start a development chain with:8384```bash85cargo run -- --dev86```8788Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8990If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units. Give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminal windows open.9192We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below:9394```bash95cargo run -- \96  --base-path /tmp/alice \97  --chain=local \98  --alice \99  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \100  --telemetry-url ws://telemetry.polkadot.io:1024 \101  --validator102```103104In the second terminal, we'll start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's bootnode ID on TCP port 30333:105106```bash107cargo run -- \108  --base-path /tmp/bob \109  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \110  --chain=local \111  --bob \112  --port 30334 \113  --telemetry-url ws://telemetry.polkadot.io:1024 \114  --validator115```116117Additional CLI usage options are available and may be shown by running `cargo run -- --help`.118119120## UI custom types121```122{123  "Schedule": {124    "version": "u32",125    "put_code_per_byte_cost": "Gas",126    "grow_mem_cost": "Gas",127    "regular_op_cost": "Gas",128    "return_data_per_byte_cost": "Gas",129    "event_data_per_byte_cost": "Gas",130    "event_per_topic_cost": "Gas",131    "event_base_cost": "Gas",132    "call_base_cost": "Gas",133    "instantiate_base_cost": "Gas",134    "dispatch_base_cost": "Gas",135    "sandbox_data_read_cost": "Gas",136    "sandbox_data_write_cost": "Gas",137    "transfer_cost": "Gas",138    "instantiate_cost": "Gas",139    "max_event_topics": "u32",140    "max_stack_height": "u32",141    "max_memory_pages": "u32",142    "max_table_size": "u32",143    "enable_println": "bool",144    "max_subject_len": "u32"145  },146  "CollectionMode": {147    "_enum": {148      "Invalid": null,149      "NFT": "u32",150      "Fungible": "u32",151      "ReFungible": "(u32, u32)"152    }153  },154  "NftItemType": {155    "Collection": "u64",156    "Owner": "AccountId",157    "Data": "Vec<u8>"158  },159  "Ownership": {160    "owner": "AccountId",161    "fraction": "u128"162  },163  "ReFungibleItemType": {164    "Collection": "u64",165    "Owner": "Vec<Ownership<AccountId>>",166    "Data": "Vec<u8>"167  },168  "CollectionType": {169    "Owner": "AccountId",170    "Mode": "CollectionMode",171    "Access": "u8",172    "DecimalPoints": "u32",173    "Name": "Vec<u16>",174    "Description": "Vec<u16>",175    "TokenPrefix": "Vec<u8>",176    "CustomDataSize": "u32",177    "OffchainSchema": "Vec<u8>",178    "Sponsor": "AccountId",179    "UnconfirmedSponsor": "AccountId"180  },181  "RawData": "Vec<u8>",182  "Address": "AccountId",183  "LookupSource": "AccountId",184  "Weight": "u64"185}186```
addeddoc/hackusama_walk_through.mddiffbeforeafterboth
--- /dev/null
+++ b/doc/hackusama_walk_through.md
@@ -0,0 +1,4 @@
+# Hackusama Walk-Through Demo
+
+This document walks through all Hackusama deliverables made in relation to NFT Blockchain submission.
+