difftreelog
feat set_variable_meta_data chain extension
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth1334 ) -> DispatchResult {1334 ) -> DispatchResult {1335 let sender = ensure_signed(origin)?;1335 let sender = ensure_signed(origin)?;1336 1336 1337 let target_collection = Self::get_collection(collection_id)?;1337 let collection = Self::get_collection(collection_id)?;13381338 Self::token_exists(&target_collection, item_id)?;1339 Self::set_variable_meta_data_internal(sender, &collection, item_id, data)?;13391340 ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);13411342 // Modify permissions check1343 ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) ||1344 Self::is_owner_or_admin_permissions(&target_collection, sender.clone()),1345 Error::<T>::NoPermission);13461347 match target_collection.mode1348 {1349 CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?,1350 CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?,1351 CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),1352 _ => fail!(Error::<T>::UnexpectedCollectionType)1353 };135413401355 Ok(())1341 Ok(())1356 }1342 }1821 Ok(())1807 Ok(())1822 }1808 }18091810 pub fn set_variable_meta_data_internal(1811 sender: T::AccountId,1812 collection: &CollectionHandle<T>, 1813 item_id: TokenId,1814 data: Vec<u8>,1815 ) -> DispatchResult {1816 Self::token_exists(&collection, item_id)?;18171818 ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);18191820 // Modify permissions check1821 ensure!(Self::is_item_owner(sender.clone(), &collection, item_id) ||1822 Self::is_owner_or_admin_permissions(&collection, sender.clone()),1823 Error::<T>::NoPermission);18241825 match collection.mode1826 {1827 CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?,1828 CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?,1829 CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),1830 _ => fail!(Error::<T>::UnexpectedCollectionType)1831 };18321833 Ok(())1834 }182318351824 pub fn create_multiple_items_internal(1836 pub fn create_multiple_items_internal(1825 sender: T::AccountId,1837 sender: T::AccountId,runtime/src/chain_extension.rsdiffbeforeafterboth60 pub amount: u128,60 pub amount: u128,61}61}6263#[derive(Debug, PartialEq, Encode, Decode)]64pub struct NFTExtSetVariableMetaData {65 pub collection_id: u32,66 pub item_id: u32,67 pub data: Vec<u8>, 68}626963/// The chain Extension of NFT pallet70/// The chain Extension of NFT pallet64pub struct NFTExtension;71pub struct NFTExtension;153 )?;160 )?;154 Ok(RetVal::Converging(func_id))161 Ok(RetVal::Converging(func_id))155 },162 },163 5 => {164 // Set variable metadata165 let mut env = env.buf_in_buf_out();166 let input: NFTExtSetVariableMetaData = env.read_as()?;167168 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;169170 pallet_nft::Module::<C>::set_variable_meta_data_internal(171 env.ext().address().clone(),172 &collection,173 input.item_id,174 input.data,175 )?;176 Ok(RetVal::Converging(func_id))177 },156 _ => {178 _ => {157 panic!("Passed unknown func_id to test chain extension: {}", func_id);179 panic!("Passed unknown func_id to test chain extension: {}", func_id);158 }180 }