我试图用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
,但我不能这样做-目标函数不在我的项目中,这是一些外部函数。
uint
是uint256
的别名。
函数选择器是从完整类型名(uint256
)生成的,而不是它们的别名(uint
)。
bytes4(keccak256(bytes("someFunction(uint256,uint256,address[],address,uint256)")))