difftreelog
feat(CE) charge for calling pallet methods
in: master
1 file changed
runtime/src/chain_extension.rsdiffbeforeafterboth77/// The chain Extension of NFT pallet77/// The chain Extension of NFT pallet78pub struct NFTExtension;78pub struct NFTExtension;7980pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;798180impl<C: Config> ChainExtension<C> for NFTExtension {82impl<C: Config> ChainExtension<C> for NFTExtension {81 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>83 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>82 where84 where83 E: Ext<T = C>,85 E: Ext<T = C>,86 C: pallet_nft::Config,84 <E::T as SysConfig>::AccountId: UncheckedFrom<<E::T as SysConfig>::Hash> + AsRef<[u8]>,87 <E::T as SysConfig>::AccountId: UncheckedFrom<<E::T as SysConfig>::Hash> + AsRef<[u8]>,85 {88 {86 // The memory of the vm stores buf in scale-codec89 // The memory of the vm stores buf in scale-codec87 match func_id {90 match func_id {88 0 => {91 0 => {89 let mut env = env.buf_in_buf_out();92 let mut env = env.buf_in_buf_out();90 let input: NFTExtTransfer<E> = env.read_as()?;93 let input: NFTExtTransfer<E> = env.read_as()?;94 env.charge_weight(NftWeightInfoOf::<C>::transfer())?;919592 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;96 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;9397106 // Create Item110 // Create Item107 let mut env = env.buf_in_buf_out();111 let mut env = env.buf_in_buf_out();108 let input: NFTExtCreateItem<E> = env.read_as()?;112 let input: NFTExtCreateItem<E> = env.read_as()?;113 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.len()))?;109114110 match pallet_nft::Module::<C>::create_item_internal(115 match pallet_nft::Module::<C>::create_item_internal(111 env.ext().address().clone(),116 env.ext().address().clone(),121 // Create multiple items126 // Create multiple items122 let mut env = env.buf_in_buf_out();127 let mut env = env.buf_in_buf_out();123 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;128 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;129 env.charge_weight(NftWeightInfoOf::<C>::create_item(130 input.data.iter()131 .map(|i| i.len())132 .sum()133 ))?;124134125 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;135 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;126136138 // Approve148 // Approve139 let mut env = env.buf_in_buf_out();149 let mut env = env.buf_in_buf_out();140 let input: NFTExtApprove<E> = env.read_as()?;150 let input: NFTExtApprove<E> = env.read_as()?;151 env.charge_weight(NftWeightInfoOf::<C>::approve())?;141152142 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;153 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;143154154 // Transfer from165 // Transfer from155 let mut env = env.buf_in_buf_out();166 let mut env = env.buf_in_buf_out();156 let input: NFTExtTransferFrom<E> = env.read_as()?;167 let input: NFTExtTransferFrom<E> = env.read_as()?;168 env.charge_weight(NftWeightInfoOf::<C>::transfer_from())?;157169158 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;170 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;159171171 // Set variable metadata183 // Set variable metadata172 let mut env = env.buf_in_buf_out();184 let mut env = env.buf_in_buf_out();173 let input: NFTExtSetVariableMetaData = env.read_as()?;185 let input: NFTExtSetVariableMetaData = env.read_as()?;186 env.charge_weight(NftWeightInfoOf::<C>::set_variable_meta_data())?;174187175 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;188 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;176189186 // Toggle whitelist199 // Toggle whitelist187 let mut env = env.buf_in_buf_out();200 let mut env = env.buf_in_buf_out();188 let input: NFTExtToggleWhiteList<E> = env.read_as()?;201 let input: NFTExtToggleWhiteList<E> = env.read_as()?;202 env.charge_weight(NftWeightInfoOf::<C>::add_to_white_list())?;189203190 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;204 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;191205