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

Ethers.js: How do I encode an array of addresses into a Solidity bytes variable?

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

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

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

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

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