美文网首页区块链技术文章
回调函数 及 payable——Solidity Fallbac

回调函数 及 payable——Solidity Fallbac

作者: charlieyan | 来源:发表于2018-04-23 21:00 被阅读526次

    In Solidity, a contract may have precisely one unnamed function, which cannot have arguments, nor return anything.

    一个合约可以有且只能有一个没名字的方法 同时也不能有参数 也不能有返回的值

    Fallback functions are executed if a contract is called and no other function matches the specified function identifier, or if no data is supplied.

    当合约被调用但没有别的方法能匹配上或没有数据提供时,回调方法被执行

    These functions are also executed whenever a contract would receive plain Ether, without any data.

    当一个合约收到不带任何data的plain Ether(不知道咋翻译,空白以太?) 时 这些方法也会被执行

    合约地址在执行send时 默认会执行回调方法(如果存在回调方法的话)——鲁迅

    Additionally, in order to receive Ether, the fallback function must be marked payable. If no such function exists, the contract cannot receive Ether through regular transactions.

    如果要接受以太币的话必须要标记为payable (好像这样没讲清楚啊喂)

    干货来了
    那么payable到底是干嘛的呢?不能只说他是个保留的关键字 并且可以用来修饰function啊。你不能只说payable只可以这样用啊,那我是一点都没懂(Solidity官网就这个尿性):

    function deposit() payable {};
    function register(address sender) payable {};
    function () payable {}

    payable关键字允许function被调用的时候接受以太币。what。。。还是没讲大白话

    如果有人试图通过

    token.foo.call.value("ETH_TO_BE_SENT")("ADDITIONAL_DATA")

    来发送以太币(其中的ETH_TO_BE_SENT就是要发送的以太币啦),但同时被调用的这个function又没有payable修饰 那么这个transcation就会被rejected

    通常都会有一个有payable标识的“无名”方法来accept被发送到合约的以太币 这就是fallback function

    function () payable {};


    下图常见问题之一说的比较清楚

    image.png
    可能看这个常见问题讲的通俗一点。如果在调用合约的function call的时候发送一些以太币,那么这些以太币就会被added 到合约的总balance上,就像刚刚开始创建合约的时候会发送一些以太币也会作为合约的balance一样

    但这样发送给合约balance的要求就是这个被调用的function必须要有payable标识,不然就会抛exception啦

    相关文章

      网友评论

        本文标题:回调函数 及 payable——Solidity Fallbac

        本文链接:https://www.haomeiwen.com/subject/wehrlftx.html