38回退函数
fallback和receive¶
fallback¶
fallback函数在以下情况会被执行
- function 不存在
-
直接发送ETH
-
function 不存在
fallback ()external {}
- 直接发送ETH
fallback ()external payable {}
receive¶
receive:只负责接收主币,所以必须加上payable;不接受其他数据,
receive() external payable {}
总结:
如果有数据,调用fallback
如果没数据,调用receive,如果receive不存在,调用fallback函数
contract Fallback1{
event Log(string func, address sender,uint value,bytes data);
fallback ()external payable {
emit Log("fallback", msg.sender, msg.value, msg.data);
}
receive() external payable {
emit Log("receive", msg.sender, msg.value, "");
}
}
采用calldata调用
删除数据测试