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

相关推荐
站大爷IP3 分钟前
Python的字典遍历把我坑惨了,原来items和keys的区别这么大
后端
威哥爱编程6 分钟前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
汉堡大王95277 分钟前
GPT-6 上线 48 小时,我扒开了 Intelligent UI 的运行机制:DIL、沙箱 Worker 和一个 React 式协调器
前端·javascript·后端
用户EasyAdminBlazor7 分钟前
EasyAdminBlazor 实战:从 Entity 到完整 Admin Blazor 后台详解
后端
Bazingga8 分钟前
AgentScope 到底是用来做什么的?一篇笔记说清楚
后端
威哥爱编程8 分钟前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端
威哥爱编程9 分钟前
【AI全栈12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·spring boot·后端
Bazingga11 分钟前
Spring AI 还是 LangChain4j?我用同一套业务代码跑了一遍,答案出乎意料
后端
焦玉全12 分钟前
动态代理学习笔记:JDK 与 CGLIB 的完整代码流程
后端
汝吾此便安好19 分钟前
Axum 中间件执行顺序
后端