fallback() or receive()?
当你调用的函数在合约中不存在,或者直接向合约中发送以太坊主币的时候,都会调用回退函数;
fallback()是一个后备函数,receive 只负责接受主币;
当以太坊主币发送到合约时,首先要判断 msg.data 是否为空
如果不为空就会调用 fallback(),
如果为空,再判断 receive 函数是否存在,如果存在,调用 receive 函数,如果不存在,调用 fallback 函数
源码:
pragma solidity ^0.8.7;
contract Fallback{
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 {
//receive 不接受数据,把msg.data 写成空字符串
emit Log("receive", msg.sender, msg.value,"");
}
}