在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