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

difftreelog

feat create_multiple_items chain extension

Yaroslav Bolyukin2021-05-06parent: #172f80a.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -1792,6 +1792,23 @@
         Ok(())
     }
 
+    pub fn create_multiple_items_internal(
+        sender: T::AccountId,
+        collection: &CollectionHandle<T>,
+        owner: T::AccountId,
+        items_data: Vec<CreateItemData>,
+    ) -> DispatchResult {
+        Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?;
+
+        for data in &items_data {
+            Self::validate_create_item_args(&collection, data)?;
+        }
+        for data in &items_data {
+            Self::create_item_no_validation(&collection, owner.clone(), data.clone())?;
+        }
+
+        Ok(())
+    }
 
     fn is_correct_transfer(collection: &CollectionHandle<T>, recipient: &T::AccountId) -> DispatchResult {
         let collection_id = collection.id;
modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
1717
18extern crate pallet_nft;18extern crate pallet_nft;
19pub use pallet_nft::*;19pub use pallet_nft::*;
20use crate::Runtime;
21use sp_runtime::AccountId32;
22use crate::Vec;20use crate::Vec;
2321
24/// Create item parameters22/// Create item parameters
38 pub amount: u128,36 pub amount: u128,
39}37}
38
39#[derive(Debug, PartialEq, Encode, Decode)]
40pub struct NFTExtCreateMultipleItems<E: Ext> {
41 pub owner: <E::T as SysConfig>::AccountId,
42 pub collection_id: u32,
43 pub data: Vec<CreateItemData>,
44}
4045
41/// The chain Extension of NFT pallet46/// The chain Extension of NFT pallet
42pub struct NFTExtension;47pub struct NFTExtension;
81 _ => Err(DispatchError::Other("CreateItem error"))86 _ => Err(DispatchError::Other("CreateItem error"))
82 }87 }
83 },88 },
89 2 => {
90 // Create multiple items
91 let mut env = env.buf_in_buf_out();
92 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;
93
94 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
95
96 match pallet_nft::Module::<C>::create_multiple_items_internal(
97 env.ext().address().clone(),
98 &collection,
99 input.owner,
100 input.data,
101 ) {
102 Ok(_) => Ok(RetVal::Converging(func_id)),
103 _ => Err(DispatchError::Other("CreateMultipleItems error"))
104 }
105 },
84 _ => {106 _ => {
85 panic!("Passed unknown func_id to test chain extension: {}", func_id);107 panic!("Passed unknown func_id to test chain extension: {}", func_id);
86 }108 }