首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在实体中使用address.call{}()

如何在实体中使用address.call{}()
EN

Ethereum用户
提问于 2021-04-04 11:19:35
回答 2查看 17.1K关注 0票数 24

我已经看到了这里和其他几个地方,正确的方法是调用.call{}()方法来将以太从合同发送到地址。

然后是这里,我看到这个方法与参数一起使用,如下所示:

代码语言:javascript
复制
addr.call{value: msg.value, gas: 5000}(
    abi.encodeWithSignature("foo(string,uint256)", "call foo", 123)
);

我理解花括号里的论点。value:是您想发送的eth,而gas:是您愿意支付的交易要开采的天然气量(如果我错了,请纠正我)。

我不明白的是括号内的论点。

  1. 合同中的abi对象是什么?它是做什么的?它和你在编写合同时得到的一样吗?
  2. abi.encodeWithSignature()方法是做什么的?
  3. 括号里有多少个论点,它们是什么意思?你必须为它提供论据,还是你可以让它空着呢?
EN

回答 2

Ethereum用户

回答已采纳

发布于 2021-04-11 11:57:25

经过一番研究,我终于得到了问题的答案。

1.合同中的abi对象是什么,它是做什么的?它与您在编译合同时得到的相同吗?

根据坚实的文档的说法:

二进制接口(ABI)是Ethereum生态系统中与合同交互的标准方法,无论是从区块链之外还是从合同到合同的交互。数据按照其类型进行编码,如本规范所述。编码不是自描述的,因此需要一个模式来解码。

因此,包含abi方法的encodeWithSignature()对象是与Ethereum生态系统中的契约交互的标准方法。

2. abi.encodeWithSignature()方法做什么?

此方法以空刺或功能签名作为其第一个参数。函数签名通常是被调用的契约中的函数,但如果不是,则会出现稳健的处理方式。当它是被调用的契约中的函数时,该函数在调用abi.encodeWithSignature()方法时被调用。因此,在问题中的代码示例中,被调用的契约有一个函数:function foo(string var1, uint256 var2){},它在调用方契约中每次调用abi.encodeWithSignature("foo(string,uint256)", "call foo", 123)方法时都会调用。abi.encodeWithSignature()中的其他两个参数是在调用foo()函数时传递给它的参数。

3.括号可以包含多少个参数,它们是什么意思?您是否必须为其提供参数,还是可以将其保留为空?

call方法中的括号,即:

代码语言:javascript
复制
addr.call{value: msg.value, gas: 5000}(/** I am talking about this bracket*/);

需要一个字节参数。因此,如果您不想传递abi.encodeWithSignature()方法,您应该传递一个空字符串,否则编译器会抛出一个错误。

票数 19
EN

Ethereum用户

发布于 2021-04-05 06:01:14

  • address.call(bytes memory msg)接受一个输入参数:发送给契约的消息(通常是函数调用)。
  • abi.encodeWithSignature(functionSignature, param1, param2, ...)接受任意数量的参数,但需要第一个参数。它创建一个函数调用消息,对函数和参数进行编码。

代码可以编写如下:

代码语言:javascript
复制
interface IFoo {
    function foo(string, uint256) external payable;
}

IFoo(addr).foo{value: msg.value, gas: 5000}("call foo", 123)

有关更多详细信息,请参阅文档https://docs.soliditylang.org/en/v0.8.3/types.html#address

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

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

复制
相关文章

相似问题

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