当前位置: 首页 > news >正文

合约收款方式,转账与问题安全

合约收款方式

payable修饰符
function funcName() public payable() {}

 receive() 函数

 用途

当合约收到纯 ETH 转账(例如 address(this).transfer() 或 address(this).send())且没有调用数据(data为空)时,会调用 receive() 函数。

语法
receive() external payable {     // 收款逻辑 }
  • external:只能被外部调用。

  • payable:允许接收 ETH。

  • 不能有参数,也不能返回值。

  • 每个合约只能有一个 receive() 函数

使用场景
contract MyContract {event Received(address sender, uint amount);receive() external payable {emit Received(msg.sender, msg.value);}
}

 fallback() 函数

用途
  • 当调用合约函数时,找不到对应函数签名

  • 或者调用时带有数据,但合约中没有 receive() 函数可调用

会触发 fallback() 函数。

语法(两种)
1. 允许收款:
fallback() external payable {     // fallback 收款逻辑 }
2. 不收款,仅响应错误调用:
fallback() external {     // fallback 非 payable,不能接收 ETH }
使用场景

contract MyContract {event FallbackCalled(address sender, uint amount, bytes data);fallback() external payable {emit FallbackCalled(msg.sender, msg.value, msg.data);}
}

 receive vs fallback 对比总结

特性 receive() fallback()
http://www.lryc.cn/news/612600.html

相关文章:

  • 「耘•学社」耘少年第五期学能突破导师制领袖特训营,圆满落幕
  • 计算机视觉前言-----OpenCV库介绍与计算机视觉入门准备
  • 解决Git提交人信息默认全局化问题:让提交人自动关联当前用户
  • Element Plus实现分页查询
  • 【PHP 中的 `use` 关键字完全指南】
  • 数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)
  • Redis为什么要引入多线程?
  • Beelzebub靶机
  • 防火墙环境下的全网服务器数据自动化备份平台搭建:基于 rsync 的完整实施指南
  • Java基础学习1(Java语言概述)
  • spring cache(二)核心接口
  • 浏览器渲染与GPU进程通信图解
  • ubuntu 2024 安装拼音输入法
  • 纪念《信号与系统》拉普拉斯变换、Z变换之前内容学完
  • 迭代器与生成器:Python 中的高效数据遍历机制
  • 现代制冷系统核心技术解析:从四大件到智能控制的关键突破
  • QDataStream入门
  • LeetCode每日一题,2025-8-7
  • JSON、JSONObject、JSONArray详细介绍及其应用方式
  • Self-RAG:基于自我反思的检索增强生成框架技术解析
  • 【感知机】感知机(perceptron)学习策略
  • 阿里云polardb-x 2.0迁移至华为云taurusdb
  • 【感知机】感知机(perceptron)模型与几何解释
  • MySQL数据库索引及底层数据结构
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树
  • 软件架构:系统结构的顶层设计与战略约束
  • Maven入门到精通
  • Cervantes:面向渗透测试人员和红队的开源协作平台
  • 进阶向:AI聊天机器人(NLP+DeepSeek API)
  • 《动手学深度学习》读书笔记—9.6编码器-解码器架构