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:
调用Call函数后,会自动调用fallback使a的值变为1
在合约target中,temp的初始值为0:
随后对target合约调用call方法传递以太,fallback自动运行,使得temp变为1
参考:1.https://www.jianshu.com/p/932803ea26bb
2.https://solidity.readthedocs.io/en/v0.5.3/contracts.html