V神發布以太坊狀態到期和無狀態路線圖,同步實施以解決狀態暴增問題

原作者:Vitalik Buterin,《狀態到期和無狀態路線圖》(A state expiry and statelessness roadmap)

以太坊的狀態規模正在迅速增長。目前僅狀態大小大約有 35 GB,如果包括所有 Merkle 證明在內,則超過 100 GB,並且每年大約增加一半。狀態存儲也是以太坊經濟學的一個弱點:它也是唯一一種機制,使得參與者支付一次就可變成節點永遠的負擔。為了保持以太坊的可擴展性和可持續性,我們需要一些解決方案。

有兩種途徑的解決方案,並且已經存在很長時間:弱無狀態和狀態到期:

  • 狀態到期:從狀態中移除最近沒有被訪問過的狀態(例如:上一次訪問還是去年),並需要見證人(witnesses)才能恢復過期狀態。這會將每個人需要存儲的狀態減少到大約 20-50 GB。
  • 弱無狀態:只需要區塊提議者存儲狀態,並允許所有其他節點無狀態地驗證區塊。在實踐中實現這一點需要切換到 Verkle 樹以減少見證人的規模。

本文檔描述了同時實施這兩個想法的多階段提案。 事實證明,這比先後連續執行這兩個解決方案要容易得多。 沒有 Verkle 樹的狀態到期需要非常大的見證大小來證明舊狀態,而切換到沒有狀態到期的 Verkle 樹需要就地轉換程序(例如 EIP 2584‌),這幾乎與僅實現狀態到期一樣複雜。 然而,如果同時進行,這兩項改革解決了彼此面對的挑戰:狀態到期涉及每年創建一個新的狀態樹,允許 Verkle 樹隨着時間的推移逐步引入而無需就地轉換,而 Verkle 樹解決了 見證人規模的問題。

相關鏈接:狀態到期和無狀態思想的發展歷史

  • 無狀態客戶端概念,最初的 ethresear.ch 帖子(2017 年):https://ethresear.ch/t/the-stateless-client-concept/172‌(另見 EthHub)
  • 狀態租金(狀態到期的前身),2015 年原始提案:https://github.com/ethereum/EIPs/issues/35‌
  • ReGenesis(Alexey Akhunov 的提議,可以說是狀態到期 +歷史到期的一種形式):https://medium.com/@mandrigin/regenesis-explained-97540f457807‌
  • Verkle 樹:https://notes.ethereum.org/_N1mutVERDKtqGIEYc-Flw‌
  • 關於邊界見證大小的演示(Youtube):https://www.youtube.com/watch?v=qQpvkxKso2E‌
  • 狀態大小管理理論(2021 年 2 月):https://hackmd.io/@vbuterin/state_size_management‌
  • 復活衝突最小化狀態邊界:https://ethresear.ch/t/resurrection-conflict-minimized-state-bounding-take-2/8739‌
  • 無狀態和狀態到期的一些路徑:https://hackmd.io/@vbuterin/state_expiry_paths

回顧:狀態到期是如何工作的?

這是對此處提議的機制以及本文檔中提議的內容的描述。 核心思想是每個時期都會有一個狀態樹(如:1 個時期 ~= 1 年),當新時期開始時,會為該時期初始化一個空狀態樹,任何狀態更新都會進入該樹。 在一段時間內發生的所有寫入都進入最新的樹(因此新樹和舊樹可能存儲相同的信息甚至相互衝突;新樹總是優先)。

V神發布以太坊狀態到期和無狀態路線圖,同步實施以解決狀態暴增問題

請注意,這些大約一年的狀態到期時間在歷史上有時被稱為“時期(epochs)”,但我正在切換到“周期(period)”一詞以避免與信標鏈時期混淆。

保持兩個關鍵原則:

  • 只能修改最近的樹(即當前周期對應的樹)。 所有舊樹都不再可修改; 舊樹中的對象只能通過在新樹中創建它們的副本來修改,並且這些副本取代了舊副本。
  • 全節點(包括區塊提議者)預計只持有最新的兩個樹,因此只有最新的兩個樹中的對象才能在沒有見證人的情況下被讀取。 閱讀較舊的樹則需要提供見證人。

“見證(witness)”是一個簡短的證明,它證明一個值或一組值位於樹中的某個位置,可以由只有樹根的人進行驗證。 例如,可以做一個見證,證明賬戶 0x124f…89ab 的存儲槽 123 在某個狀態下包含值 50,任何擁有該狀態樹根的人都可以驗證該證明。

狀態到期建立了一種混合狀態機制:共識節點需要存儲最近訪問或修改的狀態,但可以使用基於見證的無狀態客戶端方法來驗證較舊的狀態。 也就是說,可以維護一個“歸檔節點”,它甚至可以存儲歷史狀態樹,或者是一個完全無狀態的節點,它使用見證人來驗證甚至最近的狀態。 然而,gas 成本結構和默認網絡格式是圍繞節點存儲最新的兩個狀態樹的假設構建的。

路線圖

這種轉換路線圖分階段實施。這些階段包括:

  • 周期 1 硬分叉:我們從周期 1 開始實施一個硬分叉(之前的所有內容都是周期 0)。在此分叉之後,將有兩個狀態樹:十六進制 Patricia 樹(已凍結且不再可編輯)和一個新的 Verkle 樹(包含對狀態的所有新編輯/添加,以及已訪問的舊狀態的副本)

原始 EIP:https://notes.ethereum.org/@vbuterin/verkle_tree_eip

  • 地址周期擴展:地址從 20 字節擴展到 32 字節,新的地址格式包括“地址周期”(以前稱為“地址空間”)的概念。這允許新合約在不需要提供見證人的情況下填充新的存儲槽。這可以在最終狀態到期轉換之前、周期 1 硬分叉之前或之後的任何時候完成。

VB 的提議:https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485

Ipsilon 團隊提案:https://notes.ethereum.org/@ipsilon/address-space-extension-exploration

  • 周期2 硬分叉:我們實施了開始周期 2 的硬分叉,並安排了未來階段的開始。周期 0 十六進制 Patricia 樹被替換為 Verkle 樹,並且客戶端只存儲根,因此周期 0 樹中的狀態現在需要見證人來證明。在此之後,狀態到期計劃已全面實施。

原始 EIP:https://notes.ethereum.org/@vbuterin/state_expiry_eip

本文鏈接:https://www.8btc.com/article/6649923

轉載請註明文章出處

(0)
上一篇 2021-06-17 16:21
下一篇 2021-06-17 16:56

相关推荐