Skip to main content
执行事件 系统允许开发者构建高性能应用程序,通过共享内存队列从 Monad 节点接收最低延迟的事件数据。除低延迟应用程序外,处理超大量_区块链_数据的程序也需要此系统。 要消费此实时数据,您可以使用本页描述的软件开发工具包,用 C、C++ 或 Rust 编写数据处理软件,并在运行 Category Labs 构建的 Monad 节点软件的主机上运行。 对于简单的数据处理用例来说这有些过度;请参见替代方案章节,了解消费 Monad 区块链数据的更方便方式。 有关与其他系统(如 Reth 的 ExEx 或 Solana Geyser)的比较,请参见比较章节。

我需要执行事件吗?

如果您从其他 EVM 区块链转向 Monad,您可能会发现您的数据处理”跟不上” Monad 上生成数据的速率。这是因为 Monad 是一个快速的区块链,体现在两个维度:
  • 每 300 毫秒提议一个新区块,等同于每分钟约 200 个区块。
  • 与其他区块链相比,单个区块可以包含更多的交易;在峰值处理速率下,Monad 可以执行包含数千笔交易的区块,其设计目标是维持接近 10,000 TPS(每秒交易数)的执行速率。
流行的 JSON-RPC 数据访问 API 是为原始以太坊区块链设计的,该链很少超过 50 TPS。如果您需要大量数据,或需要非常快地获得最新数据,JSON-RPC 根本无法扩展。通过 WebSockets 进行的数据流传输有时可以帮助,但并非所有数据都通过 WebSockets 发布。 如果您跟不上,您有两个选择:
  1. 自己构建更复杂的处理 - 您可以使用执行事件 SDK 构建可能的最低延迟、最高吞吐量的数据消费者。
  2. 使用第三方数据服务 - 如果您不熟悉系统编程(用 C、C++ 或 Rust 编程语言进行低级后端编程)或没有时间或兴趣,有许多第三方提供商为 Monad 提供数据服务。通常这些服务会自己使用执行事件 SDK,然后以某种方式对数据进行过滤、汇总或增强,让您能够比传统 JSON-RPC 更高效地获取所需数据。请查看工具和基础设施页面获取流行提供商的链接,特别是索引器部分,尽管其他服务如区块浏览器有时也提供可能满足您需求的数据访问 API。

什么是”执行事件”?

Category Labs 的执行层守护进程包含一个共享内存通信系统,它发布关于交易执行期间 EVM 采取的大多数操作的数据。这些 EVM 操作的原始二进制记录称为”执行事件”。 需要最高性能的第三方应用可以在与节点软件相同的主机上运行,并直接从共享内存中消费执行事件记录。要读取这些数据,您的第三方应用需要调用执行事件 SDK(我们的实时数据库)中的函数。
Solidity 编程语言也有一个称为事件的特性。这些与执行事件不是一回事。Solidity 事件是以太坊虚拟机底层日志操作码的编程语言级抽象。执行事件系统_确实_记录所有日志事件,但它还记录关于交易执行期间发生的其他事情的信息,例如对其他合约的调用、交易访问的账户列表等。

执行事件文档

  • 发布说明 - 查看 SDK 最新版本中的新内容
  • 开始使用 - 描述如何构建并运行一个简单的示例程序
  • 事件概述 - 解释执行事件系统中的核心概念
  • event ring 详解 - 记录 event ring 文件和协议版本控制
  • API 文档 - 我们的编程库概述,为多种编程语言提供
  • 共识事件 - 执行发布一些来自共识的信息,这对理解实时数据至关重要
  • 高级主题 - 面向高级用户和为执行源代码做贡献的软件开发者的文档

执行事件的替代方案

Category Labs 的节点软件包括一个 RPC 服务器组件。RPC 服务器支持两种更简单的方式读取区块链数据:
  1. 大多数 EVM 兼容区块链节点(例如 Geth)支持的典型 JSON RPC 端点
  2. 也支持 Geth 的实时事件 WebSocket 协议(即 eth_subscribe),以及一些用于更好性能的 Monad 特定扩展;详见 WebSocket 指南
这两种访问方法在 EVM 兼容区块链中都是标准化的,且比执行事件更易使用。执行事件系统是为专门应用而设计的,例如运行索引器平台或需要尽可能低延迟的应用(例如做市)。它也是 RPC 服务器本身获取实时数据的来源。

与其他数据系统的比较

与其他区块链软件中低延迟系统的简要比较:
  • Geth Live Tracing (链接) - 基于”钩子”的 API:您的代码作为插件加载到 Geth 节点中,并在执行期间通过回调同步运行
  • Reth ExEx (链接)(链接) - 基于异步函数的 API:您的代码被加载到 Reth 节点中;执行事后而不是同步看到事件
  • Solana Geyser (链接) - 基于”钩子”的 API,运行在 Solana 验证者内部并在执行期间调用回调的插件
这三种都不同于执行事件方法。在我们的方法中:
  • 您像在 Geth Live Tracer 和 Solana Geyser 中一样”随事件发生”看到事件。与这些方法不同,您的代码不是作为插件运行在执行引擎内部,而是在单独的进程中并行运行(大约一微秒之后)
  • 与 Geth Live Tracer 相同(但不同于 Reth 的 ExEx),您以单独事件的形式看到交易的每一”部分” —— 每条日志、每次余额变化等
  • 与 Geth Live Tracer 或 Geyser 不同,您不安装”钩子”并接收回调;相反,您持续轮询新事件记录,遍历返回给您的任何新事件(并忽略您不感兴趣的事件)
  • 由于系统基于共享内存 ring buffer,如果您的消费者太慢,您可能会丢失数据 —— 您必须跟上!