difftreelog
Update readme md
in: master
2 files changed
README.mddiffbeforeafterboth123# 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 Rust Toolchain 1.44.0:5657```bash58rustup install 1.44.059```60614. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)62```bash63rustup toolchain list64rustup default 1.44.0-x86_64-unknown-linux-gnu65```66675. Install nightly toolchain and add wasm target for it:6869```bash70rustup toolchain install nightly-2020-05-0171rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu72```73746. Build:75```bash76cargo build77```7879## Run8081You can start a development chain with:8283```bash84cargo run -- --dev85```8687Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8889If 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.9091We'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:9293```bash94cargo run -- \95 --base-path /tmp/alice \96 --chain=local \97 --alice \98 --node-key 0000000000000000000000000000000000000000000000000000000000000001 \99 --telemetry-url ws://telemetry.polkadot.io:1024 \100 --validator101```102103In 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:104105```bash106cargo run -- \107 --base-path /tmp/bob \108 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \109 --chain=local \110 --bob \111 --port 30334 \112 --telemetry-url ws://telemetry.polkadot.io:1024 \113 --validator114```115116Additional CLI usage options are available and may be shown by running `cargo run -- --help`.117118## Benchmarks119120First of all, add rust toolchain and make it default.121rustup target add wasm32-unknown-unknown --toolchain nightly-2020-10-01122123Then in "/node/src" run build command below124cargo +nightly-2020-10-01 build --release --features runtime-benchmarks125126Run benchmark127target/release/nft benchmark --chain dev --pallet "pallet_nft" --extrinsic "*" --repeat 1128129## UI custom types130```131{132 "Schedule": {133 "version": "u32",134 "put_code_per_byte_cost": "Gas",135 "grow_mem_cost": "Gas",136 "regular_op_cost": "Gas",137 "return_data_per_byte_cost": "Gas",138 "event_data_per_byte_cost": "Gas",139 "event_per_topic_cost": "Gas",140 "event_base_cost": "Gas",141 "call_base_cost": "Gas",142 "instantiate_base_cost": "Gas",143 "dispatch_base_cost": "Gas",144 "sandbox_data_read_cost": "Gas",145 "sandbox_data_write_cost": "Gas",146 "transfer_cost": "Gas",147 "instantiate_cost": "Gas",148 "max_event_topics": "u32",149 "max_stack_height": "u32",150 "max_memory_pages": "u32",151 "max_table_size": "u32",152 "enable_println": "bool",153 "max_subject_len": "u32"154 },155 "AccessMode": {156 "_enum": [157 "Normal",158 "WhiteList"159 ]160 },161 "CollectionMode": {162 "_enum": {163 "Invalid": null,164 "NFT": "u32",165 "Fungible": "u32",166 "ReFungible": "(u32, u32)"167 }168 },169 "Ownership": {170 "Owner": "AccountId",171 "Fraction": "u128"172 },173 "FungibleItemType": {174 "Collection": "u64",175 "Owner": "AccountId",176 "Value": "u128"177 },178 "ReFungibleItemType": {179 "Collection": "u64",180 "Owner": "Vec<Ownership>",181 "Data": "Vec<u8>"182 },183 "NftItemType": {184 "Collection": "u64",185 "Owner": "AccountId",186 "Data": "Vec<u8>"187 },188 "Ownership": {189 "owner": "AccountId",190 "fraction": "u128"191 },192 "ReFungibleItemType": {193 "Collection": "u64",194 "Owner": "Vec<Ownership<AccountId>>",195 "Data": "Vec<u8>"196 },197 "CollectionType": {198 "Owner": "AccountId",199 "Mode": "CollectionMode",200 "Access": "AccessMode",201 "DecimalPoints": "u32",202 "Name": "Vec<u16>",203 "Description": "Vec<u16>",204 "TokenPrefix": "Vec<u8>",205 "CustomDataSize": "u32",206 "MintMode": "bool",207 "OffchainSchema": "Vec<u8>",208 "Sponsor": "AccountId",209 "UnconfirmedSponsor": "AccountId"210 },211 "ApprovePermissions": {212 "Approved": "AccountId",213 "Amount": "u64"214 },215 "RawData": "Vec<u8>",216 "Address": "AccountId",217 "LookupSource": "AccountId",218 "Weight": "u64"219}220221```123# 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 Rust Toolchain 1.44.0:5657```bash58rustup install 1.44.059```60614. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)62```bash63rustup toolchain list64rustup default 1.44.0-x86_64-unknown-linux-gnu65```66675. Install nightly toolchain and add wasm target for it:6869```bash70rustup toolchain install nightly-2020-05-0171rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu72```73746. Build:75```bash76cargo build77```7879## Run8081You can start a development chain with:8283```bash84cargo run -- --dev85```8687Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8889If 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.9091We'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:9293```bash94cargo run -- \95 --base-path /tmp/alice \96 --chain=local \97 --alice \98 --node-key 0000000000000000000000000000000000000000000000000000000000000001 \99 --telemetry-url ws://telemetry.polkadot.io:1024 \100 --validator101```102103In 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:104105```bash106cargo run -- \107 --base-path /tmp/bob \108 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \109 --chain=local \110 --bob \111 --port 30334 \112 --telemetry-url ws://telemetry.polkadot.io:1024 \113 --validator114```115116Additional CLI usage options are available and may be shown by running `cargo run -- --help`.117118## Benchmarks119120First of all, add rust toolchain and make it default.121```bash122rustup target add wasm32-unknown-unknown --toolchain nightly-2020-10-01123```124125Then in "/node/src" run build command below126```bash127cargo +nightly-2020-10-01 build --release --features runtime-benchmarks128```129130Run benchmark131```bash132target/release/nft benchmark --chain dev --pallet "pallet_nft" --extrinsic "*" --repeat 1133```134135## UI custom types136```137{138 "Schedule": {139 "version": "u32",140 "put_code_per_byte_cost": "Gas",141 "grow_mem_cost": "Gas",142 "regular_op_cost": "Gas",143 "return_data_per_byte_cost": "Gas",144 "event_data_per_byte_cost": "Gas",145 "event_per_topic_cost": "Gas",146 "event_base_cost": "Gas",147 "call_base_cost": "Gas",148 "instantiate_base_cost": "Gas",149 "dispatch_base_cost": "Gas",150 "sandbox_data_read_cost": "Gas",151 "sandbox_data_write_cost": "Gas",152 "transfer_cost": "Gas",153 "instantiate_cost": "Gas",154 "max_event_topics": "u32",155 "max_stack_height": "u32",156 "max_memory_pages": "u32",157 "max_table_size": "u32",158 "enable_println": "bool",159 "max_subject_len": "u32"160 },161 "AccessMode": {162 "_enum": [163 "Normal",164 "WhiteList"165 ]166 },167 "CollectionMode": {168 "_enum": {169 "Invalid": null,170 "NFT": "u32",171 "Fungible": "u32",172 "ReFungible": "(u32, u32)"173 }174 },175 "Ownership": {176 "Owner": "AccountId",177 "Fraction": "u128"178 },179 "FungibleItemType": {180 "Collection": "u64",181 "Owner": "AccountId",182 "Value": "u128"183 },184 "ReFungibleItemType": {185 "Collection": "u64",186 "Owner": "Vec<Ownership>",187 "Data": "Vec<u8>"188 },189 "NftItemType": {190 "Collection": "u64",191 "Owner": "AccountId",192 "Data": "Vec<u8>"193 },194 "Ownership": {195 "owner": "AccountId",196 "fraction": "u128"197 },198 "ReFungibleItemType": {199 "Collection": "u64",200 "Owner": "Vec<Ownership<AccountId>>",201 "Data": "Vec<u8>"202 },203 "CollectionType": {204 "Owner": "AccountId",205 "Mode": "CollectionMode",206 "Access": "AccessMode",207 "DecimalPoints": "u32",208 "Name": "Vec<u16>",209 "Description": "Vec<u16>",210 "TokenPrefix": "Vec<u8>",211 "CustomDataSize": "u32",212 "MintMode": "bool",213 "OffchainSchema": "Vec<u8>",214 "Sponsor": "AccountId",215 "UnconfirmedSponsor": "AccountId"216 },217 "ApprovePermissions": {218 "Approved": "AccountId",219 "Amount": "u64"220 },221 "RawData": "Vec<u8>",222 "Address": "AccountId",223 "LookupSource": "AccountId",224 "Weight": "u64"225}226227```runtime/src/lib.rsdiffbeforeafterboth--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -527,9 +527,6 @@
) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};
- // use frame_system_benchmarking::Module as SystemBench;
- // impl frame_system_benchmarking::Trait for Runtime {}
-
let whitelist: Vec<TrackedStorageKey> = vec![
// Block Number
hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),
@@ -546,9 +543,6 @@
let mut batches = Vec::<BenchmarkBatch>::new();
let params = (&config, &whitelist);
- // add_benchmark!(params, batches, frame_system, SystemBench::<Runtime>);
- // add_benchmark!(params, batches, pallet_balances, Balances);
- // add_benchmark!(params, batches, pallet_timestamp, Timestamp);
add_benchmark!(params, batches, pallet_nft, Nft);
if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }