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

difftreelog

transfer fix

str-mv2020-08-05parent: #708aba4.patch.diff
in: master

4 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3085,6 +3085,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
+ "log",
  "pallet-transaction-payment",
  "parity-scale-codec",
  "serde",
modifiedpallets/nft/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -36,6 +36,7 @@
 [dependencies]
 # third-party dependencies
 serde = { version = "1.0.102", features = ["derive"] }
+log = "0.4.8"
 
 [dependencies.sp-std]
 default-features = false
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -371,7 +371,7 @@
                     let item = NftItemType {
                         collection: collection_id,
                         owner: owner,
-                        data: properties,
+                        data: properties.clone(),
                     };
     
                     Self::add_nft_item(item)?;
@@ -380,17 +380,18 @@
                 CollectionMode::ReFungible(_, _) => {
                     let mut owner_list = Vec::new();
                     let value = (10 as u128).pow(target_collection.decimal_points);
-                    owner_list.push(Ownership {owner: owner, fraction: value});
+                    owner_list.push(Ownership {owner: owner.clone(), fraction: value});
 
                     let item = ReFungibleItemType {
                         collection: collection_id,
                         owner: owner_list,
-                        data: properties
+                        data: properties.clone()
                     };
     
                     Self::add_refungible_item(item)?;
                 },
-                _ => ()
+                _ => { ensure!(1 == 0,"just error"); }
+
             };
 
             // call event
@@ -595,11 +596,11 @@
         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, itemcopy);  
         
         // Update balance
-        let new_balance = <Balance<T>>::get(itemcopy.collection, owner.clone()).checked_add(value).unwrap();
-        <Balance<T>>::insert(itemcopy.collection, owner.clone(), new_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(())
     }
@@ -626,7 +627,7 @@
         let item = full_item.owner.iter().filter(|i| i.owner == owner).next().unwrap();
         let amount = item.fraction;
 
-        ensure!(amount < value.into(),"Item balance not enouth");
+        ensure!(amount >= value.into(),"Item balance not enouth");
 
         // update balance
         let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.clone()).checked_sub(value).unwrap();
@@ -637,9 +638,10 @@
 
         let old_owner = item.owner.clone();
         let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner);
+        let val64 = value.into();
 
         // transfer
