跳转至

38回退函数

fallback和receive

fallback

fallback函数在以下情况会被执行

  • function 不存在
  • 直接发送ETH

  • function 不存在

fallback ()external {}
  • 直接发送ETH
    fallback ()external payable  {}

receive

receive:只负责接收主币,所以必须加上payable;不接受其他数据,

image-20231127152928299

  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调用

image-20231129163229188

image-20231129163423738

image-20231129163450998

删除数据测试

image-20231129163536486