git.delta.rocks / unique-network / refs/commits / 424f9cb7a9fa

difftreelog

Resolved merge conflicts.

sotmorskiy2020-11-26parent: #5ecbc86.patch.diff
in: master

3 files changed

modifiedpallets/nft/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/nft/src/benchmarking.rs
+++ b/pallets/nft/src/benchmarking.rs
@@ -165,7 +165,7 @@
             let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
             let mode: CollectionMode = CollectionMode::NFT;
             let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
-            let nft_data = CreateNftData {
+            let mut nft_data = CreateNftData {
                 const_data: vec![],
                 variable_data: vec![]
             };
@@ -173,7 +173,7 @@
                 nft_data.const_data.push(10);
                 nft_data.variable_data.push(10);
             }
-            let mut data = CreateItemData::NFT(nft_data);
+            let data = CreateItemData::NFT(nft_data);
             Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
 
         }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
837 let target_collection = <Collection<T>>::get(collection_id);837 let target_collection = <Collection<T>>::get(collection_id);
838838
839 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;839 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;
840 Self::validate_create_item_args(&target_collection, &properties)?;840 Self::validate_create_item_args(&target_collection, &data)?;
841 Self::create_item_no_validation(collection_id, &target_collection, &properties, &owner)?;841 Self::create_item_no_validation(collection_id, &target_collection, owner, data)?;
842842
843 Ok(())843 Ok(())
844 }844 }
858 /// 858 ///
859 /// * collection_id: ID of the collection.859 /// * collection_id: ID of the collection.
860 /// 860 ///
861 /// * properties: Array items properties. Each property is an array of bytes itself, see [create_item].861 /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].
862 /// 862 ///
863 /// * owner: Address, initial owner of the NFT.863 /// * owner: Address, initial owner of the NFT.
864 #[weight = 0]864 #[weight = T::WeightInfo::create_item(items_data.into_iter()
865 .map(|data| { data.len() })
866 .sum())]
865 pub fn create_multiple_items(origin, collection_id: u64, properties: Vec<Vec<u8>>, owner: T::AccountId) -> DispatchResult {867 pub fn create_multiple_items(origin, collection_id: u64, owner: T::AccountId, items_data: Vec<CreateItemData>) -> DispatchResult {
866868
867 ensure!(properties.len() > 0, "Length of items properties must be greater than 0.");869 ensure!(items_data.len() > 0, "Length of items properties must be greater than 0.");
868 let sender = ensure_signed(origin)?;870 let sender = ensure_signed(origin)?;
869871
870 Self::collection_exists(collection_id)?;872 Self::collection_exists(collection_id)?;
871 let target_collection = <Collection<T>>::get(collection_id);873 let target_collection = <Collection<T>>::get(collection_id);
872874
873 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;875 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;
874876
875 for prop in &properties {877 for data in &items_data {
876 Self::validate_create_item_args(&target_collection, prop)?;878 Self::validate_create_item_args(&target_collection, data)?;
877 }879 }
878 for prop in &properties {880 for data in &items_data {
879 Self::create_item_no_validation(collection_id, &target_collection, prop, &owner)?;881 Self::create_item_no_validation(collection_id, &target_collection, owner.clone(), data.clone())?;
880 }882 }
881883
882 Ok(())884 Ok(())
1290 Ok(())1292 Ok(())
1291 }1293 }
12921294
1293 fn validate_create_item_args(collection: &CollectionType<T::AccountId>, properties: &Vec<u8>) -> DispatchResult {1295 fn validate_create_item_args(target_collection: &CollectionType<T::AccountId>, data: &CreateItemData) -> DispatchResult {
1294
1295 match collection.mode1296 match target_collection.mode
1296 {1297 {
1297 CollectionMode::NFT(_) => {1298 CollectionMode::NFT => {
12981299 if let CreateItemData::NFT(data) = data {
1299 // check size1300 // check sizes
1301 ensure!(ChainLimit::get().custom_data_limit >= data.const_data.len() as u32, "const_data exceeded data limit.");
1300 ensure!(collection.custom_data_size >= properties.len() as u32, "Size of item is too large")1302 ensure!(ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32, "variable_data exceeded data limit.");
1303 } else {
1304 fail!("Not NFT item data used to mint in NFT collection.");
1305 }
1301 },1306 },
1302 CollectionMode::Fungible(_) => {1307 CollectionMode::Fungible(_) => {
13031308 if let CreateItemData::Fungible(_) = data {
1304 // check size1309 } else {
1305 ensure!(properties.len() as u32 == 0, "Size of item must be 0 with fungible type")1310 fail!("Not Fungible item data used to mint in Fungible collection.");
1311 }
1306 },1312 },
1307 CollectionMode::ReFungible(_, _) => {1313 CollectionMode::ReFungible(_) => {
1314 if let CreateItemData::ReFungible(data) = data {
13081315
1309 // check size1316 // check sizes
1317 ensure!(ChainLimit::get().custom_data_limit >= data.const_data.len() as u32, "const_data exceeded data limit.");
1310 ensure!(collection.custom_data_size >= properties.len() as u32, "Size of item is too large")1318 ensure!(ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32, "variable_data exceeded data limit.");
1319 } else {
1320 fail!("Not Re Fungible item data used to mint in Re Fungible collection.");
1321 }
1311 },1322 },
1312 _ => {1323 _ => { fail!("Unexpected collection type."); }
1313 fail!("Unexpected collection mode")
1314 }
1315 }1324 };
13161325
1317 Ok(())1326 Ok(())
1318 }1327 }
13191328
1320 fn create_item_no_validation(collection_id: u64, collection: &CollectionType<T::AccountId>, properties: &Vec<u8>, owner: &T::AccountId) -> DispatchResult {1329 fn create_item_no_validation(collection_id: u64, collection: &CollectionType<T::AccountId>, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
1321 match collection.mode1330 match data
1322 {1331 {
1323 CollectionMode::NFT(_) => {1332 CreateItemData::NFT(data) => {
1324
1325 // Create nft item
1326 let item = NftItemType {1333 let item = NftItemType {
1327 collection: collection_id,1334 collection: collection_id,
1328 owner: owner.clone(),1335 owner,
1336 const_data: data.const_data,
1329 data: properties.clone(),1337 variable_data: data.variable_data
1330 };1338 };
13311339
1332 Self::add_nft_item(item)?;1340 Self::add_nft_item(item)?;
1333
1334 },1341 },
1335 CollectionMode::Fungible(_) => {1342 CreateItemData::Fungible(_) => {
1336
1337 let item = FungibleItemType {1343 let item = FungibleItemType {
1338 collection: collection_id,1344 collection: collection_id,
1339 owner: owner.clone(),1345 owner,
1340 value: (10 as u128).pow(collection.decimal_points)1346 value: (10 as u128).pow(collection.decimal_points)
1341 };1347 };
13421348
1343 Self::add_fungible_item(item)?;1349 Self::add_fungible_item(item)?;
1344 },1350 },
1345 CollectionMode::ReFungible(_, _) => {1351 CreateItemData::ReFungible(data) => {
1346
1347 let mut owner_list = Vec::new();1352 let mut owner_list = Vec::new();
1348 let value = (10 as u128).pow(collection.decimal_points);1353 let value = (10 as u128).pow(collection.decimal_points);
1351 let item = ReFungibleItemType {1356 let item = ReFungibleItemType {
1352 collection: collection_id,1357 collection: collection_id,
1353 owner: owner_list,1358 owner: owner_list,
1359 const_data: data.const_data,
1354 data: properties.clone()1360 variable_data: data.variable_data
1355 };1361 };
13561362
1357 Self::add_refungible_item(item)?;1363 Self::add_refungible_item(item)?;
1358 },1364 }
1359 _ => { ensure!(1 == 0,"just error"); }
1360
1361 };1365 };
1366
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -92,41 +92,23 @@
 #[test]
 fn create_nft_multiple_items() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        let properties = [[1, 2, 3].to_vec(), [3, 2, 1].to_vec(), [3, 3, 3].to_vec()].to_vec();
+        let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];
 
         assert_ok!(TemplateModule::create_multiple_items(
             origin1.clone(),
             1,
-            properties.clone(),
-            1
+            1,
+            items_data.clone().into_iter().map(|d| { d.into() }).collect()
         ));
-        for (index, data) in properties.iter().enumerate() {
-            assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as u64).data, *data);
+        for (index, data) in items_data.iter().enumerate() {
+            assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as u64).const_data.to_vec(), data.const_data);
+            assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as u64).variable_data.to_vec(), data.variable_data);
         }
     });
 }
