difftreelog
Merge branch 'feature/NFTPAR-373_chain_extensions' into feature/NFTPAR-366_upstream_updates
in: master
1 file changed
runtime/src/chain_extension.rsdiffbeforeafterboth78/// The chain Extension of NFT pallet78/// The chain Extension of NFT pallet79pub struct NFTExtension;79pub struct NFTExtension;8081pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;808281impl<C: Config> ChainExtension<C> for NFTExtension {83impl<C: Config> ChainExtension<C> for NFTExtension {82 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>84 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>83 where85 where84 E: Ext<T = C>,86 E: Ext<T = C>,87 C: pallet_nft::Config,85 <E::T as SysConfig>::AccountId: UncheckedFrom<<E::T as SysConfig>::Hash> + AsRef<[u8]>,88 <E::T as SysConfig>::AccountId: UncheckedFrom<<E::T as SysConfig>::Hash> + AsRef<[u8]>,86 {89 {87 // The memory of the vm stores buf in scale-codec90 // The memory of the vm stores buf in scale-codec88 match func_id {91 match func_id {89 0 => {92 0 => {90 let mut env = env.buf_in_buf_out();93 let mut env = env.buf_in_buf_out();91 let input: NFTExtTransfer<E> = env.read_as()?;94 let input: NFTExtTransfer<E> = env.read_as()?;95 env.charge_weight(NftWeightInfoOf::<C>::transfer())?;929693 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;97 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;9498101 )?;105 )?;102106103 pallet_nft::Module::<C>::submit_logs(collection)?;107 pallet_nft::Module::<C>::submit_logs(collection)?;104 Ok(RetVal::Converging(func_id))108 Ok(RetVal::Converging(0))105 },109 },106 1 => {110 1 => {107 // Create Item111 // Create Item108 let mut env = env.buf_in_buf_out();112 let mut env = env.buf_in_buf_out();109 let input: NFTExtCreateItem<E> = env.read_as()?;113 let input: NFTExtCreateItem<E> = env.read_as()?;114 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.len()))?;110115111 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;116 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;112117118 )?;123 )?;119124120 pallet_nft::Module::<C>::submit_logs(collection)?;125 pallet_nft::Module::<C>::submit_logs(collection)?;121 Ok(RetVal::Converging(func_id))126 Ok(RetVal::Converging(0))122 },127 },123 2 => {128 2 => {124 // Create multiple items129 // Create multiple items125 let mut env = env.buf_in_buf_out();130 let mut env = env.buf_in_buf_out();126 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;131 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;132 env.charge_weight(NftWeightInfoOf::<C>::create_item(133 input.data.iter()134 .map(|i| i.len())135 .sum()136 ))?;127137128 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;138 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;129139135 )?;145 )?;136146137 pallet_nft::Module::<C>::submit_logs(collection)?;147 pallet_nft::Module::<C>::submit_logs(collection)?;138 Ok(RetVal::Converging(func_id))148 Ok(RetVal::Converging(0))139 },149 },140 3 => {150 3 => {141 // Approve151 // Approve142 let mut env = env.buf_in_buf_out();152 let mut env = env.buf_in_buf_out();143 let input: NFTExtApprove<E> = env.read_as()?;153 let input: NFTExtApprove<E> = env.read_as()?;154 env.charge_weight(NftWeightInfoOf::<C>::approve())?;144155145 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;156 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;146157153 )?;164 )?;154165155 pallet_nft::Module::<C>::submit_logs(collection)?;166 pallet_nft::Module::<C>::submit_logs(collection)?;156 Ok(RetVal::Converging(func_id))167 Ok(RetVal::Converging(0))157 },168 },158 4 => {169 4 => {159 // Transfer from170 // Transfer from160 let mut env = env.buf_in_buf_out();171 let mut env = env.buf_in_buf_out();161 let input: NFTExtTransferFrom<E> = env.read_as()?;172 let input: NFTExtTransferFrom<E> = env.read_as()?;173 env.charge_weight(NftWeightInfoOf::<C>::transfer_from())?;162174163 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;175 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;164176172 )?;184 )?;173185174 pallet_nft::Module::<C>::submit_logs(collection)?;186 pallet_nft::Module::<C>::submit_logs(collection)?;175 Ok(RetVal::Converging(func_id))187 Ok(RetVal::Converging(0))176 },188 },177 5 => {189 5 => {178 // Set variable metadata190 // Set variable metadata179 let mut env = env.buf_in_buf_out();191 let mut env = env.buf_in_buf_out();180 let input: NFTExtSetVariableMetaData = env.read_as()?;192 let input: NFTExtSetVariableMetaData = env.read_as()?;193 env.charge_weight(NftWeightInfoOf::<C>::set_variable_meta_data())?;181194182 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;195 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;183196189 )?;202 )?;190203191 pallet_nft::Module::<C>::submit_logs(collection)?;204 pallet_nft::Module::<C>::submit_logs(collection)?;192 Ok(RetVal::Converging(func_id))205 Ok(RetVal::Converging(0))193 },206 },194 6 => {207 6 => {195 // Toggle whitelist208 // Toggle whitelist196 let mut env = env.buf_in_buf_out();209 let mut env = env.buf_in_buf_out();197 let input: NFTExtToggleWhiteList<E> = env.read_as()?;210 let input: NFTExtToggleWhiteList<E> = env.read_as()?;211 env.charge_weight(NftWeightInfoOf::<C>::add_to_white_list())?;198212199 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;213 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;200214206 )?;220 )?;207 221 208 pallet_nft::Module::<C>::submit_logs(collection)?;222 pallet_nft::Module::<C>::submit_logs(collection)?;209 Ok(RetVal::Converging(func_id))223 Ok(RetVal::Converging(0))210 }224 }211 _ => {225 _ => {212 panic!("Passed unknown func_id to test chain extension: {}", func_id);226 Err(DispatchError::Other("unknown chain_extension func_id"));213 }227 }214 }228 }215 }229 }