receive fallback tips

当你调用一个智能合约中不存在的函数时,且同时存在receive()和fallback()函数时,其行为取决于调用的上下文,特别是是否发送了以太币(ETH)以及调用是否包含数据。

  • 如果调用发送了ETH 且没有数据 ,那么将调用receive()函数。
  • 如果调用发送了ETH但包含数据 ,或者如果没有发送ETH,无论是否包含数据,都将调用fallback()函数。

例子

scss 复制代码
solidityCopy code
pragma solidity ^0.8.0;

contract Example {
    // 这个函数在收到纯ETH(无数据)时被调用
    receive() external payable { 
        // 处理接收ETH的逻辑
    }

    // 这个函数在调用了不存在的函数时被调用
    fallback() external payable { 
        // 处理其他逻辑
    }
}

在这个例子中:

  1. 如果你向Example合约发送ETH而不附带任何数据(例如,使用常规的以太坊转账),将调用receive()函数。
  2. 如果你尝试调用合约中不存在的函数(附带数据的调用)或发送ETH同时附带数据,则将调用fallback()函数。

总结

receive()和fallback()的引入提供了对合约ETH接收的更好控制。receive()是在EIP-2309中引入的,目的是区分纯ETH接收和其他类型的调用。在实际编写和部署智能合约时,理解这些函数的行为非常重要,以确保合约按预期方式响应不同类型的调用和交易。

相关推荐
小蒜学长8 分钟前
基于Springboot+Vue的高校教师教学业绩综合管理系统的设计与开发(代码+数据库+LW)
java·数据库·spring boot·后端·教学业绩管理·三级权限
熊哈哈O_o10 分钟前
千亿级时序数据:存储压缩、高速写入与时序超表技术
后端
Mikko710 分钟前
Spring Boot 3.5.16 自带的 Tomcat 10.1.55 中了哪些 CVE?其中一条是修上一个漏洞时带进来的
java·spring boot·后端·安全·tomcat
站大爷IP17 分钟前
Python的字符串查找把我坑惨了,原来find和index的区别这么大
后端
sp4218 分钟前
一个支持 Java 8 的 MCP SDK(支持最新 2026-07-28 协议)
后端·mcp
Gopher_HBo20 分钟前
HTTP2传输层与流控
后端
Bazingga21 分钟前
同一个脑子,不同的身体:桌面办公智能体全景拆解
后端
用户3028225306824 分钟前
你的 API 只返回 30 条,为什么数据库还是被打满了?
数据库·后端·架构
Hespethorn26 分钟前
MQTT 的四个工程暗礁:遗嘱、保留消息、ACL 与主题设计
后端·物联网
打工仔折腾 AI27 分钟前
Spring AI + Qwen 周报生成实战:从原始日志到人工确认卡
人工智能·后端·python·spring·elasticsearch·ai agent 实战