首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在address.call上使用内联程序集调用有什么好处吗?

在address.call上使用内联程序集调用有什么好处吗?
EN

Ethereum用户
提问于 2020-03-03 05:05:56
回答 1查看 704关注 0票数 2

call上使用内联程序集address.call有什么好处吗?

例如

代码语言:javascript
复制
// address addr
// uint value
// bytes memory data

// using inline assembly
assembly {
    call(gas, addr, value, add(data, 0x20), mload(data), mload(0x40), 0)
}

// using address.call
addr.call.value(value)(data)

我正在查看Gnosis多功能钱包的代码,并想知道为什么他们使用程序集call而不是address.call

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-03-03 11:16:10

在查看每一种情况下传递的输入参数集时,这是非常明显的。

对于非程序集调用,传递:

  • 目标地址(addr)
  • 醚量(value)
  • 可执行代码(data)

用于程序集调用,您可以传递:

  • 气体单位数
  • 目的地地址
  • 醚量
  • 可执行代码(数据缓冲区+数据长度)
  • 输出地址(数据缓冲区+数据长度)

因此,通过程序集调用,您还可以:

  1. 配置气体
  2. 获得输出

编辑(Sea212):在这个上下文中,solc == 0.4.x:通过添加.gas(gas),您还可以指定非组装调用中气体单元的数量。因此,使用程序集调用的主要优点是可以获得输出。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/80280

复制
相关文章

相似问题

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