Paradigm:以太坊狀態增長的挑战與解決方案
原文作者:Storm Slivkoff、Georgios Konstantopoulos
原文編譯:Luffy,Foresight News
以太坊狀態增長及其與 Gas 限制的關系被廣泛誤解。人們普遍認為狀態增長是以太坊的主要擴展瓶頸。然而,關於狀態增長的討論常常因術語不精確和缺乏詳細的定量證據而受阻。
採用數據驅動的方法可以使狀態增長問題變得更加清晰。在本文中,我們利用高分辨率數據集來了解狀態增長的大小和形狀。在這個過程中,我們得出了令人驚訝的結論:現代消費硬件可以維持當前的狀態增長率至少十年。此外,考慮到軟件和硬件的不斷改進,這條跑道可能會無限期地延長。
我們相信,以太坊有一個明確的路线圖: 1)完全消除狀態增長作為擴容瓶頸;2)將 Gas 限制提高到支持全球規模去中心化金融體系的水平。本文系列的目標是开發一種科學方法來理解和制定這一擴展路线圖。
本文是有關以太坊擴容系列文章的第 1 部分,主要介紹狀態增長,第 2 部分是關於歷史增長,第 3 部分是關於狀態訪問,第 4 部分是關於 Gas 限制。
什么是狀態增長?
「狀態增長」一詞通常用來概括任何以太坊擴展瓶頸,即數據大小超過以太坊節點硬件的容量。然而,狀態增長不應該以這種單一的方式來思考。以太坊數據有多種類型,每種類型都與節點的底層硬件組件有獨特的關系。因此,使用精確的術語來解釋每個不同的擴展瓶頸至關重要。
狀態是構建和驗證新以太坊區塊所需的一組數據。狀態由合約字節碼、合約存儲、账戶余額和账戶隨機數組成。歷史是節點從創世區塊同步到最新區塊所需的數據集。歷史由區塊和交易組成。狀態和歷史是不重疊的數據集。從這些定義來看,至少有 3 種不同的現象給節點的硬件帶來了巨大的壓力:
-
狀態增長:新账戶、新合約字節碼、新合約存儲的積累。
-
歷史增長:新區塊和新交易的積累。
-
狀態訪問:用於構建和驗證區塊的一組讀寫操作。
每個瓶頸都與節點的硬件限制有獨特的關系。四個相關性最高的硬件限制是:
-
網絡 IO 是節點為了與對等節點達成穩定共識而必須維持的上傳和下載速度量。
-
存儲大小是節點為了構建、驗證和分發區塊而必須在永久存儲中保存的數據量。
-
內存大小是節點必須在內存中緩存的數據量,以便與區塊鏈的末端保持同步。
-
存儲 IO 是節點為了與區塊鏈末端保持同步而必須執行的每秒讀寫操作量。
這些瓶頸和硬件限制之間的關系如圖 1 所示。
圖 1 :以太坊擴容瓶頸
從圖的頂部开始,每次以太坊執行交易時,該交易使用的所有資源都以 Gas 定價。因此,以太坊的 Gas 限制是一個單維量,它對所有形式的鏈上活動進行速率限制。 Gas 限制的下遊是區塊大小和每個區塊的操作。每個區塊的字節越多,歷史記錄增長得越快。每個區塊的 IO 操作越多,狀態訪問率越大,並且(通常)狀態增長率也越大。
因此,擴展瓶頸與節點的硬件約束有關,如下所示:
-
為了支持大量的狀態增長,節點必須有足夠的存儲和內存空間。如果狀態變得太大,則要么無法容納在存儲中,要么狀態的頻繁訪問部分將無法包含在內存中,從而使得性能降低。
-
為了支持大量的歷史增長,節點必須有足夠的網絡帶寬來共享大量的區塊數據和足夠的存儲容量來存儲該數據。
-
為了支持大量的狀態訪問,節點必須有大量的內存來緩存熱狀態,並有大量的存儲 IO 來支持足夠的讀寫操作。
特別是對於狀態增長而言,主要挑战是確保狀態規模的增長速度不會超過消費者硬件的持續改進。節點內存和存儲是有限的資源,因此它們最終將達到瓶頸,除非狀態停止增長或硬件定期升級。幸運的是,內存和存儲硬件多年來一直在改進。即便如此,對這些改進的准確預測仍不確定,並且不應認為它們的快速增長將無限期地持續下去。
請注意,即將推出的 EIP-4844 引入的數據 blob 將為這些擴展關系帶來一些變化。在 EIP-4844 之後,預計磁盤上累積的歷史記錄會少得多,傳輸大量 Blob 數據時網絡 IO 可能會顯着增加。
在本文中,我們將主要關注狀態大小和狀態增長率,而不是內存大小和狀態訪問模式。我們將在未來的工作中研究其他主題。
以太坊狀態的組成
理解狀態增長的下一步是檢查狀態的總規模以及每個狀態貢獻的大小。目前,以太坊狀態數據量約 245.5 GB。這個數字是使用 reth 節點測量的,但每個節點客戶端的數字大致可以比較,如 表格 所示。账戶、合約字節碼和合約存儲分別佔據狀態的 14.1% 、 4.3% 和 81.7% 。
圖 2 顯示了各類智能合約協議佔用了多少狀態規模。下圖中,每個合約類別的大小表示其存儲槽和字節碼佔用的字節數。
圖 2 :以太坊狀態分布
圖 2 中的數字表示節點客戶端必須在磁盤上存儲的總字節數。這包括索引使用的數據和其他類型的存儲开銷。每個账戶和每個存儲槽的平均存儲大小分別為 133.6 字節和 191.3 字節。
以下是圖 2 中一些最重要的信息:
-
代幣是狀態的最大貢獻者。以太坊狀態的最大貢獻者是 ERC-20 和 ERC-721 代幣,分別佔據狀態的 27.2% 和 21.6% 。代幣之所以佔用如此多的狀態,是因為每個代幣的每個用戶余額必須單獨存儲在自己的 32 字節存儲槽中。因此,以太坊狀態規模的一半與以太坊用戶總數和每個用戶持有的代幣總數成比例。
-
以太坊至少 7.4% 的狀態處於休眠中。以太坊狀態中的一些最大的合約不再活躍。這些協議發布於區塊空間和狀態空間比現在便宜得多的時候,包括遊戲、賭博和詐騙類別中的大多數協議,還有許多不再活躍的 DEX,包括 IDEX、Etherdelta 和 Oasis。這些協議總共構成了以太坊狀態的至少 7.4% 。休眠狀態的真實水平更高,因為它還包括 ERC-20、ERC-721 和其他類別中的長尾項目。
-
L2 跨鏈橋佔據以太坊狀態的不到 2% 。通過利用壓縮、ZK 證明和改進的編碼等技術,L2 交易比主網更有效地利用狀態。盡管 L2 僅佔主網狀態的 2% ,但 L2 每秒的總交易數量比主網多 5 倍。
以太坊狀態增長有多快?
狀態增長最重要的方面是狀態增長率隨時間的變化。這個比率揭示了狀態問題的嚴重性及其變化趨勢。
圖 3 顯示了自 2015 年以太坊成立以來的狀態增長率。這些增長率是通過對每個合約類別中的合約字節碼和合約存儲求和來計算的。
圖 3 :以太坊狀態隨時間的增長
以下是圖 3 一些最重要的信息:
-
目前,狀態每月增長約 2.62 GB,低於每月 5.99 GB 的峯值。通過這些數字預測 5 年內狀態總規模將在 396 GB 到 606 GB 之間。盡管人們可能將當前的增長率描述為每年 12.8% ,但在狀態持續增長的同時,絕對增長率一直在下降,因此簡單的指數增長可能不是一個合適的模型。
-
最近狀態增長的下降主要是因為 NFT 活動的減少。盡管人們可能期望不同類型的網絡活動之間存在一定程度的相關性,但各個狀態貢獻者之間存在令人驚訝的獨立性。例如,盡管過去幾年總狀態增長率有所下降,但自 2020 年以來,ERC-20 狀態增長率實際上每年都在增加。
-
狀態增長達到 2021 年以來的最低水平。這種下降相當令人驚訝,但考慮到狀態主要與新代幣余額的成正比,這是有道理的。如果狀態增長率一直在下降,人們可能會認為以太坊有能力支持更高的 Gas 限制。這可能是事實,但重要的是要記住: 1)在當前的 Gas 定價模型下,沒有什么可以阻止增長率的新一輪飆升, 2)狀態並不是 Gas 限制下遊的唯一瓶頸。
可接受的狀態增長值是多少?
我們現在知道以太坊狀態的 1) 規模、 2) 組成和 3) 增長率。我們如何確定可接受的狀態增長值的範圍?這個問題很復雜,因為它既取決於不可預測的市場力量,也取決於以太坊應該做出哪些權衡的哲學選擇。
讓我們從最簡單的模型开始,假設未來硬件沒有改進,當前的狀態增長水平在普通消費硬件上可持續多久。如圖 3 所示,近年來狀態的年增長一直在 31 GB/ 年到 72 GB/ 年之間。目前,常見的消費類硬件最高存儲容量約為 4 TB ,內存容量約為 64 GB。由此我們可以創建一個簡單的存儲和內存需求預測模型:
-
存儲:節點當前總共需要存儲大約 1 TB 的狀態數據。實際上,這意味着許多節點正在使用大小至少為 2 TB 的磁盤。為簡單起見,讓我們忽略未來的歷史增長,就好像我們處於後 EIP-4444 的世界中一樣。我們可以計算出未來運行時間為:(剩余存儲容量)/(狀態增長率),如 表格 所示。因此,節點存儲硬件可以支持當前的狀態增長速度十多年,而不會耗盡 2 TB 的空間。按照目前的狀態增長水平, 4 TB 足以支持運行近半個世紀。
-
內存:Ethereum-on-arm 用戶報告稱,運行以太坊節點的最小可行內存約為 16 GB。如果我們假設內存需求與狀態大小成比例增長,那么每年 30 GB 到 72 GB 的狀態增長將轉化為每年需要 2 GB - 4.7 GB 的額外內存。因此,按照當前的 Gas 率, 32 GB RAM 應該足夠使用 3 年到 8 年。 64 GB 的 RAM 應該足夠使用 10 年到 23 年。
這是一個帶有許多假設條件的簡化模型。該模型可能的擴展條件包括 1) 歷史增長, 2) 內存需求的非线性擴展, 3) 降低硬件成本, 4) 增加 Gas 限制, 5) 操作碼 Gas 重新定價,以及 6) 未來以太坊架構改進。這些因素中的每一個都可以非线性相互作用並隨着時間的推移而演變。我們將在未來的工作中探索這些模型擴展。
必須強調的是,長期可持續性是一件好事。即使現代硬件可以支持多年的運行,也不應該掉以輕心地縮短可運行時間。任何加速狀態增長的計劃都應該包括一個重要的緩衝區,以應對硬件或軟件環境不可預測的變化。
如何解決狀態增長問題?
為了解決狀態增長問題,人們提出了許多不同的方案。以太坊架構的三項改進非常突出:Rollup、Verkle 嘗試和狀態過期。總而言之,這些構成了解決短期、中期和長期狀態增長問題的綜合路线圖。
短期:Rollup 不能解決狀態增長問題,但它們確實減輕了網絡負擔。如圖 2 和圖 3 所示,Rollup 能夠比主網更有效地使用狀態。將活動轉移到 L2 確實需要在主網上存儲一定量的狀態,以支持用戶退出。然而,L2 交易的狀態足跡遠低於主網上交易的足跡。因此,Rollup 可以更可持續地增加生態系統中的總活動。隨着即將推出的 EIP-4844 ,Rollup 的採用預計將會增長,blob 將使 Rollup 變得更加便宜。
中期:Verkle 嘗試解決驗證器節點的狀態增長問題,但不解決需要構建新交易的節點的問題。Verkle 嘗試是以太坊狀態的新數據結構。它們支持更高效的輕客戶端和「無狀態」節點。這些節點將能夠在不了解現有狀態值的情況下驗證新區塊。這消除了驗證器節點的狀態增長問題。新交易的構建仍然需要存儲和訪問狀態,但這仍然比我們今天的情況更可持續,因為交易構建是一項可以輕松分布在許多機器上的任務。就範圍而言,Verkle 嘗試代表了一項可能需要數年時間才能實施的重大工程。
長期:狀態過期解決了所有節點的狀態增長問題,但需要額外的基礎設施。狀態到期允許節點丟棄狀態的不活動部分,如圖 2 。請注意,術語「狀態休眠」可能是一個更合適的名稱,因為大多數現有提案允許通過證明恢復「過期」狀態。關於過期狀態隨着時間的推移而丟失的擔憂,只要歷史記錄(區塊和交易數據)可用,就可以重建狀態。因此,無論為 EIP-4444 的歷史保存問題开發什么解決方案,也都將解決狀態保存問題。但如果 Verkle 嘗試成功實現其目標,狀態到期可能就不必要了。
狀態增長問題的解決方案還有更多,其他包括狀態租金和分片,但從歷史上看,這些可能對用戶體驗或健全性產生影響。為了在更遙遠的將來實現最終解決方案,可能需要將這些解決方案與其他解決方案結合起來。
總結
盡管狀態增長是擴展以太坊的一個關鍵挑战,但我們相信這是一個可以解決的問題。通過我們對數據的解讀,以太坊可以維持當前的狀態增長水平多年,並為架構升級提供了舒適的緩衝。
我們相信,經驗方法對於設計以太坊的 Gas 限制和引導以太坊走向最終的擴展解決方案至關重要。本文只是實現這一目標的一步。還有其他類型的超越狀態的數據,每種數據都對以太坊節點和以太坊 Gas 限制施加了負擔。我們希望在未來的工作中探索這些其他瓶頸。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
殺》比特幣一度跌破9.6萬、以太坊苦守3300美元,超19萬人爆倉5億美元
比 特幣在剛結束的週末一度觸及 99,588 美元的歷史新高後就開啟震盪下跌,昨日傍晚左右從 98...
WBTC「大插針」閃崩至5200美元,與Coinbase宣布下架有關?
W rapped Bitcoin(WBTC)週末於幣安交易所發生異常閃崩的狀況,在 23 日晚間十...
拆解微策略買比特幣行為和資金來源 = 加強版「Grayscale + Luna」
比 特幣突破 8 萬美元!比特幣突破 9 萬美元!比特幣突破 9.5 萬美元!比特幣突破 9.9...
星球日報
文章數量
7231粉絲數
0