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

相关推荐
掘金酱1 分钟前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端
leeyi7 分钟前
缓存同步之后,还要考虑没收到消息的节点
后端·性能优化·erlang
IT_陈寒24 分钟前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
shengjk137 分钟前
既然 gRPC 底层也是 HTTP,为什么大厂还非要死磕 RPC?真相全在这!
后端
回家路上绕了弯38 分钟前
人和 Agent 怎么一起干活:把任务交出去,把判断留在关键处
后端
波力海苔夹心脆6751 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
ServBay2 小时前
DeepSeek 又出王炸,用 DeepInfer 搭建自己的服务是不是很容易?
后端·ai编程·deepseek
.Bryce.2 小时前
MCP+A2A+ANP,Agent通信协议的完整知识地图
java·人工智能·后端·agent·通信协议
JuiceFS2 小时前
面向 EB 级 AI 存储:JuiceFS 企业版架构演进
人工智能·后端
迷途小羔羊3 小时前
项目概述
java·javascript·后端