歸檔節點
歸檔節點是一種從不丟棄過去的全節點。一條區塊鏈的歷史是一長串狀態——在第 5,000,000 個區塊時你的帳戶餘額是一個值,到第 6,000,000 個區塊時又是另一個值——而歸檔節點會保存每一個高度上完整重建的狀態,而不只是最新的那一個。可以想像一位圖書館員,他不僅知道今天每本書寫了什麼,還在每次修訂之後都把整座圖書館拍照存檔,因此能精確地讓你看到任何一個書架在過去任何一天的模樣。
這個區別之所以重要,是因為一般的(「修剪過的」)全節點並不會保存這一切。全節點仍會從創世區塊起驗證每一個區塊並持有當前狀態,但為了節省磁碟空間,它會修剪掉舊的中間狀態樹,大致只保留最近約 128 個區塊的歷史狀態,外加跟上鏈頭所需的資料。兩種節點提供的安全性完全相同——它們都各自獨立檢查每一條規則——但修剪節點根本無法回答「這個合約在第 4,000,000 個區塊時的儲存內容是什麼?」,因為它已刪去了能回答此問題的樹節點。歸檔節點則答得出來,因為它保留了每一棵歷史狀態樹。
代價在於儲存空間。在以太坊上,一個修剪過的全節點大約只需數百 GB 到約 1 TB,但歸檔節點(使用 Geth 或 Erigon 之類的用戶端)動輒佔用數 TB,且持續成長,因為它要為每一個區塊都保存完整的歷史狀態樹。因此歸檔節點關乎的不是安全性,而是工具生態所需的資料可得性:區塊鏈瀏覽器、索引器、分析儀表板、稅務軟體,以及任何必須回答任意歷史查詢——例如對舊區塊呼叫 eth_getBalance、執行 debug_traceTransaction、或對過去狀態做 eth_call——的服務,背後都需要一個歸檔節點。
一個常見的誤解是以為「歸檔」代表更可信、或對去中心化更關鍵。其實不然。鏈的安全來自眾多獨立全節點各自重新驗證規則;全世界只需少數幾個歸檔節點來提供歷史查詢即可。現代用戶端(特別是採用扁平鍵值儲存配置的 Erigon)已讓歸檔節點遠比早期動輒數 TB 的 Geth 歸檔更小、更快,這也是為何如今的歷史資料遠比過去容易取得。
某 DeFi 儀表板想繪製某使用者去年每天結束時在 Aave 的負債曲線。它無法向修剪節點查詢,因為該節點已刪去那些舊狀態。於是它對歸檔節點呼叫 eth_call,並把「block」參數設為每一天的最後一個區塊;歸檔節點會在那個確切的歷史狀態上重放合約,回傳結果。
歸檔與全節點的差別在於保留多少歷史,而非安全性:修剪過的全節點同樣嚴格地驗證每個區塊,真正讓網路去中心化的正是它。