git.delta.rocks / unique-network / refs/commits / 2260ad67fa71

difftreelog

fix(CE) correct error handling

Yaroslav Bolyukin2021-05-13parent: #c68888f.patch.diff
in: master
Successful Converging value only used as return value,
and most repos just return 0

Chain extension should not panic on not implemented func_id

1 file changed

modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
9595
96 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;96 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
9797
98 match pallet_nft::Module::<C>::transfer_internal(98 pallet_nft::Module::<C>::transfer_internal(
99 env.ext().caller().clone(),99 env.ext().caller().clone(),
100 input.recipient,100 input.recipient,
101 &collection,101 &collection,
102 input.token_id,102 input.token_id,
103 input.amount,103 input.amount,
104 ) {104 )?;
105
105 Ok(_) => Ok(RetVal::Converging(func_id)),106 Ok(RetVal::Converging(0))
106 _ => Err(DispatchError::Other("Transfer error"))
107 }
108 },107 },
109 1 => {108 1 => {
110 // Create Item109 // Create Item
111 let mut env = env.buf_in_buf_out();110 let mut env = env.buf_in_buf_out();
112 let input: NFTExtCreateItem<E> = env.read_as()?;111 let input: NFTExtCreateItem<E> = env.read_as()?;
113 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.len()))?;112 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.len()))?;
114113
115 match pallet_nft::Module::<C>::create_item_internal(114 pallet_nft::Module::<C>::create_item_internal(
116 env.ext().address().clone(),115 env.ext().address().clone(),
117 input.collection_id,116 input.collection_id,
118 input.owner,117 input.owner,
119 input.data,118 input.data,
120 ) {119 )?;
120
121 Ok(_) => Ok(RetVal::Converging(func_id)),121 Ok(RetVal::Converging(0))
122 _ => Err(DispatchError::Other("CreateItem error"))
123 }
124 },122 },
125 2 => {123 2 => {
126 // Create multiple items124 // Create multiple items
134132
135 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;133 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
136134
137 match pallet_nft::Module::<C>::create_multiple_items_internal(135 pallet_nft::Module::<C>::create_multiple_items_internal(
138 env.ext().address().clone(),136 env.ext().address().clone(),
139 &collection,137 &collection,
140 input.owner,138 input.owner,
141 input.data,139 input.data,
142 ) {140 )?;
141
143 Ok(_) => Ok(RetVal::Converging(func_id)),142 Ok(RetVal::Converging(0))
144 _ => Err(DispatchError::Other("CreateMultipleItems error"))
145 }
146 },143 },
147 3 => {144 3 => {
148 // Approve145 // Approve
160 input.amount,157 input.amount,
161 )?;158 )?;
159
162 Ok(RetVal::Converging(func_id))160 Ok(RetVal::Converging(0))
163 },161 },
164 4 => {162 4 => {
165 // Transfer from163 // Transfer from
178 input.amount176 input.amount
179 )?;177 )?;
178
180 Ok(RetVal::Converging(func_id))179 Ok(RetVal::Converging(0))
181 },180 },
182 5 => {181 5 => {
183 // Set variable metadata182 // Set variable metadata
194 input.data,193 input.data,
195 )?;194 )?;
195
196 Ok(RetVal::Converging(func_id))196 Ok(RetVal::Converging(0))
197 },197 },
198 6 => {198 6 => {
199 // Toggle whitelist199 // Toggle whitelist
210 input.whitelisted,210 input.whitelisted,
211 )?;211 )?;
212
212 Ok(RetVal::Converging(func_id))213 Ok(RetVal::Converging(0))
213 }214 }
214 _ => {215 _ => {
215 panic!("Passed unknown func_id to test chain extension: {}", func_id);216 Err(DispatchError::Other("unknown chain_extension func_id"));
216 }217 }
217 }218 }
218 }219 }