---
title: "Archive 节点——你需要了解的一切"
description: "Archive 节点的工作原理、如何运行 Archive 节点及适用场景"
---

# Archive 节点——你需要了解的一切

像 Ethereum 或 Polygon 这样的公有区块链是由计算机组成的全球点对点网络。节点（每个对等设备的称呼）负责在区块链上存储和处理区块链信息，并验证网络状态等。

虽然节点都可以与区块链上的其他对等节点交互，但它们的能力和用例各不相同。例如，本文讨论的归档节点（archive node）可以存储区块链的完整历史数据并按需提供。这与全节点（full node）不同，全节点只存储近期的区块链状态；也与轻节点（light node）不同，轻节点主要向全节点请求数据。

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

<ImageBlock
  src="https://media.alchemy.com/1704095139-blockchain-network-p2p-nodes.jpeg"
  alt="展示点对点节点如何在区块链网络中连接和交互的示意图。"
  width={1600}
  height={1037}
  caption="展示点对点节点如何在区块链网络中连接和交互的示意图。"
  priority
/>

## 什么是 Ethereum 归档节点？

Ethereum 归档节点是一种全节点，能够存储整条区块链的历史，甚至可以追溯到创世区块（即最早创建的区块）。我们在[区块链节点指南](http://www.alchemy.com/overviews/what-is-an-ethereum-node)中对各类节点做了详细说明，这里只对每种类型做一个简要概述：

### 全节点

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

### 轻节点（又称“轻客户端”）

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

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Light Node", dataType: "object" },
      { key: "2", width: 200, title: "Full Node", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Block Headers</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Block Headers</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Full Block State</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Full Block State</p>", tooltip: "", icon: "" },
        id: 1,
      },
    ],
  }}
/>

### 归档节点

归档节点存储的信息与全节点相同，此外还存储区块链的所有历史状态。运行归档节点对硬件、运行成本、技术能力和经验的要求最高。归档节点能够快速高效地构建归档区块链数据，适用于查询任意历史数据，例如某用户在特定区块上的余额。

归档节点比其他节点需要更多存储空间（因为它们存储的数据更多），但在特定场景下这样的投入是值得的。下一节我们将探讨归档节点的工作原理，以及它们在架构上与其他节点类型的区别。

## 归档节点是如何工作的？

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

### 归档节点同步哪些数据？

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

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

归档节点会验证所有下载的区块、重新执行所有交易，并将所有中间状态写入磁盘。这最后一点正说明了为什么归档节点能提供区块链在不同时刻状态的“归档”。

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

**归档节点同步所需时间的平均估计各不相同，但通常需要一个月到三个月不等（如果过程中出现问题，时间可能更长）。**

