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