Rus*_*sso 2 ethereum solidity smartcontracts
我遇到了这个 Solidity 代码:
tx.destination.call.value(tx.value)(tx.data)
Run Code Online (Sandbox Code Playgroud)
但不明白它是如何工作的......尤其是tx.data最后。
这条语句tx.data在tx.destination传入wei( tx.value)的地址调用一个由on表示的函数。
进一步分解:
tx.destination是一个address。Anaddress具有内置成员和函数,包括call允许您在没有 ABI 的合约上执行函数(请参阅地址类型定义)。例如,您可以foobar在没有定义接口的情况下调用合约上的方法,如下所示:
contractAddress.call(bytes4(keccak256("foobar(uint256,uint256)")), val1, val2); // where val1 and val2 are the uint256 parameters to pass in
Run Code Online (Sandbox Code Playgroud)
call单独使用会在调用其他合约的方法时使用一些默认值。例如,所有剩余的气体都将被转发。如果你想改变这些值,你可以通过提供你自己的 gas 和/或 wei 值来调整它,这看起来像一个函数调用本身:
contractAddress.call.value(9999999)();
Run Code Online (Sandbox Code Playgroud)
这会将 9999999 wei 发送到contractAddress. 您可以通过链接多个函数调用来覆盖发送的 gas 和 ether:
contractAddress.call.value(99999999).gas(77777)();
Run Code Online (Sandbox Code Playgroud)
两个示例中的最后一组括号指示在发送 wei 时使用回退功能。您可以在Solidity 文档常见问题解答中看到类似的示例。
如果你想调用回退函数以外的东西,你可以结合上面的 2 个例子,这就是你发布的代码所做的。他们使用的事实tx是有点,因为这混乱的通常是一个内置的参考,但他们很可能是阴影,它的引用与结构destination,value以及data成员。
| 归档时间: |
|
| 查看次数: |
2575 次 |
| 最近记录: |