-        if amount == value.into() && !new_owner_has_account
+        if amount == val64 && !new_owner_has_account
         {
             // change owner
             // new owner do not have account
@@ -653,17 +655,17 @@
         else
         {
             let mut new_full_item = full_item.clone();
-            new_full_item.owner.iter_mut().find(|i| i.owner == owner).unwrap().fraction -= amount;
+            new_full_item.owner.iter_mut().find(|i| i.owner == owner).unwrap().fraction -= val64;
 
             // separate amount
             if new_owner_has_account {
                 // new owner has account
-                new_full_item.owner.iter_mut().find(|i| i.owner == new_owner).unwrap().fraction += amount;
+                new_full_item.owner.iter_mut().find(|i| i.owner == new_owner).unwrap().fraction += val64;
             }
             else
             {
                 // new owner do not have account
-                new_full_item.owner.push(Ownership { owner: new_owner.clone(), fraction: amount});
+                new_full_item.owner.push(Ownership { owner: new_owner.clone(), fraction: val64});
                 Self::add_token_index(collection_id, item_id, new_owner.clone())?;
             }
 
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
after · pallets/nft/src/tests.rs
1// Tests to be written here2use crate::mock::*;3use crate::{CollectionMode, Ownership};4use frame_support::{assert_noop, assert_ok};56#[test]7fn create_nft_item() {8    new_test_ext().execute_with(|| {9        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();10        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();11        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12        let mode: CollectionMode = CollectionMode::NFT(2000);1314        let origin1 = Origin::signed(1);15        assert_ok!(TemplateModule::create_collection(16            origin1.clone(),17            col_name1.clone(),18            col_desc1.clone(),19            token_prefix1.clone(),20            mode21        ));22        assert_eq!(TemplateModule::collection(1).owner, 1);232425        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));26        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());27    });28}2930#[test]31fn create_refungible_item() {32    new_test_ext().execute_with(|| {33        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();34        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();35        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();36        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);3738        let origin1 = Origin::signed(1);39        assert_ok!(TemplateModule::create_collection(40            origin1.clone(),41            col_name1.clone(),42            col_desc1.clone(),43            token_prefix1.clone(),44            mode45        ));46        assert_eq!(TemplateModule::collection(1).owner, 1);474849        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));50        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());51        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });52    });53}5455#[test]56fn transfer_refungible_item() {57    new_test_ext().execute_with(|| {58        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();59        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();60        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();61        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);6263        let origin1 = Origin::signed(1);64        let origin2 = Origin::signed(2);65        assert_ok!(TemplateModule::create_collection(66            origin1.clone(),67            col_name1.clone(),68            col_desc1.clone(),69            token_prefix1.clone(),70            mode71        ));72        assert_eq!(TemplateModule::collection(1).owner, 1);7374        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));75        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());76        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });77        assert_eq!(TemplateModule::balance_count(1,1), 1000);78        assert_eq!(TemplateModule::address_tokens(1,1), [1]);7980        // change owner scenario81        assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));82        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 });83        assert_eq!(TemplateModule::balance_count(1,1), 0);84        assert_eq!(TemplateModule::balance_count(1,2), 1000);85        assert_eq!(TemplateModule::address_tokens(1,1), []);86        assert_eq!(TemplateModule::address_tokens(1,2), [1]);8788        // split item scenario89        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));90        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 });91        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 });92        assert_eq!(TemplateModule::balance_count(1,2), 500);93        assert_eq!(TemplateModule::balance_count(1,3), 500);94        assert_eq!(TemplateModule::address_tokens(1,2), [1]);95        assert_eq!(TemplateModule::address_tokens(1,3), [1]);9697        // split item and new owner has account scenario98        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));99        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 });100        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 });101        assert_eq!(TemplateModule::balance_count(1,2), 300);102        assert_eq!(TemplateModule::balance_count(1,3), 700);103        assert_eq!(TemplateModule::address_tokens(1,2), [1]);104        assert_eq!(TemplateModule::address_tokens(1,3), [1]);105    });106}107108109#[test]110fn transfer_nft_item() {111    new_test_ext().execute_with(|| {112        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();113        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();114        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();115        let mode: CollectionMode = CollectionMode::NFT(2000);116117        let origin1 = Origin::signed(1);118        assert_ok!(TemplateModule::create_collection(119            origin1.clone(),120            col_name1.clone(),121            col_desc1.clone(),122            token_prefix1.clone(),123            mode124        ));125        assert_eq!(TemplateModule::collection(1).owner, 1);126127128        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));129        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());130        assert_eq!(TemplateModule::balance_count(1,1), 1);131        assert_eq!(TemplateModule::address_tokens(1,1), [1]);132133        // default scenario134        assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));135        assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2);136        assert_eq!(TemplateModule::balance_count(1,1), 0);137        assert_eq!(TemplateModule::balance_count(1,2), 1);138        assert_eq!(TemplateModule::address_tokens(1,1), []);139        assert_eq!(TemplateModule::address_tokens(1,2), [1]); 140    });141}142143144// #[test]145// fn create_collection_test() {146//     new_test_ext().execute_with(|| {147//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();148//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();149//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();150151//         let size = 1024;152//         let origin1 = Origin::signed(1);153//         assert_ok!(TemplateModule::create_collection(154//             origin1.clone(),155//             col_name1.clone(),156//             col_desc1.clone(),157//             token_prefix1.clone(),158//             size159//         ));160//         assert_eq!(TemplateModule::collection(1).owner, 1);161//     });162// }163164// #[test]165// fn change_collection_owner() {166//     new_test_ext().execute_with(|| {167//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();168//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();169//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();170171//         let size = 1024;172//         let origin1 = Origin::signed(1);173174//         assert_ok!(TemplateModule::create_collection(175//             origin1.clone(),176//             col_name1.clone(),177//             col_desc1.clone(),178//             token_prefix1.clone(),179//             size180//         ));181//         assert_ok!(TemplateModule::change_collection_owner(182//             origin1.clone(),183//             1,184//             2185//         ));186//         assert_eq!(TemplateModule::collection(1).owner, 2);187//     });188// }189190// #[test]191// fn destroy_collection() {192//     new_test_ext().execute_with(|| {193//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();194//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();195//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();196197//         let size = 1024;198//         let origin1 = Origin::signed(1);199200//         assert_ok!(TemplateModule::create_collection(201//             origin1.clone(),202//             col_name1.clone(),203//             col_desc1.clone(),204//             token_prefix1.clone(),205//             size206//         ));207//         assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));208//     });209// }210211// #[test]212// fn create_item() {213//     new_test_ext().execute_with(|| {214//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();215//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();216//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();217218//         let size = 1024;219//         let origin1 = Origin::signed(1);220//         let origin2 = Origin::signed(2);221222//         assert_ok!(TemplateModule::create_collection(223//             origin1.clone(),224//             col_name1.clone(),225//             col_desc1.clone(),226//             token_prefix1.clone(),227//             size228//         ));229//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));230//         assert_ok!(TemplateModule::create_item(231//             origin2.clone(),232//             1,233//             [1, 1, 1].to_vec()234//         ));235236//         // check balance (collection with id = 1, user id = 2)237//         assert_eq!(TemplateModule::balance_count((1, 2)), 1);238//     });239// }240241// #[test]242// fn burn_item() {243//     new_test_ext().execute_with(|| {244//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();245//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();246//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();247248//         let size = 1024;249//         let origin1 = Origin::signed(1);250//         let origin2 = Origin::signed(2);251252//         assert_ok!(TemplateModule::create_collection(253//             origin1.clone(),254//             col_name1.clone(),255//             col_desc1.clone(),256//             token_prefix1.clone(),257//             size258//         ));259//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));260//         assert_ok!(TemplateModule::create_item(261//             origin2.clone(),262//             1,263//             [1, 1, 1].to_vec()264//         ));265266//         // check balance (collection with id = 1, user id = 2)267//         assert_eq!(TemplateModule::balance_count((1, 2)), 1);268269//         // burn item270//         assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));271//         assert_noop!(272//             TemplateModule::burn_item(origin1.clone(), 1, 1),273//             "Item does not exists"274//         );275276//         assert_eq!(TemplateModule::balance_count((1, 1)), 0);277//     });278// }279280// #[test]281// fn add_collection_admin() {282//     new_test_ext().execute_with(|| {283//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();284//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();285//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();286287//         let size = 1024;288//         let origin1 = Origin::signed(1);289//         let origin2 = Origin::signed(2);290//         let origin3 = Origin::signed(3);291292//         assert_ok!(TemplateModule::create_collection(293//             origin1.clone(),294//             col_name1.clone(),295//             col_desc1.clone(),296//             token_prefix1.clone(),297//             size298//         ));299//         assert_ok!(TemplateModule::create_collection(300//             origin2.clone(),301//             col_name1.clone(),302//             col_desc1.clone(),303//             token_prefix1.clone(),304//             size305//         ));306//         assert_ok!(TemplateModule::create_collection(307//             origin3.clone(),308//             col_name1.clone(),309//             col_desc1.clone(),310//             token_prefix1.clone(),311//             size312//         ));313314//         assert_eq!(TemplateModule::collection(1).owner, 1);315//         assert_eq!(TemplateModule::collection(2).owner, 2);316//         assert_eq!(TemplateModule::collection(3).owner, 3);317318//         // collection admin319//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));320//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));321322//         assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);323//         assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);324//     });325// }326327// #[test]328// fn remove_collection_admin() {329//     new_test_ext().execute_with(|| {330//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();331//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();332//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();333334//         let size = 1024;335//         let origin1 = Origin::signed(1);336//         let origin2 = Origin::signed(2);337//         let origin3 = Origin::signed(3);338339//         assert_ok!(TemplateModule::create_collection(340//             origin1.clone(),341//             col_name1.clone(),342//             col_desc1.clone(),343//             token_prefix1.clone(),344//             size345//         ));346//         assert_ok!(TemplateModule::create_collection(347//             origin2.clone(),348//             col_name1.clone(),349//             col_desc1.clone(),350//             token_prefix1.clone(),351//             size352//         ));353//         assert_ok!(TemplateModule::create_collection(354//             origin3.clone(),355//             col_name1.clone(),356//             col_desc1.clone(),357//             token_prefix1.clone(),358//             size359//         ));360361//         assert_eq!(TemplateModule::collection(1).owner, 1);362//         assert_eq!(TemplateModule::collection(2).owner, 2);363//         assert_eq!(TemplateModule::collection(3).owner, 3);364365//         // collection admin366//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));367//         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));368369//         assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);370//         assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);371372//         // remove admin373//         assert_ok!(TemplateModule::remove_collection_admin(374//             origin2.clone(),375//             1,376//             3377//         ));378//         assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);379//     });380// }381382// #[test]383// fn balance_of() {384//     new_test_ext().execute_with(|| {385//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();386//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();387//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();388389//         let size = 1024;390//         let origin1 = Origin::signed(1);391//         let origin2 = Origin::signed(2);392//         let origin3 = Origin::signed(3);393394//         assert_ok!(TemplateModule::create_collection(395//             origin1.clone(),396//             col_name1.clone(),397//             col_desc1.clone(),398//             token_prefix1.clone(),399//             size400//         ));401//         assert_ok!(TemplateModule::create_collection(402//             origin2.clone(),403//             col_name1.clone(),404//             col_desc1.clone(),405//             token_prefix1.clone(),406//             size407//         ));408//         assert_ok!(TemplateModule::create_collection(409//             origin3.clone(),410//             col_name1.clone(),411//             col_desc1.clone(),412//             token_prefix1.clone(),413//             size414//         ));415416//         assert_eq!(TemplateModule::collection(1).owner, 1);417//         assert_eq!(TemplateModule::collection(2).owner, 2);418//         assert_eq!(TemplateModule::collection(3).owner, 3);419420//         // check balance before421//         assert_eq!(TemplateModule::balance_count((1, 1)), 0);422423//         // create item424//         assert_ok!(TemplateModule::create_item(425//             origin1.clone(),426//             1,427//             [1, 1, 1].to_vec()428//         ));429430//         // check balance (collection with id = 1, user id = 2)431//         assert_eq!(TemplateModule::balance_count((1, 1)), 1);432//         assert_eq!(TemplateModule::item_id((1, 1)).owner, 1);433//     });434// }435436// #[test]437// fn transfer() {438//     new_test_ext().execute_with(|| {439//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();440//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();441//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();442443//         let size = 1024;444//         let origin1 = Origin::signed(1);445//         let origin2 = Origin::signed(2);446//         let origin3 = Origin::signed(3);447448//         assert_ok!(TemplateModule::create_collection(449//             origin1.clone(),450//             col_name1.clone(),451//             col_desc1.clone(),452//             token_prefix1.clone(),453//             size454//         ));455//         assert_ok!(TemplateModule::create_collection(456//             origin2.clone(),457//             col_name1.clone(),458//             col_desc1.clone(),459//             token_prefix1.clone(),460//             size461//         ));462//         assert_ok!(TemplateModule::create_collection(463//             origin3.clone(),464//             col_name1.clone(),465//             col_desc1.clone(),466//             token_prefix1.clone(),467//             size468//         ));469470//         assert_eq!(TemplateModule::collection(1).owner, 1);471//         assert_eq!(TemplateModule::collection(2).owner, 2);472//         assert_eq!(TemplateModule::collection(3).owner, 3);473474//         // create item475//         assert_ok!(TemplateModule::create_item(476//             origin1.clone(),477//             1,478//             [1, 1, 1].to_vec()479//         ));480481//         // transfer482//         assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));483//         assert_eq!(TemplateModule::item_id((1, 1)).owner, 2);484485//         // balance_of check486//         assert_eq!(TemplateModule::balance_count((1, 1)), 0);487//         assert_eq!(TemplateModule::balance_count((1, 2)), 1);488//     });489// }490491// #[test]492// fn approve() {493//     new_test_ext().execute_with(|| {494//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();495//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();496//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();497498//         let size = 1024;499//         let origin1 = Origin::signed(1);500//         let origin2 = Origin::signed(2);501//         let origin3 = Origin::signed(3);502503//         assert_ok!(TemplateModule::create_collection(504//             origin1.clone(),505//             col_name1.clone(),506//             col_desc1.clone(),507//             token_prefix1.clone(),508//             size509//         ));510//         assert_ok!(TemplateModule::create_collection(511//             origin2.clone(),512//             col_name1.clone(),513//             col_desc1.clone(),514//             token_prefix1.clone(),515//             size516//         ));517//         assert_ok!(TemplateModule::create_collection(518//             origin3.clone(),519//             col_name1.clone(),520//             col_desc1.clone(),521//             token_prefix1.clone(),522//             size523//         ));524525//         assert_eq!(TemplateModule::collection(1).owner, 1);526//         assert_eq!(TemplateModule::collection(2).owner, 2);527//         assert_eq!(TemplateModule::collection(3).owner, 3);528529//         // create item530//         assert_ok!(TemplateModule::create_item(531//             origin1.clone(),532//             1,533//             [1, 1, 1].to_vec()534//         ));535536//         // approve537//         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));538//         assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);539//     });540// }541542// #[test]543// fn get_approved() {544//     new_test_ext().execute_with(|| {545//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();546//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();547//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();548549//         let size = 1024;550//         let origin1 = Origin::signed(1);551//         let origin2 = Origin::signed(2);552//         let origin3 = Origin::signed(3);553554//         assert_ok!(TemplateModule::create_collection(555//             origin1.clone(),556//             col_name1.clone(),557//             col_desc1.clone(),558//             token_prefix1.clone(),559//             size560//         ));561//         assert_ok!(TemplateModule::create_collection(562//             origin2.clone(),563//             col_name1.clone(),564//             col_desc1.clone(),565//             token_prefix1.clone(),566//             size567//         ));568//         assert_ok!(TemplateModule::create_collection(569//             origin3.clone(),570//             col_name1.clone(),571//             col_desc1.clone(),572//             token_prefix1.clone(),573//             size574//         ));575576//         assert_eq!(TemplateModule::collection(1).owner, 1);577//         assert_eq!(TemplateModule::collection(2).owner, 2);578//         assert_eq!(TemplateModule::collection(3).owner, 3);579580//         // create item581//         assert_ok!(TemplateModule::create_item(582//             origin1.clone(),583//             1,584//             [1, 1, 1].to_vec()585//         ));586587//         // approve588//         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));589//         assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);590//     });591// }592593// #[test]594// fn transfer_from() {595//     new_test_ext().execute_with(|| {596//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();597//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();598//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();599600//         let size = 1024;601//         let origin1 = Origin::signed(1);602//         let origin2 = Origin::signed(2);603//         let origin3 = Origin::signed(3);604605//         assert_ok!(TemplateModule::create_collection(606//             origin1.clone(),607//             col_name1.clone(),608//             col_desc1.clone(),609//             token_prefix1.clone(),610//             size611//         ));612//         assert_ok!(TemplateModule::create_collection(613//             origin2.clone(),614//             col_name1.clone(),615//             col_desc1.clone(),616//             token_prefix1.clone(),617//             size618//         ));619//         assert_ok!(TemplateModule::create_collection(620//             origin3.clone(),621//             col_name1.clone(),622//             col_desc1.clone(),623//             token_prefix1.clone(),624//             size625//         ));626627//         assert_eq!(TemplateModule::collection(1).owner, 1);628//         assert_eq!(TemplateModule::collection(2).owner, 2);629//         assert_eq!(TemplateModule::collection(3).owner, 3);630631//         // create item632//         assert_ok!(TemplateModule::create_item(633//             origin1.clone(),634//             1,635//             [1, 1, 1].to_vec()636//         ));637638//         // approve639//         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));640//         assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));641//     });642// }643644// #[test]645// fn index_list() {646//     new_test_ext().execute_with(|| {647//         let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();648//         let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();649//         let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();650651//         let size = 1024;652//         let origin1 = Origin::signed(1);653//         let origin2 = Origin::signed(2);654//         let origin3 = Origin::signed(3);655656//         assert_ok!(TemplateModule::create_collection(657//             origin1.clone(),658//             col_name1.clone(),659//             col_desc1.clone(),660//             token_prefix1.clone(),661//             size662//         ));663//         assert_ok!(TemplateModule::create_collection(664//             origin2.clone(),665//             col_name1.clone(),666//             col_desc1.clone(),667//             token_prefix1.clone(),668//             size669//         ));670//         assert_ok!(TemplateModule::create_collection(671//             origin3.clone(),672//             col_name1.clone(),673//             col_desc1.clone(),674//             token_prefix1.clone(),675//             size676//         ));677678//         assert_eq!(TemplateModule::collection(1).owner, 1);679//         assert_eq!(TemplateModule::collection(2).owner, 2);680//         assert_eq!(TemplateModule::collection(3).owner, 3);681//         // create items682//         assert_ok!(TemplateModule::create_item(683//             origin1.clone(),684//             1,685//             [1, 1, 1].to_vec()686//         ));687//         assert_ok!(TemplateModule::create_item(688//             origin1.clone(),689//             1,690//             [1, 1, 2].to_vec()691//         ));692//         assert_ok!(TemplateModule::create_item(693//             origin1.clone(),694//             1,695//             [1, 2, 3].to_vec()696//         ));697//         assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3);698//         // burn one699//         assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2));700//         assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2);701//         // burn another one702//         assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3));703//         assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1);704//     });705// }