首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固态中的"argument[] calldata“类型编码

固态中的"argument[] calldata“类型编码
EN

Stack Overflow用户
提问于 2021-09-15 03:13:05
回答 1查看 257关注 0票数 0

我尝试用abi.encodeWithSelector为下面的实心函数编码calldata

代码语言:javascript
复制
function someFunction(
    uint a,
    uint b,
    address[] calldata c,
    address d,
    uint e
)

我的代码示例:

代码语言:javascript
复制
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进行编码,但我不能这样做-目标函数不在我的项目中,它是一些外部函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 07:25:39

uintuint256的别名。

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

代码语言:javascript
复制
bytes4(keccak256(bytes("someFunction(uint256,uint256,address[],address,uint256)")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69186685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档