Ethers.js:如何将地址数组编码到 Solidity 字节变量中?

Jas*_*ran 1 encode solidity ethers.js

我正在使用 Ether.js 测试我的 Solidity 代码,并且被测试的方法需要一个bytes参数,我用它来传递地址数组:

function testFunction(bytes calldata params) external {
   address[] memory addresses = abi.decode(params, (address[]));
}
Run Code Online (Sandbox Code Playgroud)

如何在 Ethers.js 中对地址数组进行编码,以便可以将其作为参数传递?

Jas*_*ran 8

您可以使用AbiCoder.encode(types, value)。要对地址数组进行编码,您可以这样做:

const abi = ethers.utils.defaultAbiCoder;
const params = abi.encode(
    ["address[]"], // encode as address array
    [ [addresses.tokens.weth, addresses.tokens.wbtc] ]); // array to encode
Run Code Online (Sandbox Code Playgroud)