difftreelog
feat create_multiple_items chain extension
in: master
2 files changed
pallets/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;
runtime/src/chain_extension.rsdiffbeforeafterboth171718extern 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;232124/// Create item parameters22/// Create item parameters38 pub amount: u128,36 pub amount: u128,39}37}3839#[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}404541/// The chain Extension of NFT pallet46/// The chain Extension of NFT pallet42pub 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 items91 let mut env = env.buf_in_buf_out();92 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;9394 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;9596 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 }