Skip to main content

如何在 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 - 合约存储的读/写

后续步骤