如何在 Rust 中消费执行事件:一个基本示例
本指南将逐步介绍如何构建一个从运行中的 Monad 节点读取执行事件的最小 Rust 应用程序。指南结束时,您将拥有一个可用的事件消费者,它会在每个 EVM 动作发生时将其打印出来。前置条件
本指南假设您已具备:- 一个已启用执行事件的运行中的 Monad 节点(设置指南)
项目设置
以下是包含代码的仓库。 创建一个新的 Rust 项目:Cargo.toml 替换为:
代码
将src/main.rs 替换为:
src/main.rs
构建并运行
预期输出
当您的节点处理交易时,您将看到事件流:关键概念
事件环
事件环是一块共享内存缓冲区,执行守护进程会在其中写入事件。多个读取者可以同时消费,每个读取者维护自己的位置。EventNextResult
- Ready:有可处理的事件
- NotReady:尚无新事件(守护进程未写入任何事件)
- Gap:读取者落后,事件被覆盖——调用
reset()以恢复
事件类型
您将看到的常见事件:BlockStart/BlockEnd- 区块边界TxnHeaderStart/TxnEnd- 交易边界TxnEvmOutput- 交易执行结果(包含带 gas_used 的收据)TxnLog- EVM 日志释放(Solidity 事件)AccountAccess- 执行期间访问的账户StorageAccess- 合约存储的读/写
后续步骤
- 查看完整的 eventwatch.rs 示例,了解生产模式(时间戳、超时检测、CLI 参数)
- 阅读 Rust API 文档获取详细的类型信息
- 探索事件环内部结构以了解共享内存协议

