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
1792 Ok(())1792 Ok(())
1793 }1793 }
17941794
1795 pub fn create_multiple_items_internal(
1796 sender: T::AccountId,
1797 collection: &CollectionHandle<T>,
1798 owner: T::AccountId,
1799 items_data: Vec<CreateItemData>,
1800 ) -> DispatchResult {
1801 Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?;
1802
1803 for data in &items_data {
1804 Self::validate_create_item_args(&collection, data)?;
1805 }
1806 for data in &items_data {
1807 Self::create_item_no_validation(&collection, owner.clone(), data.clone())?;
1808 }
1809
1810 Ok(())
1811 }
17951812
1796 fn is_correct_transfer(collection: &CollectionHandle<T>, recipient: &T::AccountId) -> DispatchResult {1813 fn is_correct_transfer(collection: &CollectionHandle<T>, recipient: &T::AccountId) -> DispatchResult {
1797 let collection_id = collection.id;1814 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 }