Solidity Fallback函数详解

作者: 六天天天向上 | 来源:发表于2019-06-27 22:07 被阅读0次

    在solidity中有一个神奇函数,就是Fallback函数。
    有什么神奇的呢,先看看他的特征:

    • 三无函数。没有名字、没有参数、没有返回值。
    • 替补函数。如果请求的方法在合约中没有的话,就会执行Fallback函数。
    • 收币函数。通过钱包向一个合约转账时,会执行Fallback函数,这一点很有用。

    翠花,上代码

    pragma solidity ^0.4.0;
    
    contract TestContract {
        // 向合约地址发送金额为0的交易会调用
        // 向合约请求不存在的方法会调用
        // 如果要向合约转账,会出现错误,需要设置"payable"
        function() { a = 1; }
        uint public a;
    }
    
    // 直接向合约发送以太币会调用
    contract SinkContract {
        function() payable { }
    }
    
    contract CallerContract {
        function testCall(TestContract test) {
            test.call(0xabcdef01); // TestContract合约中不存在的方法
            // 调用后TestContract中的a==1
    
            // 会执行失败
            //test.transfer(2 ether);
        }
        
        function testSend(SinkContract test) public returns(uint256) {
            test.transfer(2 ether); //SinkContract合约会接收到2eth
            return test.balance;
        }
        
        function() payable { }
        
        function getBalance(address _add) public view returns(uint256) {
            return _add.balance;
        }
    }
    

    FallBack函数的实用场景
    场景一:空投
    利用FallBack函数,用户只需要使用钱包向空投合约发送0金额的转账(只消耗手续费),空投合约就可以向该地址进行空投。

    场景二:锁仓
    用户使用钱包将代币转账到锁仓合约中,锁仓合约利用FallBack函数接收到请求,就可以执行锁仓逻辑了。

    这两个场景都有一个共同点,就是用户只需要使用自己的以太坊钱包(如imtoken)就可以调用合约,完成一些业务场景。其他的场景暂时还没想到,等遇到了在补充。

    参考:https://solidity.readthedocs.io/en/v0.5.3/contracts.html#fallback-function

    相关文章

      网友评论

        本文标题:Solidity Fallback函数详解

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