[归档节点的同步时间](https://www.palkeo.com/en/projets/ethereum/parity_archive_node.html)比普通全节点或轻客户端要长得多。原因很简单：归档节点需要恢复自区块链诞生以来的完整数据集。

全节点和轻节点所需的同步时间要短得多，因为它们会剪除历史和非必要的区块链数据。例如，全节点只同步到最新区块以及此前的几百个区块（轻客户端只同步最新的区块头）。

这种缓慢的同步速度可能会拖慢开发项目的进度，因此建议[使用区块链节点服务商](https://www.alchemy.com/overviews/blockchain-node-providers)。节点服务商允许你按需部署已完全同步的归档节点，省去自行运行归档节点的麻烦。

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

截至撰写本文时，运行两大主流客户端（Geth 和 OpenEthereum）的归档节点存储的数据[**超过 10 TB**](https://etherscan.io/chartsync/chainarchive)。

作为对比，运行 Geth 的全节点只存储略高于 700GB 的区块链数据。我们之前已经解释过这种差距的原因——归档节点需要从创世区块开始恢复区块链数据，而全节点则会定期剪除旧数据。

<ImageBlock
  src="https://media.alchemy.com/1704095252-ethereum-archive-node-size.png"
  alt="展示 Ethereum 归档节点平均大小历史增长情况的图表。"
  width={1600}
  height={652}
  caption="展示 Ethereum 归档节点平均大小历史增长情况的图表。[来源]"
/>

## 为什么使用归档节点？

归档节点为访问区块链的历史信息提供了入口。如果你需要的数据比最近 128 个区块所包含的数据（可通过全节点获取）更早，归档节点就会很有用。

以下是 Ethereum 归档节点的两个用例：

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

如果你正在构建一项用于审计区块链或收集特定历史数据的服务，归档节点是理想选择。典型用例包括构建区块链浏览器（如 [Etherscan](https://www.alchemy.com/dapps/etherscan)）、链上分析工具（如 [Dune Analytics](https://www.alchemy.com/dapps/dune-analytics)）或加密货币钱包。

这些服务依赖归档节点为用户查询和提供旧的状态数据。例如，你可以通过 Etherscan 获取 Ethereum 上第一个被挖出的区块的信息。同样，Dune Analytics 可以向你展示 [Uniswap 自诞生以来的用户总数](https://dune.com/queries/2740)。

### 2. dapp 开发

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

然而，使用全节点调用超出最近 128 个区块范围的信息会导致报错。全节点会剪除区块链数据，只保留验证网络状态所需的最少数据。

你的 dApp 项目需要运行归档节点，才能*快速*查询更早的区块链数据。“快速”这一点很重要，因为虽然全节点也能构建归档数据，但耗时更长。有了归档节点，诸如获取某账户在特定区块号上的余额之类的操作，都会变得顺畅而快速。

可能需要访问归档节点的 [应用](https://www.alchemy.com/dapps/top/defi-dapps) 示例包括：

- 链上信誉服务（例如 DegenScore），这类服务会追踪用户在长时间跨度内的活动。
- 治理平台（例如 Tally、[Snapshot](https://www.alchemy.com/dapps/snapshot)），供用户讨论和对治理提案进行投票。

将这些 dApp 示例及其他类似应用联系在一起的共同点是：**需要查看历史链上数据**。

## 如何运行归档节点？

运行归档节点需要一个节点客户端，以及比全节点或轻客户端更强的硬件配置。

归档节点*确实*适合在不依赖第三方服务商的情况下检索历史状态数据。它们可以让你掌控自己的信息，尤其是在有特定用途（例如税务合规）需求时。但由于需要存储和处理的信息量极大，满足相应的硬件要求是必要的。

### 什么是归档节点客户端？

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

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

最流行、最可靠的归档节点客户端有 Go Ethereum（Geth）、Erigon、Nethermind 和 Besu。我们可以逐一深入了解这些客户端：

#### Geth 归档节点

Geth 是为 Ethereum 区块链开发的最早的客户端实现之一，也是 Ethereum 节点使用的主要客户端。Geth 为用户提供了大量的工具和功能。它使用 Go 语言编写，并以 GNU Lesser Public License 公开发布。了解更多关于[使用 Geth 运行归档节点](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)的信息。

#### Erigon 归档节点

Erigon 是另一个基于 Go 语言的 Ethereum 节点客户端。Erigon 提供高效的状态存储、更快的同步速度、Grafana 仪表盘分析，以及实用的 JSON-RPC 守护进程。了解更多关于[使用 Erigon 运行归档节点](https://github.com/ledgerwatch/erigon)的信息。

#### Nethermind 归档节点

Nethermind 是使用 C\# .NET 框架构建的 Ethereum 协议实现。Nethermind 号称是目前最快的 Ethereum 客户端，并提供稳定性、安全性、可靠性和数据完整性。了解更多关于[使用 Nethermind 运行归档节点](https://docs.nethermind.io/nethermind/ethereum-client/sync-modes#archive-sync)的信息。

#### Besu 归档节点

Hyperledger Besu 是为企业用户设计的 Ethereum 客户端，不过个人用户也可以使用。Besu 使用 Java 编写，提供 tracing、GraphQL API 以及全面的监控等实用功能。了解更多关于[使用 Besu 运行归档节点](https://besu.hyperledger.org/en/stable/Concepts/Node-Types/#run-an-archive-node)的信息。

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

由于归档节点执行的读写操作更多，对 RAM 和 CPU 的占用也高于其他类型的节点，运行归档节点可能需要投入专用硬件来应对其繁重的计算负荷。

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

操作系统：Windows、Linux 或 macOS

处理器：Intel i7 或同等级别

存储：固态硬盘（SSD），至少 8-10 TB 空间

内存：RAM disk，至少 16-32GB

**CPU：** 4 核以上

**带宽：** 25 MB/s 以上

设置好节点硬件并配置好客户端后，你就可以使用前端库（ethers.js/[web3.js](https://www.alchemy.com/dapps/web3-js)）和 [JSON-RPC 调用](https://www.wallarm.com/what/what-is-json-rpc) 开始使用 Ethereum 区块链。例如，你可以尝试调用 \`eth_getBalance\` 函数来获取某个旧地址的余额。

## 在 Alchemy 上免费访问归档节点

正如我们所解释的，运行 Ethereum 归档节点需要巨大的投入，而这还不包括维护归档节点本身所需的时间和精力，尤其是在节点失去同步时。但你可以跳过这一切，直接连接到由 Alchemy 这样的节点服务商所管理的归档节点端点。

Alchemy 的 [Supernode](https://www.alchemy.com/supernode?a=b4f033deab) 支持无限量的归档数据请求，并提供你所需的所有历史区块链信息访问权限。更棒的是：你可以*免费*连接到归档节点。

即使是 Supernode 免费套餐的用户，Alchemy 也[提供不受限制的归档节点访问](https://www.alchemy.com/blog/more-capacity-lower-prices)。这意味着你可以获取过去的链上数据，甚至从创世区块 fork 整条链，而无需支付额外费用。Alchemy 支持访问 [Polygon 的归档节点](https://www.alchemy.com/blog/polygon-archive-node-limit)、Ethereum 以及许多其他流行链的归档节点。

<ImageBlock
  src="https://media.alchemy.com/1704095403-running-node-vs-using-node-provider.jpeg"
  alt="展示自建节点与使用像 Alchemy 这样的节点服务商之间区别的示意图。"
  width={1600}
  height={1029}
  caption="展示自建节点与使用像 Alchemy 这样的节点服务商之间区别的示意图。"
/>

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

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

1. [注册](https://dashboard.alchemy.com/signup?a=b4f033deab)一个账号（免费！）并创建你的第一个项目。

2. [创建你的 Alchemy key](https://www.alchemy.com/docs/alchemy-quickstart-guide)。这就是用于连接归档节点的 URL 端点。

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

### 结语

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

Alchemy 的 [Supernode](https://www.alchemy.com/supernode?a=b4f033deab) 通过为用户提供使用免费 URL 端点的归档节点，解决了这一问题。有了 Alchemy，运行 Ethereum 归档节点从未如此简单！
