"argument[] calldata"类型编码的固体性



我试图用abi.encodeWithSelector编码以下坚固性函数的calldata:

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)")))

最新更新