git.delta.rocks / unique-network / refs/commits / 9ecb329aa0c0

difftreelog

source

README.md5.4 KiBsourcehistory
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 (most of it was developed during Hackusama):18* [SubstraPunks Game hosted on IPFS](https://github.com/usetech-llc/substrapunks)19* [NFT Wallet and UI](https://uniqueapps.usetech.com/#/nft)20* [NFT Asset for Unity Framework](https://github.com/usetech-llc/nft_unity)2122Please see our [walk-thorugh instructions](doc/hackusama_walk_through.md) to try everything out!2324## Hackusama Update2526During the Kusama Hackaphon the following changes were made:27* Enabled Smart Contracts Pallet28* Enabled integration between Smart Contracts and NFT Pallet (required special edition of RC4 Substrate version)29* Fixed misc. bugs in NFT Pallet30* Deployed NFT TestNet. Public node available at wss://unique.usetech.com, custom UI types - see below in this README.31* New Features:32  * Re-Fungible Token Mode33  * Off-Chain Schema to store token image URLs34  * Alternative economic model35  * White Lists and Public Mint Permission36* Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet Blockchain.3738## Application Development3940If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).4142## Building4344Building 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.45461. Install Rust:4748```bash49curl https://sh.rustup.rs -sSf | sh50sudo apt-get install libssl-dev pkg-config libclang-dev clang51```52532. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.54553. Install Toolchain and make it default:5657```bash58rustup toolchain install nightly-2020-10-0159rustup default nightly-2020-10-0160```61624. Add wasm target for default toolchain:6364```bash65rustup target add wasm32-unknown-unknown66```67685. Build:69```bash70cargo build71```7273optionally, build in release:74```bash75cargo build --release76```7778## Run7980You can start a development chain with:8182```bash83cargo run -- --dev84```8586Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8788If 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.8990We'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:9192```bash93cargo run -- \94  --base-path /tmp/alice \95  --chain=local \96  --alice \97  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \98  --telemetry-url ws://telemetry.polkadot.io:1024 \99  --validator100```101102In 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:103104```bash105cargo run -- \106  --base-path /tmp/bob \107  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \108  --chain=local \109  --bob \110  --port 30334 \111  --telemetry-url ws://telemetry.polkadot.io:1024 \112  --validator113```114115Additional CLI usage options are available and may be shown by running `cargo run -- --help`.116117## Benchmarks118119First of all, add rust toolchain and make it default.120```bash121rustup target add wasm32-unknown-unknown --toolchain nightly-2020-10-01122```123124Then in "/node/src" run build command below125```bash126cargo +nightly-2020-10-01 build --release --features runtime-benchmarks127```128129Run benchmark130```bash131target/release/nft benchmark --chain dev --pallet "pallet_nft" --extrinsic "*" --repeat 1132```133134## UI custom types135136Moved to [runtime_types.json](./runtime_types.json).137138## Running Integration Tests139140See [tests/README.md](./tests/README.md).