Fallback函数

Fallback函数的使用

特点:
1.无名字,无参数,无返回值
2.如果请求的方法在合约中不存在,则会调用fallback函数
3.对合约转账的时候,会自动执行fallback函数(可能会产生Reentrancy漏洞)
4.在高版本中已经将定义形式改为
fallback() external {}
5.不带Fallback的合约向带Fallback的合约发送ether,会触发Fallback(触发的是带fallback的一方)

发送会成功,触发事件

pragma solidity ^0.4.0;

contract fallbackTest{
    uint public a;
    
    function(){
        a=1;
    }
    
    function Call(){
        //this.call(0xabc52577);
        this.call(bytes32(keccak256("tzy577()")));
    }

}

contract target{
    uint public temp=0;
    function() payable{
        temp=1;
    }
}

contract tansfer2Contract{
    function transfer2Contract(address ad) payable public{
        ad.call(msg.value);
    }
}

a的初始值为0:
Fallback函数_第1张图片
调用Call函数后,会自动调用fallback使a的值变为1
Fallback函数_第2张图片

在合约target中,temp的初始值为0:
Fallback函数_第3张图片

随后对target合约调用call方法传递以太,fallback自动运行,使得temp变为1
Fallback函数_第4张图片

参考:1.https://www.jianshu.com/p/932803ea26bb
2.https://solidity.readthedocs.io/en/v0.5.3/contracts.html

你可能感兴趣的:(solidity,区块链)