"argument[] calldata" solidity 类型编码

"argument[] calldata" type encoding in solidity

我正在尝试使用 abi.encodeWithSelector 为以下 solidity 函数编码调用数据:

function someFunction(
    uint a,
    uint b,
    address[] calldata c,
    address d,
    uint e
)

我的代码示例:

bytes out = abi.encodeWithSelector(
      bytes4(keccak256(bytes("someFunction(uint,uint,address[],address,uint)"))),
      a,
      b,
      ["0xAddr1Here", "0xAddr2Here"],
      "0xAddr3Here",
      e
    )

当我尝试用 addr.call(out) 调用它时,它不起作用(我在 someFunction 的第一行有调试 console.log() 并且我的中没有调试消息终端)。 我确定问题出在 address[] calldata 参数中。如何正确编码? 我知道,可以将 calldata 更改为 memory 并且我知道如何编码 address[] memory,但我做不到 - 目标函数不在我的项目中,它是一些外部的功能。

uintuint256.

的别名

函数选择器是从完整的类型名称 (uint256) 生成的 - 而不是它们的别名 (uint)。

bytes4(keccak256(bytes("someFunction(uint256,uint256,address[],address,uint256)")))