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接收和其他类型的调用。在实际编写和部署智能合约时,理解这些函数的行为非常重要,以确保合约按预期方式响应不同类型的调用和交易。

相关推荐
孟健9 小时前
出海开发者资金合规:从港卡结汇到完税申报实操
后端·架构
乌暮9 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
架构技术专栏10 小时前
Skill 有效性与稳定性评估:用对照、重复与证据判断价值
后端
拔剑纵狂歌10 小时前
ClickHouse system.query_log 字段详解与排障实践
后端·clickhouse·1024程序员节
再吃一根胡萝卜10 小时前
把本地 RAG 问答做"准":多轮指代消解 + 云端语义向量 + TXT 章节切分
后端
怕浪猫11 小时前
2026年9月面18个后端
后端·面试·github
IT_陈寒11 小时前
Vue 这个响应式陷阱,我的头发都掉没了
前端·人工智能·后端
谁在黄金彼岸11 小时前
trae的gitee mcp莫名错误
后端
前端的日常11 小时前
一个人+AI做情侣食谱小程序,30天纯赚
前端·javascript·后端
再吃一根胡萝卜11 小时前
给 RAG 问答加上「多轮指代消解」:让"他 / 这个"不再翻车
后端