difftreelog
fix(CE) correct error handling
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
runtime/src/chain_extension.rsdiffbeforeafterboth959596 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;96 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;979798 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 Item111 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()))?;114113115 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 items134132135 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;133 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;136134137 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 // Approve160 input.amount,157 input.amount,161 )?;158 )?;159162 Ok(RetVal::Converging(func_id))160 Ok(RetVal::Converging(0))163 },161 },164 4 => {162 4 => {165 // Transfer from163 // Transfer from178 input.amount176 input.amount179 )?;177 )?;178180 Ok(RetVal::Converging(func_id))179 Ok(RetVal::Converging(0))181 },180 },182 5 => {181 5 => {183 // Set variable metadata182 // Set variable metadata194 input.data,193 input.data,195 )?;194 )?;195196 Ok(RetVal::Converging(func_id))196 Ok(RetVal::Converging(0))197 },197 },198 6 => {198 6 => {199 // Toggle whitelist199 // Toggle whitelist210 input.whitelisted,210 input.whitelisted,211 )?;211 )?;212212 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 }