在當前的以太坊協議中,狀態轉變函式需要狀態作為輸入,但交易(區塊)傳送者並不提供這部分狀態,而是預設接收並驗證區塊的人在本地維護了狀態;因此,想要驗證以太坊區塊的節點就必須在本地儲存全域性狀態的副本。而無狀態正規化改變了這一點,把 “狀態” 輸入替換成了 “狀態根 + witness”,此處的 witness,就是為了讓區塊驗證者能夠驗證區塊而附加的狀態資料(或者狀態證明),有了這部分資料,驗證的一方就不再需要在本地維護全域性狀態了。無狀態正規化能大幅提高節點同步區塊鏈的時間並降低節點的執行負擔(大量減少了硬碟的 I/O 需求)。
實現無狀態客戶端的困難所在
該部分介紹了實現無狀態客戶端的困難所在。一方面,witness 的資料規模較大,安裝此處的估算,每個區塊會產生 600 KB 的區塊 witness 資料(當前的以太坊區塊本身的資料量平均在 30~35 KB 左右)。另一方面,則是因為 EVM 操作碼的 Gas 消耗量都是根據操作的計算量來決定的,根本不適合無狀態正規化以頻寬消耗為主的情況。所以,總的來說,實現無狀態性的挑戰一方面在於要降低 witness 的大小,另一方面是制定出一套與之相適應的 Gas 消耗量方案。
可能採取的方案
此處介紹了可能採用的實現無狀態性的方案,包括多項式承諾、Verkle Tree 和 SNARKing Merkle Tree。作者從對多項式承諾方案的分析給出了一個 “直覺”:為便於在狀態更新後更新 witness,可能我們仍逃不出要使用樹狀資料結構。