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