@@ -160,43 +142,25 @@
 #[test]
 fn create_multiple_refungible_items() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        create_test_collection(&CollectionMode::ReFungible(3), 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        let properties = [[1, 2, 3].to_vec(), [3, 2, 1].to_vec(), [3, 3, 3].to_vec()].to_vec();
+        let items_data = vec![default_re_fungible_data(), default_re_fungible_data(), default_re_fungible_data()];
 
         assert_ok!(TemplateModule::create_multiple_items(
             origin1.clone(),
             1,
-            properties.clone(),
-            1
+            1,
+            items_data.clone().into_iter().map(|d| { d.into() }).collect()
         ));
-        for (index, data) in properties.iter().enumerate() {
+        for (index, data) in items_data.iter().enumerate() {
 
             let item = TemplateModule::refungible_item_id(1, (index + 1) as u64);
-            assert_eq!(item.data, *data);
+            assert_eq!(item.const_data.to_vec(), data.const_data);
+            assert_eq!(item.variable_data.to_vec(), data.variable_data);
             assert_eq!(
                 item.owner[0],
                 Ownership {
@@ -225,41 +189,22 @@
 #[test]
 fn create_multiple_fungible_items() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::Fungible(3);
+        default_limits();
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        create_test_collection(&CollectionMode::Fungible(3), 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        let properties = [[].to_vec(), [].to_vec(), [].to_vec()].to_vec();
+        let items_data = vec![default_fungible_data(), default_fungible_data(), default_fungible_data()];
 
         assert_ok!(TemplateModule::create_multiple_items(
             origin1.clone(),
             1,
-            properties.clone(),
-            1
+            1,
+            items_data.clone().into_iter().map(|d| { d.into() }).collect()
         ));
         
-        for (index, _) in properties.iter().enumerate() {
+        for (index, _) in items_data.iter().enumerate() {
             assert_eq!(TemplateModule::fungible_item_id(1, (index + 1) as u64).owner, 1);
         }
         assert_eq!(TemplateModule::balance_count(1, 1), 3000);
@@ -1471,7 +1416,7 @@
 
         assert_noop!(
             TemplateModule::create_item(origin2.clone(), 1, 2, default_nft_data().into()),
-            "Public minting is not allowed for this collection."
+            "Public minting is not allowed for this collection"
         );
     });
 }
@@ -1500,7 +1445,7 @@
 
         assert_noop!(
             TemplateModule::create_item(origin2.clone(), 1, 2, default_nft_data().into()),
-            "Public minting is not allowed for this collection."
+            "Public minting is not allowed for this collection"
         );
     });
 }