如何用Solidity和Foundry高效测试智能合约中的Event?

2026-04-27 21:5776阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

为什么测试 Event 让我想哭

说实话,写智能合约测试简直就是一种自虐。你以为你写完了逻辑,你以为你覆盖了所有的边界情况,后来啊呢?前端跑过来跟你说:“嘿,哥们,我监听不到事件啊,你的合约是不是挂了?”那一刻,你的心情绝对是崩溃的。 拖进度。 event 不仅仅是日志,它是链下系统和链上世界沟通的唯一桥梁,是那根救命的稻草。如果这根稻草断了或者这根稻草传递的信息是错的,那整个去中心化应用就变成了瞎子。

所以我们得测试。不仅要测试,还要用 Foundry 这种硬核工具来测试。为什么是 Foundry?主要原因是它快,主要原因是它用 Rust 写的,主要原因是它能让你在测试里像上帝一样控制时间、余额和存储。但是 Foundry 测试 Event 的语法有时候真的让人摸不着头脑,特别是那个 expectEmit那一堆布尔参数,每次写我都得去翻文档,或者干脆瞎蒙,反正运气好就能过。

纸上谈兵·solidity·Foundry 实战》智能合约 Event 测试全攻略

今天我们就来聊聊怎么用 Solidity 和 Foundry 高效测试顺序, 怎么偷懒忽略顺序,还有怎么去解码那些该死的非 indexed 参数。准备好了吗?没有?没有也得看,主要原因是代码不会自己写完,踩雷了。。

先来个简单的:基础 Event 测试

假设我们有一个简单的 Token 合约,就像那种满大街都是的 ERC20 标准克隆体。它有一个 transfer 函数, 当冤大头了。 转账的时候会触发一个 Transfer 事件。这太基础了基础到如果你不测试它,你的代码审查员都会用看垃圾的眼神看你。

代码大概长这样, 别嫌它简单,简单才是真理:

换个角度。

阅读全文

为什么测试 Event 让我想哭

说实话,写智能合约测试简直就是一种自虐。你以为你写完了逻辑,你以为你覆盖了所有的边界情况,后来啊呢?前端跑过来跟你说:“嘿,哥们,我监听不到事件啊,你的合约是不是挂了?”那一刻,你的心情绝对是崩溃的。 拖进度。 event 不仅仅是日志,它是链下系统和链上世界沟通的唯一桥梁,是那根救命的稻草。如果这根稻草断了或者这根稻草传递的信息是错的,那整个去中心化应用就变成了瞎子。

所以我们得测试。不仅要测试,还要用 Foundry 这种硬核工具来测试。为什么是 Foundry?主要原因是它快,主要原因是它用 Rust 写的,主要原因是它能让你在测试里像上帝一样控制时间、余额和存储。但是 Foundry 测试 Event 的语法有时候真的让人摸不着头脑,特别是那个 expectEmit那一堆布尔参数,每次写我都得去翻文档,或者干脆瞎蒙,反正运气好就能过。

纸上谈兵·solidity·Foundry 实战》智能合约 Event 测试全攻略

今天我们就来聊聊怎么用 Solidity 和 Foundry 高效测试顺序, 怎么偷懒忽略顺序,还有怎么去解码那些该死的非 indexed 参数。准备好了吗?没有?没有也得看,主要原因是代码不会自己写完,踩雷了。。

先来个简单的:基础 Event 测试

假设我们有一个简单的 Token 合约,就像那种满大街都是的 ERC20 标准克隆体。它有一个 transfer 函数, 当冤大头了。 转账的时候会触发一个 Transfer 事件。这太基础了基础到如果你不测试它,你的代码审查员都会用看垃圾的眼神看你。

代码大概长这样, 别嫌它简单,简单才是真理:

换个角度。

阅读全文