在Solidity中,回退函数(Fallback Function)是一种特殊的函数,它没有名称、不接受任何参数也不返回任何值。这个函数会在合约接收到以太币(Ether)但没有匹配到其他任何函数时被调用,或者当调用的函数签名与合约中的任何已定义函数都不匹配时被触发。它通常用于直接接收以太币的转账或作为一个通用的异常处理器。
在Solidity 0.6.x之后的版本,为了使合约代码更清晰和更安全,分成了两种类型的回退函数:
- 接收函数(Receive function) - 专门用来处理纯ETH发送(不带任何数据的ETH转账)。这个函数必须用
receive() external payable来声明。 - 回退函数(Fallback function) - 如果没有匹配到接收函数,或者调用了不存在的函数,或者发送了ETH但调用包含数据,那么回退函数会被触发。这个函数是用
fallback() external payable来声明的。
这两个函数的存在提供了灵活性和安全性,使智能合约能够根据发送的是纯ETH还是带数据的ETH调用来适当地响应。