Skip to main content
对于许多用例,开发者和用户可以通过 JSON-RPC 接口访问 Monad 区块链的当前和历史数据。 然而,这不是接收最新区块数据的最有效方式。传统的 JSON-RPC 访问方法使用请求/响应模型(需要轮询),而不是通知模型,后者会在有新更新时立即推送给您。
因为 Monad 区块链比其他 EVM 兼容的 L1 区块链快得多,如果您消费 大量 数据,传统的 JSON-RPC 方法可能无法提供足够的性能,即使它们在其他 EVM 生态系统中对您有效。下一节将详细解释原因。

为什么我可能需要实时数据,即使以前不需要?

Monad 是一个能够每秒处理数千笔交易的快速区块链:当 Monad 生态系统以峰值速率运行时,每秒的数据量比其他 L1 EVM 兼容区块链(如主网以太坊)多得多。 原始以太坊的数据生态系统是围绕运行速度低于 100 TPS 的网络演变的,因此当数据量增加近 100 倍时,某些在那里有效的数据查询模式可能无法表现得足够好。 一个经典的例子是索引器工作流,即使用 eth_getLogs 等 JSON-RPC 方法获取区块中每笔交易和每条日志的数据。一个典型的以太坊区块中会有数百笔交易,大约每 12 秒会有一个新区块。对于 Monad,每秒有 2.5 个区块,每个区块可以包含数千笔交易。 eth_getLogs 请求的数量将近增加 100 倍,给 JSON-RPC 服务提供者带来压力。使用实时数据服务可以有所帮助。这些服务在其他 EVM 区块链上也存在,但在 Monad 的更多情况下都是必需的。

如何接收实时数据?

Monad 目前提供三种实时数据源,它们在延迟与复杂性之间提供不同的权衡。

来源 #1:Geth 兼容的实时事件

这是一个源自 Geth 以太坊客户端但被其他 EVM 兼容区块链广泛支持的基于 WebSocket 的协议。Monad 实现了 eth_subscribe 方法以及 newHeadslogs 订阅类型。不支持 syncingnewPendingTransactions 订阅类型。 此实时数据源由 Monad RPC 服务器组件发布。

来源 #2:Monad 对 Geth 实时事件的扩展

Monad RPC 服务器还提供对 Geth 协议的扩展;它提供名为 monadNewHeadsmonadLogseth_subscribe 订阅。它们发布的数据与 Geth 实时事件协议几乎相同,但包含额外的数据用于跟踪每个区块通过共识的进展。 这要求用户理解推测性执行以及它如何影响实时数据。您可以在 WebSocket 订阅中阅读更多关于这些订阅的信息。

来源 #3:执行事件 SDK

这是消费实时数据的最快方式。它要求您使用 Monad 客户端 SDK 在 C、C++ 或 Rust 中编写自己的实时数据处理软件——然后与您自己的 Monad 节点一起运行。 这是驱动其他两种访问方法的数据源:RPC 服务器本身正在监听它以创建 WebSocket 数据源。它有自己的文档

数据产品比较

前两个产品通过 WebSocket 使用 eth_subscribe 方法消费。如果您不希望运行自己的 Monad 节点,可以从第三方数据提供商处获得。 SDK 产品要求您使用 C/C++ 或 Rust SDK 编写自己的第三方程序。这些程序不是运行在节点软件内的插件——它们是完全由您编写的独立程序。当事件在 EVM(在执行守护进程中)内部发生时,它们被记录到共享内存中。您的程序也在读取同一共享内存。因此,您的程序必须在与 Monad 节点相同的主机上运行。