跳至内容
0%

Archive Node:你需要知道的一切

Alchemy team headshot

作者 Alchemy

发布于 2022年6月21日2 分钟阅读

像 Ethereum 或 Polygon 这样的公共区块链是一个全球性的点对点计算机网络。节点(每个对等设备的称呼)负责存储和处理区块链上的信息,并验证网络状态等。

虽然节点都可以与区块链上的其他节点交互,但它们的能力和用途各不相同。例如,本文讨论的归档节点(archive node)可以存储区块链的完整历史数据并按需提供。这与只存储最近区块链状态的全节点,以及主要从全节点请求数据的轻节点不同。

本概述详细介绍归档节点,并解释它们在 Ethereum 中的工作原理。你将了解为什么运行归档节点很重要,可以使用哪些客户端,以及如何搭建自己的归档节点来查询历史区块链数据。

展示区块链网络中点对点节点如何连接和交互的示意图。
展示区块链网络中点对点节点如何连接和交互的示意图。

什么是 Ethereum 归档节点?

Ethereum 归档节点是一种能够存储整条区块链历史(甚至到创世区块,即第一个被创建的区块)的全节点。我们在区块链节点指南中详细介绍了各类节点,这里只快速概述一下每种类型:

全节点

全节点存储当前及最近的区块链状态(最近 128 个区块以内),并参与验证新添加的区块。它们可以处理交易、执行智能合约,以及查询/提供区块链数据。它们也可以(通过 tracing)访问部分历史数据,但这方面效率不高。

轻节点(又称“轻客户端”)

轻客户端只存储区块头,因此只能访问极少量的区块链数据(例如区块时间戳、哈希值、挖矿难度等)。不过,它们可以与全节点对接以获取所需数据并验证信息(例如检查交易状态或查询余额)。运行轻节点所需的硬件投入、运行成本和技术门槛最低。

Light Node
Full Node

Block Headers

Block Headers

Full Block State

Full Block State

归档节点

归档节点存储的信息与全节点相同,并保留区块链所有先前的状态。运行归档节点所需的硬件投入、运行成本、技术门槛和经验要求都最高。归档节点能够快速高效地构建归档区块链数据,适用于查询任意历史数据,比如某用户在特定区块时的余额。

归档节点比其他节点需要更多存储空间(因为存储了更多数据),但在特定场景下这种投入是值得的。下一节我们将探讨归档节点的工作原理,以及它们的架构与其他节点类型有何不同。

归档节点如何工作?

归档节点存储区块链各个区块之间的所有历史状态。一个归档节点本质上包含了网络在不同时间点的快照。

归档节点同步哪些数据?

归档节点执行“完全同步”(full sync),从创世区块开始下载完整的区块数据,包括区块头、交易和收据。

与所有节点一样,归档节点必须与区块链的当前状态“同步”,以存储和验证网络上的数据。同步需要从对等节点恢复状态数据、验证交易,并在本地构建区块链实例。

归档节点会验证所有已下载的区块、重新执行所有交易,并将所有中间状态写入磁盘。这一点也解释了为什么归档节点能够提供区块链在不同时刻状态的“档案”。

同步一个归档节点需要多长时间?

同步归档节点所需的平均时间不固定,但通常预计需要一个月到三个月(如果过程中出现问题,时间可能更长)。

归档节点的同步耗时比普通全节点或轻客户端更长。原因很简单:归档节点要恢复区块链自创世以来的完整数据集。

全节点和轻节点所需的同步时间要短得多,因为它们会剪除历史及不必要的区块链数据。例如,全节点只同步到最新区块,最多再加上之前的几百个区块(轻客户端只同步最新的区块头)。

这种缓慢的同步速度可能会拖慢开发项目的进度,因此建议使用区块链节点提供商。节点提供商允许你按需部署已完全同步的归档节点,省去自己运行归档节点的麻烦。

归档节点的数据规模有多大?

截至本文撰写时,运行两大主流客户端(Geth 和 OpenEthereum)的归档节点存储了超过 10 TB 的数据。

相比之下,运行 Geth 的全节点只存储略多于 700GB 的区块链数据。我们前面已经解释了这种差异的原因——归档节点需要从创世开始恢复区块链数据,而全节点会定期剪除旧数据。

展示 Ethereum 平均归档节点大小历史增长的图表。
展示 Ethereum 平均归档节点大小历史增长的图表。[来源]

为什么要使用归档节点?

归档节点提供了访问区块链历史信息的途径。如果你需要比最近 128 个区块(全节点可提供)更早的数据,归档节点就很有用。

以下是 Ethereum 归档节点的两个使用场景:

1. 审计区块链的历史信息

如果你正在构建一项用于审计区块链或收集特定历史数据的服务,归档节点是理想选择。一个典型场景是构建区块链浏览器(如Etherscan)、链上分析工具(如Dune Analytics),或加密货币钱包。

这些服务依赖归档节点为用户查询并提供旧的状态数据。例如,你可以通过 Etherscan 获取 Ethereum 上第一个被挖出区块的信息。类似地,Dune Analytics 可以显示自创立以来 Uniswap 的用户总数。

2. dapp 开发

运行自己的节点通常是构建 dApp 的最低要求。如果你只需要提交交易、分析交易内存池、监听智能合约事件以及调用最近的区块链信息,全节点就够用了。

但是,使用全节点调用超出最近 128 个区块范围的信息会抛出错误。全节点会剪除区块链数据,只保留验证网络状态所需的最少数据。

