Skip to main content
如果您按顺序完成本指南,您应已经构建了其中一个示例程序(CRust),使用快照文件运行了它,并安装了自己的本地 Monad 节点 现在我们将再次运行示例程序,但这次它将打印我们本地 Monad 节点发布的实时事件。

使用实时数据运行

步骤 1:准备 Monad 节点

运行前,请确保执行层守护进程正在运行并且已启用执行事件。特别是,请确保您已向执行层守护进程传递了命令行参数 --exec-event-ring

步骤 2:运行示例程序

在快照示例中,我们将快照文件名作为命令行参数传递给程序。在 C 和 Rust 示例程序中,如果我们不传递任何文件名,它将使用执行层守护进程使用的默认文件名,将我们连接到实时事件流。
  • 对于 C,运行不带参数的 eventwatch
  • 对于 Rust,运行命令 cargo run -- -d
您将看到类似快照场景的数据,但这次是执行发布的实时数据。如果您停止执行层守护进程,示例程序将检测到数据源已消失并退出。

后续步骤

至此,开始使用指南完成!如果您有兴趣使用 SDK 开发自己的实时数据处理软件,从这里应去何处? 以下是推荐的资源列表,大致按对开发实际应用最有帮助的顺序:
  1. 如果您还没读过,请阅读概述和您刚才运行的示例程序的源代码
  2. 一旦理解了示例中的基本思路,SDK 文档的其余部分应该很容易理解
  3. 使用 SDK 之前,请确保您理解共识事件及其含义
  4. 尝试一个更复杂的程序并查看其源代码
    • 对于 Rust,尝试上游 monad 仓库中的 “Block Explorer” TUI 示例。您可以使用 cargo run -p monad-exec-events --example explorer 运行它,然后浏览 explorer.rs 中的源代码
    • 对于 C,查看上游 monad 仓库中 monad-event-cli 程序的代码;此程序是执行事件系统的 “tcpdump”,展示了 API 的多种不同用法。您可能还想阅读下一节关于编译此程序的内容

可选:构建 monad-event-cli 工具

monad-event-cli 是处理事件系统的实用工具。与 Rust 的 eventwatch 示例一样,它可以将执行事件负载解码为人类可读形式。它还执行开发者工作流中有用的其他任务,例如记录事件捕获以及为测试用例创建快照 event ring 文件。
monad-event-cli 需要 gcc 15.2 或更高版本,无法用 gcc 15.1 构建。目前,在其软件包仓库中提供 gcc 15.2 的唯一 Ubuntu 版本是 Ubuntu 25.10,本指南编写时它刚刚发布。如果您的 Linux 发行版没有提供 gcc 15.2 而您也不想手动安装,则可以改用 clang-19(或更新版本),但要使用 libc++ 而不是 libstdc++。Linux 上 clang 默认使用 gcc C++ 标准库 (libstdc++)。如果您指定 -stdlib=libc++,它将改用 LLVM 标准库,该库具有所需的 <format> 支持。您可能需要安装它,因为在某些发行版中它不是 clang 包的一部分。在 Ubuntu 上,安装 libc++-19-dev 时会添加 clang-19 libc++ 运行时和开发包。使用 libc++-19 时,还必须指定 -fexperimental-library 编译器标志以在 <chrono> 中启用 C++20 时区支持;事件 CLI 工具使用它以本地时间打印事件时间戳。在某些未来版本的 libc++ 中这将不再需要。
要构建 monad-event-cli,您还需要 CLI11 C++ 命令行解析器库和 OpenSSL 开发文件。虽然是可选的,您还应该安装 GNU 多精度库 的开发文件,以便 uint256 值以十进制形式打印。 说明还使用了 ninja 构建工具。您可以在 Ubuntu 上使用以下命令一次性安装所有内容:
现在克隆执行仓库并检出 release/exec-events-sdk-v1.1 分支,然后构建以 category/event 为根的 CMake 项目。 使用 clang-19 配合 libc++ 和上述选项:
您现在应该能够运行:
-march=x86-64-v4 是启用 CPU 指令级某些原子操作所需的,以避免需要链接 libatomic.a;如果没有它,会发出性能警告,由于 -Werror 而变成编译错误
为简化使用所有这些设置运行 cmake,您可能希望创建 CMake 工具链文件而不是使用环境变量。为此,创建一个内容如下的名为 clang19-libcxx.cmake 的文件:
现在您可以运行这个稍简洁的命令: