以太坊归档节点
归档节点是配置为构建所有历史状态归档的 以太坊 客户端实例。对于某些用例来说,它是一个有用的工具,但运行起来可能比全节点更复杂。
先决条件
你应该了解 以太坊节点 的概念、其架构、同步策略,以及 运行 和 使用它们 的实践。
什么是归档节点
为了理解归档节点的重要性,让我们先澄清“状态”的概念。以太坊可以被称为_基于交易的状态机_。它由执行交易的账户和应用组成,这些交易会改变它们的状态。包含每个账户和合约信息的全局数据存储在一个称为状态的字典树(trie)数据库中。这由执行层(EL)客户端处理,包括:
- 账户余额和随机数(nonce)
- 合约代码和存储
- 共识相关数据,例如质押存款合约
为了与网络交互、验证和生成新区块,以太坊客户端必须跟上最新的变化(链的顶端),从而掌握当前状态。配置为全节点的执行层客户端会验证并跟踪网络的最新状态,但只缓存过去几个状态(例如,与最近 128 个区块相关的状态),以便处理链重组并提供对近期数据的快速访问。所有客户端都需要近期状态来验证传入的交易并使用网络。
你可以将状态想象为特定区块的瞬时网络快照,而将归档想象为历史重放。
历史状态可以被安全地修剪,因为它们对于网络运行来说不是必需的,而且客户端保留所有过时数据将是无用的冗余。存在于某个近期区块(例如,链头之前的 128 个区块)之前的状态实际上会被丢弃。全节点只保留历史区块链数据(区块和交易)以及偶尔的历史快照,它们可以根据请求使用这些快照重新生成旧状态。它们通过在 EVM 中重新执行过去的交易来实现这一点,当所需状态距离最近的快照很远时,这可能会消耗大量计算资源。
然而,这意味着在全节点上访问历史状态会消耗大量计算资源。客户端可能需要执行所有过去的交易,并从创世区块开始计算出一个历史状态。归档节点通过不仅存储最新状态,还存储每个区块之后创建的每一个历史状态来解决这个问题。它基本上是以更大的磁盘空间需求为代价做出的权衡。
值得注意的是,网络并不依赖归档节点来保存和提供所有历史数据。如上所述,所有历史中间状态都可以在全节点上推导出来。交易由任何全节点存储(目前小于 400G),并且可以被重放以构建整个归档。
用例
以太坊的常规使用(如发送交易、部署合约、验证共识等)不需要访问历史状态。用户在与网络进行标准交互时,永远不需要归档节点。
状态归档的主要好处是可以快速访问有关历史状态的查询。例如,归档节点会迅速返回如下结果:
- 在区块 15537393 时,账户 0x1337... 的 ETH 余额是多少?
- 在区块 1920000 时,合约 0x 中代币 0x 的余额是多少?
如上所述,全节点需要通过 EVM 执行来生成这些数据,这会占用 CPU 并花费时间。归档节点在磁盘上访问它们并立即提供响应。对于基础设施的某些部分来说,这是一个有用的功能,例如:
- 区块浏览器等服务提供商
- 研究人员
- 安全分析师
- 去中心化应用 (dapp) 开发者
- 审计与合规
有各种免费的 服务 也允许访问历史数据。由于运行归档节点的要求更高,这种访问大多受到限制,并且仅适用于偶尔的访问。如果你的项目需要持续访问历史数据,你应该考虑自己运行一个归档节点。
实现与使用
在此语境下,归档节点指的是由面向用户的执行层客户端提供的数据,因为它们处理状态数据库并提供 JSON-RPC 端点。配置选项、同步时间和数据库大小可能因客户端而异。有关详细信息,请参阅你的客户端提供的文档。
在启动你自己的归档节点之前,请了解客户端之间的差异,尤其是各种 硬件要求。大多数客户端并未针对此功能进行优化,它们的归档需要超过 12TB 的空间。相比之下,像埃里贡(Erigon)这样的实现可以在不到 3TB 的空间内存储相同的数据,这使得它们成为运行归档节点的最有效方式。
推荐实践
除了 运行节点的一般建议 之外,归档节点对硬件和维护的要求可能更高。考虑到埃里贡的 关键特性 (opens in a new tab),最实用的方法是使用 埃里贡 客户端实现。
硬件
务必在客户端文档中验证特定模式的硬件要求。 归档节点最大的要求是磁盘空间。根据客户端的不同,它从 3TB 到 12TB 不等。即使 HDD 可能被认为是处理大量数据的更好解决方案,但同步数据并不断更新链头将需要 SSD 驱动器。SATA (opens in a new tab) 驱动器已经足够好,但它应该是可靠的质量,至少是 TLC (opens in a new tab)。磁盘可以安装在台式电脑或具有足够插槽的服务器中。这种专用设备是运行高正常运行时间节点的理想选择。完全可以在笔记本电脑上运行它,但便携性将带来额外的成本。
所有数据都需要放在一个卷中,因此必须将磁盘连接起来,例如使用 RAID0 (opens in a new tab) 或 LVM。也可以考虑使用 ZFS (opens in a new tab),因为它支持“写时复制 (Copy-on-write)”,这可确保数据正确写入磁盘而没有任何底层错误。
为了在防止意外数据库损坏方面获得更高的稳定性和安全性,特别是在专业设置中,如果你的系统支持,请考虑使用 ECC (opens in a new tab) 内存。通常建议 RAM 的大小与全节点相同,但更多的 RAM 有助于加快同步速度。
在初始同步期间,处于归档模式的客户端将执行自创世以来的每笔交易。执行速度主要受 CPU 限制,因此更快的 CPU 有助于缩短初始同步时间。在普通的消费级计算机上,初始同步可能需要长达一个月的时间。
延伸阅读
- 以太坊全节点与归档节点对比 (opens in a new tab) - QuickNode,2022 年 9 月
- 构建你自己的以太坊归档节点 (opens in a new tab) - Thomas Jay Rush,2021 年 8 月
- 如何将埃里贡、埃里贡的 RPC 和 TrueBlocks(抓取和 API)设置为服务 (opens in a new tab) – Magnus Hansson,更新于 2022 年 9 月