区块链研习社以太坊区块链研究

Solidity Fallback函数详解

2019-06-27  本文已影响0人  六天天天向上

在solidity中有一个神奇函数,就是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

上一篇下一篇

猜你喜欢

热点阅读