> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 执行事件

**执行事件** 系统允许开发者构建高性能应用程序，通过共享内存队列从 Monad 节点接收最低延迟的事件数据。除低延迟应用程序外，处理超大量\_区块链\_数据的程序也需要此系统。

要消费此实时数据，您可以使用本页描述的软件开发工具包，用 C、C++ 或 Rust 编写数据处理软件，并在运行 Category Labs 构建的 [Monad 节点软件](/zh/node-ops)的主机上运行。

对于简单的数据处理用例来说这有些过度；请参见[替代方案](#alternatives-to-execution-events)章节，了解消费 Monad 区块链数据的更方便方式。

有关与其他系统（如 Reth 的 ExEx 或 Solana Geyser）的比较，请参见[比较](#comparisons-with-other-data-systems)章节。

## 我需要执行事件吗？

如果您从其他 EVM 区块链转向 Monad，您可能会发现您的数据处理"跟不上" Monad 上生成数据的速率。这是因为 Monad 是一个快速的区块链，体现在两个维度：

* 每 300 毫秒提议一个新区块，等同于每分钟约 200 个区块。
* 与其他区块链相比，单个区块可以包含更多的交易；在峰值处理速率下，Monad 可以执行包含数千笔交易的区块，其设计目标是维持接近 10,000 TPS（每秒交易数）的执行速率。

流行的 [JSON-RPC 数据访问 API](/zh/reference) 是为原始以太坊区块链设计的，该链很少超过 50 TPS。如果您需要大量数据，或需要非常快地获得最新数据，JSON-RPC 根本无法扩展。通过 [WebSockets](/zh/reference/json-rpc/overview) 进行的数据流传输有时可以帮助，但并非所有数据都通过 WebSockets 发布。

如果您跟不上，您有两个选择：

1. *自己构建更复杂的处理* - 您可以使用执行事件 SDK 构建可能的最低延迟、最高吞吐量的数据消费者。
2. *使用第三方数据服务* - 如果您不熟悉系统编程（用 C、C++ 或 Rust 编程语言进行低级后端编程）或没有时间或兴趣，有许多第三方提供商为 Monad 提供数据服务。通常这些服务会自己使用执行事件 SDK，然后以某种方式对数据进行过滤、汇总或增强，让您能够比传统 JSON-RPC 更高效地获取所需数据。请查看[工具和基础设施](/zh/tooling-and-infra)页面获取流行提供商的链接，特别是[索引器](/zh/tooling-and-infra/indexers)部分，尽管其他服务如[区块浏览器](/zh/tooling-and-infra/block-explorers)有时也提供可能满足您需求的数据访问 API。

## 什么是"执行事件"？

Category Labs 的[执行层守护进程](https://github.com/category-labs/monad/blob/main/docs/overview.md)包含一个共享内存通信系统，它发布关于交易执行期间 EVM 采取的大多数操作的数据。这些 EVM 操作的原始二进制记录称为"执行事件"。

需要最高性能的第三方应用可以在与节点软件相同的主机上运行，并直接从共享内存中消费执行事件记录。要读取这些数据，您的第三方应用需要调用执行事件 SDK（我们的实时数据库）中的函数。

<Note title="Monad 执行事件 vs Solidity 事件">
  Solidity 编程语言也有一个称为[事件](https://docs.soliditylang.org/en/latest/contracts.html#events)的特性。这些与执行事件不是一回事。Solidity 事件是以太坊虚拟机[底层日志操作码](https://www.evm.codes/?fork=osaka#a0)的编程语言级抽象。

  执行事件系统\_确实\_记录所有日志事件，但它还记录关于交易执行期间发生的其他事情的信息，例如对其他合约的调用、交易访问的账户列表等。
</Note>

## 执行事件文档

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

## 执行事件的替代方案

Category Labs 的节点软件包括一个 RPC 服务器组件。RPC 服务器支持两种更简单的方式读取区块链数据：

1. 大多数 EVM 兼容区块链节点（例如 Geth）支持的典型 [JSON RPC](/zh/reference) 端点
2. 也支持 Geth 的[实时事件](https://geth.ethereum.org/docs/interacting-with-geth/rpc/pubsub) WebSocket 协议（即 `eth_subscribe`），以及一些用于更好性能的 Monad 特定扩展；详见 [WebSocket 指南](/zh/reference/json-rpc/overview)

这两种访问方法在 EVM 兼容区块链中都是标准化的，且比执行事件更易使用。执行事件系统是为专门应用而设计的，例如运行索引器平台或需要尽可能低延迟的应用（例如做市）。它也是 RPC 服务器本身获取实时数据的来源。

## 与其他数据系统的比较

与其他区块链软件中低延迟系统的简要比较：

* **Geth Live Tracing** [(链接)](https://geth.ethereum.org/docs/developers/evm-tracing/live-tracing) - 基于"钩子"的 API：您的代码作为插件加载到 Geth 节点中，并在执行期间通过回调同步运行
* **Reth ExEx** [(链接)](https://www.paradigm.xyz/2024/05/reth-exex) 和 [(链接)](https://reth.rs/exex/overview) - 基于异步函数的 API：您的代码被加载到 Reth 节点中；执行事后而不是同步看到事件
* **Solana Geyser** [(链接)](https://www.helius.dev/blog/solana-geyser-plugins-streaming-data-at-the-speed-of-light) - 基于"钩子"的 API，运行在 Solana 验证者内部并在执行期间调用回调的插件

这三种都不同于执行事件方法。在我们的方法中：

* 您像在 Geth Live Tracer 和 Solana Geyser 中一样"随事件发生"看到事件。与这些方法不同，您的代码不是作为插件运行在执行引擎内部，而是在单独的进程中并行运行（大约一微秒之后）
* 与 Geth Live Tracer 相同（但不同于 Reth 的 ExEx），您以单独事件的形式看到交易的每一"部分" —— 每条日志、每次余额变化等
* 与 Geth Live Tracer 或 Geyser 不同，您不安装"钩子"并接收回调；相反，您持续轮询新事件记录，遍历返回给您的任何新事件（并忽略您不感兴趣的事件）
* 由于系统基于共享内存 ring buffer，如果您的消费者太慢，您可能会丢失数据 —— 您必须跟上！
