我尝试用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进行编码,但我不能这样做-目标函数不在我的项目中,它是一些外部函数。
发布于 2021-09-15 07:25:39
uint是uint256的别名。
函数选择器是从完整的类型名称(uint256)生成的,而不是从其别名(uint)生成的。
bytes4(keccak256(bytes("someFunction(uint256,uint256,address[],address,uint256)")))https://stackoverflow.com/questions/69186685
复制相似问题