如何在 solidity 中将参数作为字节传递

How to pas params as bytes on solidity

我在合约上有两个功能:

函数 1 接收 bytes params 变量

function foo1(bytes memory params)

函数 2 接收两个参数:address param1, uint256 param2

function foo2(address param1, uint256 param2)

我的目标以某种方式将参数作为字节传递给 foo1,在函数上对其进行解码,并将解码后的参数传递给 foo2

喜欢:

function foo2(address param1, uint256 param2) {
   // do something
}

function decode(bytes params) private returns(???){
  // decode
}

function foo1(bytes params) public {
  var decodedParams = fromBytes(params)
  foo2(decodedParams.param1, decodedParams.param2)
}

从前端我期望是这样的:

  const params = toBytes({param1: '0xAddRess', param2: 1})

  myContract.foo1(params)

您可以在前端使用 abi.encodeParameters()

const bytesHex = web3.eth.abi.encodeParameters(
    ['address', 'uint256'],
    ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', '1']
);

abi.decode()在合同中

pragma solidity ^0.8;

contract MyContract {
    function foo2(address param1, uint256 param2) external {
        // do something
    }
    
    function foo1(bytes memory params) external {
        (address decodedAddress, uint256 decodedUint) = abi.decode(params, (address, uint256));
        this.foo2(decodedAddress, decodedUint);
    }
}