以太坊的儲存需求不斷增長,帶來了巨大挑戰,本文爬梳問題背後的原因,並提出解決方案、未來展望。本文源自 EthStorage 所著文章,由深潮整理、編譯及撰稿。
(前情提要:一文讀懂EthStorage,會成為以太坊的去中心化儲存中心嗎?)
(背景補充:除了Celestia,模組化區塊鏈還有哪些「潛力股」?)
背景
2023 年 10 月 22 日,著名的 Go-Ethereum(Geth)開發負責人 Péter Szilágyi 在 Twitter 上表達了他的深切擔憂。他指出,雖然 Geth 客戶端保留了所有歷史資料,但 Nethermind 和 Besu 等其他以太坊客戶端可以配置刪除某些歷史以太坊資料(例如歷史區塊和塊頭)。這使得所有客戶端的行為不一致,並對 Geth 不公平。這引發了圍繞以太坊路線圖中以太坊儲存問題的激烈討論和辯論。
儲存的挑戰
為什麼 Nethermind 和 Besu 選擇停止儲存歷史資料?這一決定背後的問題是什麼?從我們的角度來看,有兩個主要原因:
- 以太坊客戶端的儲存要求變得越來越高。
- 儲存以太坊歷史資料沒有任何協議內的激勵或懲罰。
第一個原因源於執行以太坊客戶端不斷上升的儲存需求。為了深入瞭解具體需求,下面的餅圖展示了截至 2023 年 12 月 13 日第 18,779,761 塊時一個新 Geth 節點的儲存分佈情況。
如圖所示:
- 總儲存大小:925.39 GB
- 歷史資料(區塊 / 交易收據):約 628.69 GB
- Merkle Patricia Trie (MPT) 中的狀態資料:約 269.74 GB
第二個原因是缺乏儲存歷史區塊的協議內激勵或懲罰。雖然該協議要求節點儲存所有歷史資料,但卻未能提供任何機制來鼓勵儲存或懲罰違規的行為。節點儲存和共享歷史資料變得純粹出於利他主義,客戶端執行者可以自由地刪除或修改所有歷史資料,而不會受到任何懲罰。相比之下,Validator 節點必須在本地維護並更新完整的狀態,以防止因提議 / 投票支援無效區塊而導致的 Slash。
因此,當儲存成本成為節點的重大負擔時,一些節點運營商選擇刪除歷史資料就不足為奇。在沒有歷史資料的情況下,節點客戶端可以顯著降低儲存成本,將其從大約 1TB 減少到 300GB 左右。
隨著即將到來的以太坊資料可用性(DA)升級,儲存挑戰將會加劇。全面擴容以太坊 DA 的道路始於 DenCun 升級中的 EIP-4844,它引入了一個固定大小的二進位制大物件 (BLOB) ,和一個被稱為 blobGasPrice 的獨立費用模型。每個 BLOB 設定為 128KB,EIP-4844 允許每個區塊最多包含 6 個 BLOB。為了對資料吞吐量進行擴容,以太坊計劃採用 1D Reed-Solomon 程式碼,最初允許每個區塊有 32 個 BLOB,並在完全擴容時達到每個區塊 256 個 BLOB。
如果以太坊 DA 以全容量執行(每個塊 256 個 BLOB),以太坊 DA 網路預計一年將接收大約 80TB 的 DA 資料,該數位遠遠超出大多數節點的儲存能力。
以太坊儲存路線圖及其後果
不斷上升的儲存成本引起了以太坊生態研究人員的關注。為了解決這個問題並確保所有客戶端的一致性,研究人員正在制定一些提案來明確刪除歷史的儲存。兩個主要提案是:
- EIP-4444:限制執行客戶端中的歷史資料:該提案允許客戶端刪除超過一年的歷史區塊。假設平均區塊大小為 100K,歷史塊資料上限約為 250GB(100K * (3600 * 24 * 365) / 12,假設區塊時間 = 12 秒)。
- EIP-4844:分片 BLOB 交易:EIP-4844 丟棄超過 18 天的 BLOB。 與 EIP-4444 相比,這是一種更激進的方法,將歷史 BLOB 大小限制在 100GB 左右((18 * 3600 * 24) * 128K * 6 / 12,假設區塊時間 = 12 秒)。
刪除所有客戶端的歷史資料會產生什麼後果? 主要的一個問題是新節點無法通過「full sync」模式來同步到最新狀態,「full sync」是一種將交易從創世區塊執行到最新區塊的同步。相應地,我們必須採取「snap sync」或「state sync」來直接同步來自以太坊節點的最新狀態。這種方法已在 Geth 中實現,並作為默認同步執行。
同樣地,這個後果也適用於所有 L2,即 L2 的新節點無法通過重放 L2 創世到最新的 L2 區塊,來完全同步以太坊 L2 創世的最新狀態。此外,由於 L1 節點不維護 L2 狀態,L2 的「snap sync」方法無法從 L1 中派生出最新的 L2 狀態,這違反了繼承以太坊安全保證的重要 L2 假設。預計的解決方案將依賴 Infura / Etherscan / L2 專案本身等第三方服務來儲存歷史 L2 資料或狀態副本。這是通過協議外、間接激勵實現的中心化的解決方案。
我們要探討的核心問題是:
- 我們能否在儲存和訪問方面找到更好的去中心化解決方案?
- 是否有可能通過直接激勵機制的、與以太坊一致的(例如,在 L1 合約之上)的解決方案?
- 在這一切的基礎上,我們是否可以為以太坊儲存路線提供一種完全去中心化的、協議內直接激勵的解決方案?
解決方案 1:以太坊 Portal 網路
以太坊 Portal 網路是一個輕量級、去中心化的訪問網路,用於連線到以太坊協議。它提供例如 eth_call,eth_getBlockByNumber 等以太坊 JSON-RPC 介面,它將 JSON-RPC 請求轉換為對分散式 hash 表(DHT) 的 P2P 請求,類似於 IPFS 網路。與允許儲存任何資料型別且容易受到垃圾資料影響的 IPFS 不同,Portal P2P 網路專門託管以太坊資料,如歷史區塊頭和區塊交易資料。這是通過 Portal 網路內建的輕客戶端驗證技術來實現的。
Portal 網路的一個重要特性是其輕量級執行設計以及與資源受限裝置的相容性。它可以執行在具有幾兆儲存空間和低記憶體的節點之上,從而促進去中心化。即使是手機或 Raspberry Pi 裝置也有可能加入網路並有為以太坊資料的可用性做出貢獻。
Portal 網路的開發與以太坊客戶端多樣性理念相一致,客戶端採用 Rust、JavaScript 和 Nim 編寫。信標網路和歷史網路已可供使用,而狀態網路正在積極開發中。值得注意的是,Portal 網路並不為資料儲存提供直接激勵——網路中的所有節點都是利他的方式執行的。
解決方案 2:EthStorage 網路
EthStorage 網路是一個去中心化的激勵儲存網路,專門用於儲存 EIP-4844 BLOB,並獲得 ESP 專案的資助。
- 最小信任:與需要中心化資料橋的現有解決方案不同,EthStorage 依賴於以太坊的共識和無需許可的 EthStorage 儲存節點的 1/m 信任模型。 儲存 BLOB 的過程是這樣的:使用者簽署一個攜帶 BLOB 的交易,呼叫儲存合約的 put(key, blob_idx) 方法。然後,儲存合約將記錄 BLOB hash在鏈上。之後儲存提供商將直接從以太坊 DA 網路下載並儲存 BLOB,從而繞過資料橋問題。
- 儲存成本與激勵相一致:當呼叫 put() 方法時,交易必須傳送儲存費(通過 msg.value)並存入合約中。在成功鏈下儲存節點提交並驗證儲存證明後,這個儲存費用將隨著時間的推移逐漸分配給儲存節點。與現有的向出快者 (proposer) 支付一次性儲存費的以太坊儲存費模型相比,隨著時間的推移支付的儲存費遵循貼現現金流模型——假設隨著時間的推移,儲存成本將相對於 ETH 價格而降低。EthStorage 引入的這一重大創新使得費用和儲存節點的儲存貢獻保持一致。
- 儲存證明:儲存證明是受到資料可用性抽樣的啟發,而 EthStorage 中的取樣是針對一段時間內的儲存的 BLOB。為了有效地驗證鏈上取樣,EthStorage 充分利用了智慧合約和最新的 SNARK 技術發展。
- 無許可操作:EthStorage 中的任何儲存節點只要儲存資料並定期在鏈上提交儲存證明,都可以獲得報酬。
從模組化區塊鏈的角度來看,EthStorage 充當以太坊儲存 L2,但它收取的是儲存費而不是交易費。通過在鏈上索引 BLOB hash,EthStorage 是一個以太坊模組化儲存層,提升儲存可擴展套件性及降低成本(目標約為 1000 倍)。
在開發方面,EthStorage 已經與以太坊 Sepolia 測試網上的 EIP-4844 整合。我們已對 EthStorage 和以太坊 Sepolia 測試網進行壓力測試,包括將大約數百 GB 的 BLOB 寫入 EthStorage。超過 100 名社群參與者加入網路並成功證明了他們的本地儲存。
EthStorage 網路的主要優勢在於在以太坊之上提供去中心化的直接激勵——就我們目前的知識而言,這是一項開創性的功能。然而,該網路的侷限性在於它是專門為固定大小的 BLOB 而設計的。
展望未來
儘管以太坊儲存還未受到主要關注,但其在以太坊生態系統中具有重要意義。隨著以太坊網路的快速增長,以太坊資料的儲存和可訪問性成為關鍵挑戰。Portal 網路和 EthStorage 網路還處於早期階段,還有很多重要的長期的發展方向需要關注:
- 去中心化低延遲訪問的以太坊狀態資料網路。以去中心化且可驗證的方式訪問以太坊狀態是一項關鍵但具有挑戰性的任務。使用傳統的 DHT 網路模型,查詢帳戶資訊通常需要對儲存在不同 P2P 節點中的內部 trie 節點進行多次查詢。這往往會導致相當長時間的延遲。如何利用狀態樹的結構來加速訪問是關鍵所在。以太坊 Portal 網路即將推出的狀態網路,正是旨在解決這個問題。
- Portal 網路與 EthStorage 網路的整合:Portal 網路可以無縫擴展套件以支援 BLOB 資料。EthStorage 團隊已部分實現了這個功能。下一步進展,是將這些網路統一起來,提供一個去中心化 JSON-RPC 網路,能夠通過合約來對 BLOBs 可程式設計訪問。通過將合約中的應用邏輯與 EthStorage 提供的規模化 BLOB 儲存相結合,我們可以在以太坊上啟用新的 dApps,例如動態的去中心化網站(例如去中心化的 Twitter/YouTube/Wikipedia 等)。
- 瀏覽器的去中心化訪問:與訪問 IPFS 網路中的資料的 ipfs:// 協議類似,web3 行業需要一個以太坊原生訪問協議的來支援瀏覽器直接訪問,以釋放以太坊豐富資料的巨大潛力。這些資料涵蓋了廣泛的領域,從代幣所有權和帳戶餘額到 NFT 影象和動態去中心化網站,所有這些都得益於智慧合約和未來以太坊儲存的功能所實現。在這個領域,ERC-4804/6860 定義的 web3:// 協議目前正在積極開發和推廣,以實現這一目標。
- 動態大小資料的高階儲存證明:除了固定 BLOB 之外,探索高階儲存證明對於解決動態大小資料(例如歷史區塊甚至狀態物件等)也勢在必行。開發複雜的演算法可以增強儲存解決方案的適應性。
在我們的追求中,我們希望通過這些努力,共同為以太坊路線圖做出貢獻,為未來以太坊生態系統的去中心化儲存解決方案奠定基礎。