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

difftreelog

Merge branch 'dev'

Greg Zaitsev2020-08-05parents: #5b57799 #a55594d.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## Application Development67If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).89## Building1011Building 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.12131. Install Rust:1415```bash16curl https://sh.rustup.rs -sSf | sh17sudo apt-get install libssl-dev pkg-config libclang-dev clang18```19202. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.21223. Install Rust Toolchain 1.44.0:2324```bash25rustup install 1.44.026```27284. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)29```bash30rustup toolchain list31rustup default 1.44.0-x86_64-unknown-linux-gnu32```33345. Install nightly toolchain and add wasm target for it:3536```bash37rustup toolchain install nightly-2020-05-0138rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu39```40416. Build:42```bash43cargo build44```4546## Run4748You can start a development chain with:4950```bash51cargo run -- --dev52```5354Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.5556If 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.5758We'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:5960```bash61cargo run -- \62  --base-path /tmp/alice \63  --chain=local \64  --alice \65  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \66  --telemetry-url ws://telemetry.polkadot.io:1024 \67  --validator68```6970In 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:7172```bash73cargo run -- \74  --base-path /tmp/bob \75  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \76  --chain=local \77  --bob \78  --port 30334 \79  --telemetry-url ws://telemetry.polkadot.io:1024 \80  --validator81```8283Additional CLI usage options are available and may be shown by running `cargo run -- --help`.848586## UI custom types87```88{89  "Schedule": {90    "version": "u32",91    "put_code_per_byte_cost": "Gas",92    "grow_mem_cost": "Gas",93    "regular_op_cost": "Gas",94    "return_data_per_byte_cost": "Gas",95    "event_data_per_byte_cost": "Gas",96    "event_per_topic_cost": "Gas",97    "event_base_cost": "Gas",98    "call_base_cost": "Gas",99    "instantiate_base_cost": "Gas",100    "dispatch_base_cost": "Gas",101    "sandbox_data_read_cost": "Gas",102    "sandbox_data_write_cost": "Gas",103    "transfer_cost": "Gas",104    "instantiate_cost": "Gas",105    "max_event_topics": "u32",106    "max_stack_height": "u32",107    "max_memory_pages": "u32",108    "max_table_size": "u32",109    "enable_println": "bool",110    "max_subject_len": "u32"111  },112  "CollectionMode": {113    "_enum": {114      "Invalid": null,115      "NFT": "u32",116      "Fungible": "u32",117      "ReFungible": "(u32, u32)"118    }119  },120  "NftItemType": {121    "Collection": "u64",122    "Owner": "AccountId",123    "Data": "Vec<u8>"124  },125  "CollectionType": {126    "Owner": "AccountId",127    "Mode": "CollectionMode",128    "Access": "u8",129    "NextItemId": "u64",130    "DecimalPoints": "u32",131    "Name": "Vec<u16>",132    "Description": "Vec<u16>",133    "TokenPrefix": "Vec<u8>",134    "CustomDataSize": "u32",135    "OffchainSchema": "Vec<u8>",136    "Sponsor": "AccountId",137    "UnconfirmedSponsor": "AccountId"138  },139  "RawData": "Vec<u8>",140  "Address": "AccountId",141  "LookupSource": "AccountId",142  "Weight": "u64"143}144```
after · README.md
1![Docker build](https://github.com/usetech-llc/nft_parachain/workflows/Docker%20build/badge.svg)23# NFT Parachain45## Application Development67If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).89## Building1011Building 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.12131. Install Rust:1415```bash16curl https://sh.rustup.rs -sSf | sh17sudo apt-get install libssl-dev pkg-config libclang-dev clang18```19202. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.21223. Install Rust Toolchain 1.44.0:2324```bash25rustup install 1.44.026```27284. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)29```bash30rustup toolchain list31rustup default 1.44.0-x86_64-unknown-linux-gnu32```33345. Install nightly toolchain and add wasm target for it:3536```bash37rustup toolchain install nightly-2020-05-0138rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu39```40416. Build:42```bash43cargo build44```4546## Run4748You can start a development chain with:4950```bash51cargo run -- --dev52```5354Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.5556If 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.5758We'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:5960```bash61cargo run -- \62  --base-path /tmp/alice \63  --chain=local \64  --alice \65  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \66  --telemetry-url ws://telemetry.polkadot.io:1024 \67  --validator68```6970In 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:7172```bash73cargo run -- \74  --base-path /tmp/bob \75  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \76  --chain=local \77  --bob \78  --port 30334 \79  --telemetry-url ws://telemetry.polkadot.io:1024 \80  --validator81```8283Additional CLI usage options are available and may be shown by running `cargo run -- --help`.848586## UI custom types87```88{89  "Schedule": {90    "version": "u32",91    "put_code_per_byte_cost": "Gas",92    "grow_mem_cost": "Gas",93    "regular_op_cost": "Gas",94    "return_data_per_byte_cost": "Gas",95    "event_data_per_byte_cost": "Gas",96    "event_per_topic_cost": "Gas",97    "event_base_cost": "Gas",98    "call_base_cost": "Gas",99    "instantiate_base_cost": "Gas",100    "dispatch_base_cost": "Gas",101    "sandbox_data_read_cost": "Gas",102    "sandbox_data_write_cost": "Gas",103    "transfer_cost": "Gas",104    "instantiate_cost": "Gas",105    "max_event_topics": "u32",106    "max_stack_height": "u32",107    "max_memory_pages": "u32",108    "max_table_size": "u32",109    "enable_println": "bool",110    "max_subject_len": "u32"111  },112  "CollectionMode": {113    "_enum": {114      "Invalid": null,115      "NFT": "u32",116      "Fungible": "u32",117      "ReFungible": "(u32, u32)"118    }119  },120  "NftItemType": {121    "Collection": "u64",122    "Owner": "AccountId",123    "Data": "Vec<u8>"124  },125  "CollectionType": {126    "Owner": "AccountId",127    "Mode": "CollectionMode",128    "Access": "u8",129    "DecimalPoints": "u32",130    "Name": "Vec<u16>",131    "Description": "Vec<u16>",132    "TokenPrefix": "Vec<u8>",133    "CustomDataSize": "u32",134    "OffchainSchema": "Vec<u8>",135    "Sponsor": "AccountId",136    "UnconfirmedSponsor": "AccountId"137  },138  "RawData": "Vec<u8>",139  "Address": "AccountId",140  "LookupSource": "AccountId",141  "Weight": "u64"142}143```
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -81,7 +81,6 @@
     pub owner: AccountId,
     pub mode: CollectionMode,
     pub access: AccessMode,
-    pub next_item_id: u64,
     pub decimal_points: u32,
     pub name: Vec<u16>,        // 64 include null escape char
     pub description: Vec<u16>, // 256 include null escape char
@@ -228,7 +227,6 @@
                 description: description,
                 decimal_points: decimal_points,
                 token_prefix: prefix,
-                next_item_id: next_id,
                 offchain_schema: Vec::new(),
                 custom_data_size: custom_data_size,
                 sponsor: T::AccountId::default(),
@@ -364,9 +362,6 @@
             ensure!(target_collection.custom_data_size >= properties.len() as u32, "Size of item is too large");
 
             Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;
-
-            let new_balance = <Balance<T>>::get(collection_id, owner.clone()).checked_add(1).unwrap();
-            <Balance<T>>::insert(collection_id, owner.clone(), new_balance);
 
             // TODO: implement other modes
             match target_collection.mode 
@@ -593,10 +588,17 @@
         .checked_add(1)
         .expect("Item list index id error");
 
-        Self::add_token_index(item.collection, current_index, item.owner.first().unwrap().owner.clone())?;
+        let value = item.owner.first().unwrap().fraction as u64;
+        let owner = item.owner.first().unwrap().owner.clone();
+
+        Self::add_token_index(item.collection, current_index, owner.clone())?;
 
         <ItemListIndex>::insert(item.collection, current_index);
-        <ReFungibleItemList<T>>::insert(item.collection, current_index, item);        
+        <ReFungibleItemList<T>>::insert(item.collection, current_index, item);  
+        
+        // Update balance
+        let new_balance = <Balance<T>>::get(item.collection, owner.clone()).checked_add(value).unwrap();
+        <Balance<T>>::insert(item.collection, owner.clone(), new_balance);
 
         Ok(())
     }
@@ -681,6 +683,10 @@
         <ItemListIndex>::insert(item.collection, current_index);
         <NftItemList<T>>::insert(item.collection, current_index, item);
 
+        // Update balance
+        let new_balance = <Balance<T>>::get(item.collection, item.owner.clone()).checked_add(1).unwrap();
+        <Balance<T>>::insert(item.collection_id, item.owner.clone(), new_balance);
+
         Ok(())
     }