首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidity tx.destination.call.value(tx.value)(tx.data)

Solidity tx.destination.call.value(tx.value)(tx.data)
EN

Stack Overflow用户
提问于 2018-06-08 21:43:05
回答 1查看 2.9K关注 0票数 3

我偶然发现了这个可靠的代码:

代码语言:javascript
复制
tx.destination.call.value(tx.value)(tx.data)

但不了解它是如何工作的..。尤其是结尾的tx.data

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 07:28:43

此语句在tx.destination处的地址上调用由tx.data表示的函数,并传入wei (tx.value)。

要进一步细分,请执行以下操作:

tx.destination是一个addressaddress具有内置的成员和函数,包括call,它允许您在没有ABI的情况下在合同上执行函数(请参阅Address type definition)。例如,您可以在没有定义接口的情况下对约定调用方法foobar,如下所示:

代码语言:javascript
复制
contractAddress.call(bytes4(keccak256("foobar(uint256,uint256)")), val1, val2); // where val1 and val2 are the uint256 parameters to pass in

在调用另一个合约的方法时,单独使用call将使用一些默认值。例如,所有剩余的气体都将被转发。如果你想改变这些值,你可以通过提供你自己的gas和/或wei值来调整它,这看起来像是一个函数调用本身:

代码语言:javascript
复制
contractAddress.call.value(9999999)();

这将把9999999个wei发送到contractAddress。您可以通过链接多个函数调用来覆盖发送的气体和以太:

代码语言:javascript
复制
contractAddress.call.value(99999999).gas(77777)();

这两个示例中的最后一组括号指示在发送wei时使用回退函数。您可以在Solidity docs FAQ中看到类似的示例。

如果你想调用回退函数以外的其他函数,你可以组合上面的两个例子,这就是你发布的代码所做的事情。他们使用tx的事实有点令人困惑,因为这通常是一个内置的引用,但他们很可能掩盖了这一点,它引用了一个具有destinationvaluedata成员的结构。

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

https://stackoverflow.com/questions/50762019

复制
相关文章

相似问题

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