difftreelog
feat set_variable_meta_data chain extension
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -1334,23 +1334,9 @@
) -> DispatchResult {
let sender = ensure_signed(origin)?;
- let target_collection = Self::get_collection(collection_id)?;
- Self::token_exists(&target_collection, item_id)?;
-
- ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);
-
- // Modify permissions check
- ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) ||
- Self::is_owner_or_admin_permissions(&target_collection, sender.clone()),
- Error::<T>::NoPermission);
+ let collection = Self::get_collection(collection_id)?;
- match target_collection.mode
- {
- CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?,
- CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?,
- CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),
- _ => fail!(Error::<T>::UnexpectedCollectionType)
- };
+ Self::set_variable_meta_data_internal(sender, &collection, item_id, data)?;
Ok(())
}
@@ -1821,6 +1807,32 @@
Ok(())
}
+ pub fn set_variable_meta_data_internal(
+ sender: T::AccountId,
+ collection: &CollectionHandle<T>,
+ item_id: TokenId,
+ data: Vec<u8>,
+ ) -> DispatchResult {
+ Self::token_exists(&collection, item_id)?;
+
+ ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);
+
+ // Modify permissions check
+ ensure!(Self::is_item_owner(sender.clone(), &collection, item_id) ||
+ Self::is_owner_or_admin_permissions(&collection, sender.clone()),
+ Error::<T>::NoPermission);
+
+ match collection.mode
+ {
+ CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?,
+ CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?,
+ CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),
+ _ => fail!(Error::<T>::UnexpectedCollectionType)
+ };
+
+ Ok(())
+ }
+
pub fn create_multiple_items_internal(
sender: T::AccountId,
collection: &CollectionHandle<T>,
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 }