WEEX 唯客博客, 原文標題:How to Raise the Gas Limit, Part 2: History Growth 原文作者:Storm Slivkoff、Georgios Konstantopoulos 原文編譯:Luffy,Foresight News 歷史增長( History growth )是目前以太坊擴容的最大瓶頸。出乎意料的是,歷史增長已經成為比狀態增長更大的問題。幾年之內,歷史數據將超過許多以太坊節點的存儲容量。 好消息是: 歷史增長是一個比狀態增長更容易解決的問題。 解決方案已在積極開發中。 解決歷史增長將緩解狀態增長問題。 在這篇文章中,我們將繼續研究第 1 部分中的以太坊擴容問題,現在將注意力從狀態增長轉向歷史增長。使用精細的數據集,我們的目標是 1) 從技術上理解以太坊的擴展瓶頸,以及 2) 幫助圍繞以太坊 Gas 限制的最優解展開討論。 什麼是歷史增長? 歷史是以太坊在其整個生命周期內執行的所有區塊和交易的集合,它是從創世區塊到當前區塊的所有數據。歷史增長是隨著時間的推移新區塊和新交易的積累。 圖 1 顯示了歷史增長與各種協議指標和以太坊節點硬體約束之間的關係。與狀態增長相比,歷史增長受到一組不同的硬體約束限制。歷史增長給網路 IO 帶來壓力,因為新的區塊和交易必須在整個網路中傳輸。歷史增長還會給節點的存儲空間帶來壓力,因為每個以太坊節點都會存儲完整的歷史記錄副本。如果歷史增長速度足夠快以致於超出這些硬體限制,則節點將不再能夠與其對等節點達成穩定的共識。有關狀態增長和其他擴容瓶頸的概述,請參閱本系列文章的第 1 部分。 圖 1:以太坊擴容瓶頸 直到最近,每個節點的大部分網路吞吐量都用於傳輸歷史記錄(例如新區塊和交易)。隨著 Dencun 硬分叉中引入 blob ,這種情況發生了變化。 blob 現在佔據了節點網路活動的很大一部分。但是, blob 不被視為歷史記錄的一部分,因為 1) 它們只由節點存儲 2 周,然後被丟棄,2) 它們不需要重複以太坊創世以來的數據。由於 (1), blob 不會顯著增加每個以太坊節點的存儲負擔。我們將在本文的後面部分討論 blob 。 在本文中,我們將重點討論歷史增長,並討論歷史與狀態之間的關係。由於狀態增長和歷史增長具有一些重疊的硬體約束,因此它們是相關的問題,解決一個問題可以幫助解決另一個問題。 歷史增長有多快? 圖 2 顯示了自以太坊創世以來的歷史增長率。每條垂直線代表一個月的增長。 y 軸表示該月歷史增長的千兆位元組數。交易按其「目標地址」分類,並使用 RLP ( https :// ethereum . org / en / developers / docs / data – structures – and – en coding/ rlp /)位元組表示大小。無法輕易識別的合約被歸類為「未知」。 「其他」類別包括基礎設施和遊戲等一系列小類別。 圖 2:以太坊歷史增長率隨時間變化 上述圖表中的幾個關鍵要點: 歷史增長速度比狀態增長快 6 到 8 倍:歷史增長速度最近達到峰值 36.0 GiB / 月,目前為 19.3 GiB / 月。狀態增長速度峰值約 6.0 GiB / 月,目前為 2.5 GiB / 月。本文後面將介紹歷史與狀態在增長和累計大小方面的比較。 在 Decun 之前,歷史增長率一直在加速:雖然狀態多年來一直呈大致線性增長(參見第 1 部分),但歷史卻呈超線性增長。考慮到線性增長的增長率會導致整體規模呈二次方增長,因此超線性增長的增長率會導致整體規模超過二次方增長。這種加速在 Dencun 之後突然停止。這是以太坊首次經歷歷史增長率的大幅下降。 近期歷史增長的大部分來自 Rollup :每個 L2 都會將其交易副本發布回主網。這生成了大量歷史記錄,並導致 Rollup 成為過去一年歷史增長的最重要貢獻者。然而, Dencun 允許 L2 使用 blob 而不是歷史記錄發布其交易數據,因此 Rollup 不再生成大部分以太坊歷史記錄。我們將在本文後面更詳細地介紹 Rollup 。 以太坊歷史增長最大的貢獻者是誰? 不同合約類別生成的歷史數量揭示了以太坊的使用模式如何隨著時間的推移而演變。圖 3 顯示了各種合約類別的相對貢獻。這是與圖 2 相同的數據進行了標準化。 圖 3:不同合約類別對歷史增長的貢獻 這些數據揭示了以太坊使用模式的四個不同時期: 早期(紫色):以太坊的最初幾年幾乎沒有鏈上活動。這些早期合約中,大多數現在都很難識別,在圖表中標記為「未知」。 ERC -20 時代(綠色): ERC -20 標準於 2015 年底最終確定,但直到 2017 年和 2018 年才獲得顯著發展。 ERC -20 合約在 2019 年成為最大的歷史增長來源。 DEX / DeFi 時代(棕色): DEX 和 DeFi 合約早在 2016 年就已出現在鏈上,並於 2017 年開始受到關注。但直到 2020 年 DeFi 夏季,它們才成為歷史增長的最大類別。 DeFi 和 DEX 合約在 2021 年和 2022 年的部分時間佔據了歷史增長的 50% 以上。 Rollup 時代(灰色): 2023 年初, L2 Rollup 開始執行比主網更多的交易。在 Dencun 之前的幾個月里,它們生成了大約 2/3 的以太坊歷史記錄。 每個時代都代表著比之前更複雜的以太坊使用模式。隨著時間的推移,複雜性可以看作是以太坊擴展的一種形式,它無法通過每秒交易量等簡單指標來衡量。 在最近的數據月份(2024 年 4 月)中, Rollup 不再產生大部分歷史記錄。目前尚不清楚未來的歷史記錄是否源自 DEX 和 DeFi ,或者是否會出現一些新的使用模式。 那 blob 又如何呢? Dencun 硬分叉引入了 blob ,顯著改變了歷史增長動態,它允許 Rollup 使用廉價的 blob 而不是歷史記錄來發布數據。圖 4 放大了 Dencun 升級前後的歷史增長率。該圖表與圖 2 類似,只是每條垂直線代表一天而不是一個月。 圖 4: Dencun 對歷史增長的影響 從該圖表中我們可以得出幾個關鍵結論: 自 Dencun 以來, rollup 的歷史增長下降了約 2/3:大多數 rollup 已從 call data 轉換為 blob ,這大大減少了它們生成的歷史記錄量。但是,截至 2024 年 4 月,仍有一些 rollup 尚未從 call data 轉換為 blob 。 自 Dencun 以來,總歷史增長下降了約 1/3: Dencun 僅降低了 rollup 的歷史增長。其他合約類別的歷史增長略有增加。即使在 Dencun 之後,歷史增長仍然是狀態增長的 8 倍(詳情請參閱下一節)。 儘管 blob 已經降低了歷史增長速度,但它們仍然是以太坊的一項新特性。目前尚不清楚在 blob 存在的情況下,歷史增長速度會穩定在什麼水平。 多快的歷史增長是可接受的? 提高 Gas 上限將增加歷史增長率。因此,提高 Gas 上限的提案(例如 Pump the Gas)必須考慮歷史增長與每個節點硬體瓶頸之間的關係。 要確定可接受的歷史增長率,首先要了解當前節點硬體在網路和存儲方面能夠維持多長時間。聯網硬體可能可以無限期地維持現狀,因為在增加 Gas 限制之前,歷史增長率不太可能回到 Dencun 之前的峰值。然而,歷史的存儲負擔會隨著時間的推移不斷增加。在當前的存儲策略下,每個節點的存儲硬碟最終都會被歷史記錄填滿,這是不可避免的。 圖 5 顯示了以太坊節點隨時間變化的存儲負擔,並預測了未來 3 年存儲負擔的增長情況。預測參照 2024 年 4 月的增長率。隨著未來使用模式或 Gas 限制的變化,該增長率可能會上升或下降。 圖 5:歷史記錄、狀態和全節點存儲負擔的大小 從該圖中我們可以得出幾個關鍵結論: 歷史記錄佔用的存儲空間大約是狀態的 3 倍。這種差異還會隨著時間的推移而增大,因為歷史增長速度大約是狀態的 8 倍。 1.8 TiB 是臨界閾值,許多節點將被迫升級其存儲硬碟。 2 TB 是常見的存儲硬碟大小,僅提供 1.8 TiB 的可用空間。請注意, TB (1 萬億位元組)與 TiB (= 1024 ^ 4 位元組)是不同的單位。對於許多節點運營商來說,「真正的」臨界閾值甚至更低,因為合併后驗證器必須與執行客戶端一起運行共識客戶端。 臨界閾值將在 2 到 3 年內達到。提高任何數量的 Gas 限制都會相應加快這一時間的到來。達到這一閾值將給節點運營商帶來不小的維護負擔,並需要購買額外的硬體(例如 300 美元的 NVME 驅動器)。 與狀態數據不同,歷史數據是僅附加的,訪問頻率要低得多。因此,理論上可以將歷史數據與狀態數據分開存儲在更便宜的存儲介質上。這可以通過 Geth 等一些客戶端來實現。 除了存儲容量之外,網路 IO 是歷史增長的另一個主要限制。與存儲容量不同,網路 IO 限制不會在短期內給節點帶來問題,但這些限制對於未來增加 Gas 限制將變得很重要。 要了解典型以太坊節點的網路容量可以支持多少歷史增長,必須知道歷史增長與各種網路健康指標之間的關係,例如重組率、時隙未命中、最終未命中、證明未命中、同步委員會未命中和區塊提交延遲。這些指標的分析超出了本文的範圍,但可以在先前對共識層健康狀況的調查中找到更多信息。此外,以太坊基金會的 Xatu 項目一直在構建公共數據集,以加快此類分析。 如何解決歷史增長問題? 歷史增長是一個比狀態增長更容易解決的問題。它幾乎可以完全由候選提案 EIP -4444 解決。這項 EIP 將每個節點從保存整個以太坊歷史數據更改為僅保存一年的歷史數據。實施 EIP -4444 后,數據存儲將不再是以太坊擴容的瓶頸,從長遠來看 Gas 限制增加也不在被約束。 EIP -4444 對於網路的長期可持續性是必要的,否則歷史增長速度會很快,需要定期更新網路節點的硬體。 圖 6 顯示了 EIP -4444 在未來 3 年內對每個節點的存儲負擔的影響。這與圖 4 相同,但增加了較淺的線條,表示 EIP -4444 實施后的存儲負擔。 圖 6: EIP-4444 對以太坊節點存儲負擔的影響 從該圖中可以看出一些關鍵結論: EIP -4444 將使當前的存儲負擔減半。存儲負擔將從 1.2 TiB 降至 633 GiB 。 EIP -4444 將穩定歷史存儲負擔。假設歷史增長率恆定,則歷史數據將以生成的速率被丟棄。 在 EIP -4444 之後,節點存儲負擔需要很多年才能達到今天的水平。這是因為狀態增長將是增加存儲負擔的唯一因素,而狀態的增長速度比歷史增長慢。 在實施 EIP -4444 后,歷史增長仍將帶來一定程度的存儲負擔,因為節點將存儲一年的歷史記錄。但是,即使以太坊達到全球規模,這個負擔也不難解決。一旦歷史記錄保存方法被證明是可靠的, EIP -4444 的一年到期時間可能會縮短到幾個月、幾周甚至更短。 如何保存以太坊的歷史記錄? EIP -4444 提出了一個問題:如果歷史記錄不由以太坊節點自己保存,那麼它應該如何保存呢?歷史記錄在以太坊的驗證、核算和分析中起著核心作用,因此保存歷史記錄至關重要。幸運的是,歷史記錄保存是一個簡單的問題,只需要 1/ n 誠實的數據提供者。這與需要 1/3 到 2/3 的參與者誠實的狀態共識問題形成鮮明對比。節點操作員可以通過 1) 重放創世區塊以來的所有交易和 2) 檢查這些交易是否重現與當前區塊鏈端具有相同的狀態根來驗證歷史數據集的真實性。 保存歷史記錄的方法有很多種。 Torrent s / P 2 P : Torrent s 是最簡單、最可靠的方法。以太坊節點可以定期打包部分歷史記錄並將其作為公共 Torrent 文件共享。例如,一個節點可能每 100,000 個區塊創建一個新的歷史 Torrent 文件。像 erigon 這樣的節點客戶端已經在某種程度上以非標準化的方式執行了此過程。為了標準化此過程,所有節點客戶端都必須使用相同的數據格式、相同的參數和相同的 P 2 P 網路。節點將能夠根據其存儲和帶寬能力選擇是否參與此網路。 Torrent s 的優勢在於使用已經得到大量數據工具支持的高 lindy 開放標準。 Portal Network:Portal Network 是專為託管以太坊數據而設計的新網路。這是一種類似於 Torrent 的方法,同時還提供了一些額外的功能,使數據驗證更加容易。Portal Network 的優勢在於,這些額外的驗證層為輕客戶端提供了實用程序,可以有效地驗證和查詢共享數據集。 雲主機: AWS 的 S3 或 Cloudflare 的 R2 等雲存儲服務為保存歷史記錄提供了一種廉價且高性能的選擇。然而,這種方法帶來了更多的法律風險和業務運營風險,因為不能保證這些雲服務始終願意並能夠託管加密貨幣數據。 其餘的實施挑戰更多是社會挑戰而非技術挑戰。以太坊社區需要協調具體的實施細節,以便將它們直接集成到每個節點客戶端中。特別是,從創世區塊開始執行完全同步(而不是快照同步)將需要從歷史記錄提供商而不是以太坊節點檢索歷史記錄。這些更改在技術上不需要硬分叉,因此它們可以比以太坊的下一個硬分叉 Pectra 更早實現。 所有這些歷史保存方法也可以由 L2 用來保存他們發布到主網的 blob 數據。與歷史保存相比, blob 保存 1) 更困難,因為總數據量大得多;2) 不太重要,因為 blob 對於重放主網歷史不是必需的。但是,對於每個 L2 重放自己的歷史來說, blob 保存仍然是必要的。因此,某種形式的 blob 保存對整個以太坊生態系統都很重要。此外,如果 L2 開發出強大的 blob 存儲基礎設施,它們也可能能夠輕鬆存儲 L1 歷史數據。 直接比較 EIP -4444 之前和之後各種節點配置存儲的數據集會很有幫助。圖 7 顯示了不同以太坊節點類型的存儲負擔。狀態數據是賬戶和合約,歷史數據是區塊和交易,存檔數據是一組可選數據索引。此表中的位元組數基於最近的 reth 快照,但其他節點客戶端的數字應該大致相當。 圖 7:不同以太坊節點類型的存儲負擔 換句話說, 存檔節點存儲狀態數據和歷史數據以及存檔數據。當有人希望能夠輕鬆查詢歷史鏈狀態時,可以使用存檔節點。 全節點僅存儲歷史數據和狀態數據。當今大多數節點都是全節點。全節點的存儲負擔大約是存檔節點的一半。 EIP -4444 之後的全節點僅存儲狀態數據和最近一年的歷史數據。這將節點的存儲負擔從 1.2 TiB 減少到 633 GiB ,並使歷史數據的存儲空間達到穩定狀態值。 無狀態節點,又稱「輕節點」,不存儲任何數據集,能夠立即在鏈的末端進行驗證。一旦 Verkle 嘗試或其他狀態承諾方案添加到以太坊,這種節點類型就成為可能。 最後,還有一些額外的 EIP 可以限制歷史增長率,而不僅僅是適應當前增長率。這在短期內有助於保持在網路 IO 約束內,在長期內有助於保持在存儲約束之內。儘管 EIP -4444 對於網路的長期可持續性仍然是必要的,但這些其他 EIP 將有助於以太坊在未來更有效地擴展: EIP -7623:重新定價 call data ,使某些 call data 過多的交易更加昂貴。使這些使用模式更加昂貴將迫使其中一些從 call data 轉換為 blob 。這將降低歷史增長率。 EIP -4488:對每個區塊中可包含的 call data 總量施加限制。這將對歷史記錄的增長速度施加更嚴格的限制。 這些 EIP 比 EIP -4444 更容易實現,因此它們可能作為 EIP -4444 投入生產之前的短期權宜之計。 結束語 本文的目的是通過數據來理解 1) 歷史增長的工作原理和 2) 解決該問題的方法。本文中的許多數據難以通過傳統的方式獲取,因此我們希望公開這些數據為歷史增長問題提供一些新見解。 歷史增長作為以太坊擴容的瓶頸尚未得到足夠的重視。即使不增加 Gas 上限,以太坊當前保存歷史記錄的慣例也會迫使許多節點在幾年內升級硬體。幸運的是,這不是一個難以解決的問題。 EIP -4444 中已經有一個明確的解決方案。我們認為應該加快實施此 EIP ,以便為未來的 Gas 上限增加留出空間。 WEEX唯客交易所官網:weex.com
Paradigm:詳解以太坊歷史增長問題及其解決方案
Previous: 解讀 OP Stack 最新路線:應用需求倒逼技術變革