跳至內容
0%

Archive Node:你需要知道的一切

Alchemy team headshot

作者 Alchemy

發布於 2022年6月21日閱讀時間 2 分鐘

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

雖然節點都能與區塊鏈上的其他對等節點互動,但它們的能力和用途各不相同。例如本文將討論的封存節點(archive node),能夠儲存完整的區塊鏈歷史資料並依需求提供服務。這與只儲存近期區塊鏈狀態的完整節點(full node),以及主要向完整節點請求資料的輕節點(light 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 平均全節點(archive node)大小歷年成長的圖表。
顯示 Ethereum 平均全節點(archive node)大小歷年成長的圖表。〔來源〕

為什麼要使用封存節點?

封存節點提供了存取區塊鏈歷史資訊的管道。如果你需要的資料比最近 128 個區塊(完整節點可提供的範圍)更舊,封存節點就非常有用。

以下是 Ethereum 封存節點的兩個使用情境:

1. 稽核區塊鏈歷史資訊

如果你正在建置一項用於稽核區塊鏈或蒐集特定歷史資料的服務,封存節點是理想的選擇。例如建置區塊鏈瀏覽器(Etherscan)、鏈上分析工具(Dune Analytics),或是加密貨幣錢包,都是很好的使用案例。

這些服務都仰賴封存節點來查詢並提供舊的狀態資料給使用者。例如,你可以透過 Etherscan 取得 Ethereum 上第一個挖出區塊的資訊。同樣地,Dune Analytics 也能顯示自成立以來 Uniswap 的總使用者數。

2. dapp 開發

建置 dApp 時,運行自己的節點通常是最基本的要求。如果你只需要提交交易、分析交易記憶池(mempool)、監聽智能合約事件,以及查詢近期區塊鏈資訊,完整節點就足夠了。

然而,若使用完整節點查詢超過最近 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 daemon。深入了解如何使用 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)

RAM:至少 16-32GB 的 RAM disk

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 開發者產品與工具,並提供資源、社群與卓越的支援。