git.delta.rocks / unique-network / refs/commits / 849f7eea966c

difftreelog

feat(CE) charge for calling pallet methods

Yaroslav Bolyukin2021-05-13parent: #b3fda41.patch.diff
in: master

1 file changed

modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
77/// The chain Extension of NFT pallet77/// The chain Extension of NFT pallet
78pub struct NFTExtension;78pub struct NFTExtension;
79
80pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;
7981
80impl<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 where
83 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-codec
87 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())?;
9195
92 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;96 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
9397
106 // Create Item110 // Create Item
107 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()))?;
109114
110 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 items
122 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 ))?;
124134
125 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;135 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
126136
138 // Approve148 // Approve
139 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())?;
141152
142 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;153 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
143154
154 // Transfer from165 // Transfer from
155 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())?;
157169
158 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;170 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
159171
171 // Set variable metadata183 // Set variable metadata
172 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())?;
174187
175 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;188 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
176189
186 // Toggle whitelist199 // Toggle whitelist
187 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())?;
189203
190 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;204 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
191205