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.rsdiffbeforeafterboth--- a/runtime/src/chain_extension.rs
+++ b/runtime/src/chain_extension.rs
@@ -60,6 +60,13 @@
pub amount: u128,
}
+#[derive(Debug, PartialEq, Encode, Decode)]
+pub struct NFTExtSetVariableMetaData {
+ pub collection_id: u32,
+ pub item_id: u32,
+ pub data: Vec<u8>,
+}
+
/// The chain Extension of NFT pallet
pub struct NFTExtension;
@@ -153,6 +160,21 @@
)?;
Ok(RetVal::Converging(func_id))
},
+ 5 => {
+ // Set variable metadata
+ let mut env = env.buf_in_buf_out();
+ let input: NFTExtSetVariableMetaData = env.read_as()?;
+
+ let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
+
+ pallet_nft::Module::<C>::set_variable_meta_data_internal(
+ env.ext().address().clone(),
+ &collection,
+ input.item_id,
+ input.data,
+ )?;
+ Ok(RetVal::Converging(func_id))
+ },
_ => {
panic!("Passed unknown func_id to test chain extension: {}", func_id);
}