diff --git a/external/contract/src/erc20wasm/lib.rs b/external/contract/src/erc20wasm/lib.rs index f12736d..912f6cc 100644 --- a/external/contract/src/erc20wasm/lib.rs +++ b/external/contract/src/erc20wasm/lib.rs @@ -165,6 +165,10 @@ mod erc20 { evm_abi.push(("approve(address,uint256)returns(bool)".to_string(), "approve_abi".to_string(), None)); evm_abi.push(("transferFrom(address,address,uint256)returns(bool)".to_string(), "transfer_from_abi".to_string(), None)); + evm_abi.push(("wasmCallEvm(string,string,uint128)returns(string)".to_string(), "wasmCallEvm".to_string(), None)); + evm_abi.push(("wasmCallEvmBalance(string,string)returns(uint128)".to_string(), "wasmCallEvmBalance".to_string(), None)); + evm_abi.push(("wasmCallEvmProxy(string)returns(string)".to_string(), "wasmCallEvmProxy".to_string(), None)); + evm_abi } diff --git a/frame/hybrid-vm-port/src/port.rs b/frame/hybrid-vm-port/src/port.rs index 8235dcd..8d54d3e 100644 --- a/frame/hybrid-vm-port/src/port.rs +++ b/frame/hybrid-vm-port/src/port.rs @@ -108,8 +108,16 @@ impl Pallet { return Err(err); } - let input_type: Vec<&str> = abi_fun[index_s1 + 1..index_e1].split(',').collect(); - let output_type: Vec<&str> = abi_fun[index_s2 + 1..index_e2].split(',').collect(); + let input_type: Vec<&str> = if index_s1 + 1 < index_e1 { + abi_fun[index_s1 + 1..index_e1].split(',').collect() + } else { + vec![] + }; + let output_type: Vec<&str> = if index_s2 + 1 < index_e2 { + abi_fun[index_s2 + 1..index_e2].split(',').collect() + } else { + vec![] + }; // wasm type: AccountId,bool,Vec,H256,String,u8,u16,u32,u64,u128,U256,Vec let data_type = "address,bool,bytes,bytes32,string,uint8,uint16,uint32,uint64,uint128,uint256,address[],bool[],bytes32[],uint8[],uint16[],uint32[],uint64[],uint128[],uint256[]"; @@ -340,7 +348,7 @@ impl Pallet { }; let info = pallet_contracts::Pallet::::bare_call( - origin, + origin.clone(), t.into(), balance, weight_limit, @@ -354,8 +362,7 @@ impl Pallet { match info.result { Ok(return_value) => { if !return_value.did_revert() { - // because return_value.data = MessageResult, so, the - // first byte is zhe Ok() Code, be removed + frame_system::Pallet::::inc_account_nonce(&origin); let err_data = DispatchErrorWithPostInfo { post_info: PostDispatchInfo { actual_weight: Some(info.gas_consumed), diff --git a/frame/hybrid-vm/fixtures/erc20.wasm b/frame/hybrid-vm/fixtures/erc20.wasm index c2f7835..885d564 100644 Binary files a/frame/hybrid-vm/fixtures/erc20.wasm and b/frame/hybrid-vm/fixtures/erc20.wasm differ