同步實施無狀態和狀態到期,比先後執行這兩種方案要更容易。

原文標題:《V 神發佈以太坊狀態到期和無狀態路線圖,同步實施以解決狀態暴增問題》
撰文:Vitalik Buterin,以太坊聯合創始人
翻譯:Kyle
來源:巴比特

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

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

狀態到期:從狀態中移除最近沒有被訪問過的狀態(例如:上一次訪問還是去年),並需要見證人(witnesses)才能恢復過期狀態。這會將每個人需要存儲的狀態減少到大約 20-50 GB。

弱無狀態:只需要區塊提議者存儲狀態,並允許所有其他節點無狀態地驗證區塊。在實踐中實現這一點需要切換到 Verkle 樹以減少見證人的規模。

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

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

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

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

Vitalik Buterin 發佈以太坊狀態到期和無狀態路線圖,同步實施以解決狀態問題請注意,這些大約一年的狀態到期時間在歷史上有時被稱爲「時期(epochs)」,但我正在切換到「週期(period)」一詞以避免與信標鏈時期混淆。

保持兩個關鍵原則:

  • 只能修改最近的樹(即當前週期對應的樹)。 所有舊樹都不再可修改; 舊樹中的對象只能通過在新樹中創建它們的副本來修改,並且這些副本取代了舊副本。

  • 全節點(包括區塊提議者)預計只持有最新的兩個樹,因此只有最新的兩個樹中的對象才能在沒有見證人的情況下被讀取。 閱讀較舊的樹則需要提供見證人。

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

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

路線圖

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

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

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

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

來源鏈接:notes.ethereum.org