difftreelog
feat create_multiple_items chain extension
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth1792 Ok(())1792 Ok(())1793 }1793 }179417941795 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)?;18021803 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 }18091810 Ok(())1811 }179518121796 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;runtime/src/chain_extension.rsdiffbeforeafterboth--- a/runtime/src/chain_extension.rs
+++ b/runtime/src/chain_extension.rs
@@ -17,8 +17,6 @@
extern crate pallet_nft;
pub use pallet_nft::*;
-use crate::Runtime;
-use sp_runtime::AccountId32;
use crate::Vec;
/// Create item parameters
@@ -38,6 +36,13 @@
pub amount: u128,
}
+#[derive(Debug, PartialEq, Encode, Decode)]
+pub struct NFTExtCreateMultipleItems<E: Ext> {
+ pub owner: <E::T as SysConfig>::AccountId,
+ pub collection_id: u32,
+ pub data: Vec<CreateItemData>,
+}
+
/// The chain Extension of NFT pallet
pub struct NFTExtension;
@@ -81,6 +86,23 @@
_ => Err(DispatchError::Other("CreateItem error"))
}
},
+ 2 => {
+ // Create multiple items
+ let mut env = env.buf_in_buf_out();
+ let input: NFTExtCreateMultipleItems<E> = env.read_as()?;
+
+ let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
+
+ match pallet_nft::Module::<C>::create_multiple_items_internal(
+ env.ext().address().clone(),
+ &collection,
+ input.owner,
+ input.data,
+ ) {
+ Ok(_) => Ok(RetVal::Converging(func_id)),
+ _ => Err(DispatchError::Other("CreateMultipleItems error"))
+ }
+ },
_ => {
panic!("Passed unknown func_id to test chain extension: {}", func_id);
}