---
title: "Archive nodes——你需要知道的一切"
description: "Archive Node 的運作原理、如何運行 Archive Node，以及何時該使用它們"
---

# Archive nodes——你需要知道的一切

像 Ethereum 或 Polygon 這樣的公有區塊鏈,是由電腦組成的全球點對點網路。每個節點裝置都稱為節點\(node\),在區塊鏈上儲存並處理區塊鏈資訊,並驗證網路狀態等。

雖然節點可以與區塊鏈上的其他節點互動,但它們的能力與使用情境各不相同。舉例來說,本文討論的封存節點\(archive node\)可以儲存區塊鏈的完整歷史資料並依需求提供這些資料。這與只儲存最近區塊鏈狀態的全節點\(full node\),以及主要向全節點請求資料的輕節點\(light node\)不同。

本文將詳細介紹封存節點,並說明其在 Ethereum 中的運作方式。你將了解為何運行封存節點很重要、該使用哪些客戶端,以及如何建置自己的封存節點來查詢歷史區塊鏈資料。

<ImageBlock
  src="https://media.alchemy.com/1704095139-blockchain-network-p2p-nodes.jpeg"
  alt="顯示 peer-to-peer 節點如何在區塊鏈網路上連接與互動的示意圖。"
  width={1600}
  height={1037}
  caption="顯示 peer-to-peer 節點如何在區塊鏈網路上連接與互動的示意圖。"
  priority
/>

## 什麼是 Ethereum 封存節點?

Ethereum 封存節點是一種全節點,具備儲存整個區塊鏈歷史資料的能力,甚至可以追溯到創世區塊\(genesis block\),也就是第一個建立的區塊。我們在[區塊鏈節點指南](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 平均封存節點（archive node）大小歷年成長的圖表。"
  width={1600}
  height={652}
  caption="顯示 Ethereum 平均封存節點（archive node）大小歷年成長的圖表。[來源]"
/>

## 為什麼要使用封存節點?

封存節點提供了存取區塊鏈歷史資訊的入口。若你需要比最近 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 的最低要求。若你只需要提交交易、分析交易記憶池\(mempool\)、監聽智慧合約事件,以及呼叫近期的區塊鏈資訊,全節點就已足夠。

然而,若使用全節點呼叫超過前 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 daemon。深入了解[如何使用 Erigon 運行封存節點](https://github.com/ledgerwatch/erigon)。

#### Nethermind 封存節點

Nethermind 是使用 C\# .NET framework 建置的 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:RAM disk,至少 16-32GB

**CPU:** 4 核心以上的 CPU

**頻寬:** 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) 支援無限次數的封存資料請求,能提供你所需的所有歷史區塊鏈資訊存取權。而且好消息是,你可以*免費*連接到封存節點。

Alchemy [提供不受限制的封存節點存取權](https://www.alchemy.com/blog/more-capacity-lower-prices),即使是 Supernode 免費方案的使用者也不例外。這代表你可以取得過往的鏈上資料,甚至從創世區塊分叉\(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 金鑰](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 封存節點從未如此簡單!