如果你的 dApp 项目需要快速查询较旧的区块链数据,就需要运行归档节点。这一点很重要,因为虽然可以用全节点构建归档数据,但耗时更长。有了归档节点,像获取某账户在特定区块号的余额这类操作,会变得顺畅且快速。

可能需要访问归档节点的应用示例包括:

  • 链上信誉服务(例如 DegenScore),长期跟踪用户活动。
  • 治理平台(例如 Tally、Snapshot),允许用户讨论并对治理提案投票。

这些 dApp 示例以及类似应用的共同点在于:需要查看历史链上数据。

如何运行归档节点?

运行归档节点需要节点客户端,且硬件要求比全节点或轻客户端高得多。

归档节点在无需依赖第三方提供商的情况下检索历史状态数据方面确实有用。它们能让你掌控自己的信息,尤其是在有特定用途(例如税务合规)需求的情况下。但由于需要存储和处理的数据量巨大,满足相应的硬件要求是必须的。

什么是归档节点客户端?

归档节点客户端是你可以在本地运行的区块链实现。 客户端使节点(包括归档节点)能够与其他对等节点交互并访问区块链数据。要顺利运行 Ethereum 归档节点,你需要一个可靠且性能优秀的节点客户端。

有哪些常用的归档节点客户端?

最流行且可信的归档节点客户端包括 Go Ethereum(Geth)、Erigon、Nethermind 和 Besu。我们来更深入地了解一下每个客户端:

Geth 归档节点

Geth 是为 Ethereum 区块链开发的最早期客户端实现之一,也是 Ethereum 节点使用的主要客户端。Geth 拥有大量面向用户的工具和功能。它使用 Go 语言编写,并在 GNU Lesser Public License 下公开发布。了解更多关于使用 Geth 运行归档节点的信息。

Erigon 归档节点

Erigon 是另一个基于 Go 语言开发的面向节点用户的 Ethereum 客户端。Erigon 提供高效的状态存储、更快的同步速度、Grafana 仪表盘分析,以及实用的 JSON-RPC 守护进程。了解更多关于使用 Erigon 运行归档节点的信息。

Nethermind 归档节点

Nethermind 是使用 C# .NET 框架构建的 Ethereum 协议实现。Nethermind 宣称自己是现有最快的 Ethereum 客户端,并提供稳定性、安全性、可靠性和数据完整性。了解更多关于使用 Nethermind 运行归档节点的信息。

Besu 归档节点

Hyperledger Besu 是为企业用户设计的 Ethereum 客户端,不过个人用户同样可以使用。Besu 使用 Java 编写,提供包括 tracing、GraphQL API 以及广泛监控功能等实用特性。了解更多关于使用 Besu 运行归档节点的信息。

运行归档节点需要什么硬件?

由于归档节点比其他类型的节点执行更多的读写操作,并占用更多 RAM 和 CPU 资源,可能需要投资专用硬件来应对其繁重的计算任务。

以下是运行 Ethereum 归档节点的硬件要求列表:

操作系统:Windows、Linux 或 macOS

处理器:Intel i7 或同等性能处理器

存储:至少 8-10 TB 空间的固态硬盘(SSD)

内存:至少 16-32GB 的 RAM 磁盘

CPU: 4 核以上的 CPU

带宽: 25 MB/s 以上的速度

设置好节点硬件并配置好客户端后,你可以使用前端库(ethers.js/web3.js)和JSON-RPC 调用开始与 Ethereum 区块链交互。例如,你可以尝试调用 `eth_getBalance` 函数来获取某个旧地址的余额。

在 Alchemy 上免费访问归档节点

正如我们所解释的,运行 Ethereum 归档节点需要巨大的投入。这还不包括你管理归档节点本身所需的时间和精力,尤其是当节点失去同步时。但通过连接由节点提供商(例如 Alchemy)管理的归档节点端点,你可以完全跳过这些麻烦。

Alchemy 的Node API支持无限量的归档数据请求,让你可以访问所需的所有历史区块链信息。好处是?你可以免费连接归档节点。

Alchemy 提供不受限制的归档节点访问,即便是免费套餐用户也能使用。这意味着你可以获取过去的链上数据,甚至从创世区块分叉整条链,而无需支付额外费用。Alchemy 提供对 Polygon、Ethereum 及许多其他热门链的归档节点访问。

展示自建节点与使用像 Alchemy 这样的节点提供商之间区别的示意图。
展示自建节点与使用像 Alchemy 这样的节点提供商之间区别的示意图。

如何在 Alchemy 上连接完整归档节点?

以下是使用 Alchemy 连接归档节点的分步流程:

  1. 注册一个账户(免费!)并创建你的第一个项目。

  2. 创建你的 Alchemy 密钥。这是用于连接归档节点的 URL 端点。

  3. 开始从命令行界面向 Ethereum 区块链发送请求,获取归档数据。

结论

归档节点可以存储超出最近 128 个区块范围的历史区块链状态。如果你的 dApp 或 Web3 服务需要访问历史区块链数据,运行归档节点是显而易见的选择。但要注意,运行一个功能完整的归档节点所带来的要求可能会让开发者望而却步,拖慢开发计划。

Alchemy 的Node API通过为用户提供使用免费 URL 端点的归档节点连接,解决了这一问题。有了 Alchemy,运行 Ethereum 归档节点从未如此简单!

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。