跳至主要内容

頁面上次更新: 2024年1月25日

Verkle 樹狀結構

Verkle 樹(「向量承諾」和「Merkle 樹」混合而成的詞)是一種資料結構,可用於升級以太坊節點,以便它們可以停止儲存大量狀態資料,同時保留驗證區塊的能力。

無狀態

Verkle 樹是實現無狀態以太坊用戶端的關鍵一步。 驗證下一批區塊時,無狀態用戶端無需儲存全部的狀態資料。 無狀態用戶端不使用自己的本地以太坊狀態備份來驗證區塊,而是使用「證據」來證明區塊狀態資料的真實性。 證據是執行一組特定交易所需的各種狀態資料的集合,以及證明證據確實是完整資料一部分的加密證明。 請使用證據而非狀態資料庫。 要做到這一點,證據必須非常短,這樣才能安全地廣播到網路上,以便驗證者能在 12 秒的時隙內及時處理。 目前的狀態資料結構還不是很合用,因為證據太大。 Verkle 樹透過啟用小的證據並消除無狀態用戶端的主要障礙之一,來解決這個問題。

什麼是證據以及我們為什麼需要證據?

驗證區塊表示重新執行區塊中的交易,將變更套用到以太坊狀態樹,並計算新的根雜湊值。 區塊通過驗證是指其計算出的狀態根雜湊值與區塊中提供的值相同(因為這表示區塊提交者真的做了他們所說的運算)。 在現今的以太坊用戶端中,更新狀態需要存取整個狀態樹,狀態樹是必須儲存在本地的大型資料結構。 證據中僅包含執行區塊中交易所需的狀態資料片段。 然後,驗證者只能使用這些片段來驗證區塊提交者是否已執行區塊交易並正確更新狀態。 然而,這意味著證據需要在以太坊網路上的對等點之間足夠快地傳輸,以便每個節點能夠在 12 秒的時隙內安全地接收和處理。 如果證據太大,有些節點可能會在下載以及與鏈同步上花費大量時間。 這是中心化的力量,因為這表示只有擁有高速網路連接的節點可以參與驗證區塊。 使用 Verkle 樹時,無需將狀態儲存在硬碟上;驗證區塊所需的全部資訊都包含在區塊自身中。 不幸的是,Merkle 嘗試產生的證據太大,無法支援無狀態用戶端。

為什麼 Verkle 樹可以支援更小的證據?

Merkle 樹的結構導致證據非常大,以至於無法在 12 秒的時隙內在節點之間安全地廣播。 這是因為證據是將儲存在葉子中 ​​ 的資料關聯到根雜湊值的路徑。 為了驗證資料,不僅需要擁有將每個葉子連接到根的所有中間雜湊值,還需要擁有所有「兄弟」節點。 證明中的每個節點都有一個兄弟節點,它與該兄弟節點一起做雜湊運算,以建立樹中的下一個雜湊值。 牽涉的資料量十分龐大。 Verkle 樹縮短了樹的葉子與其根之間的距離,並剔除了提供兄弟節點來驗證根雜湊值的必要性,因此縮減了證據的大小。 透過使用強大的多項式承諾方案而不是雜湊式向量承諾,可以獲得更高的空間效率。 多項式承諾允許證據保持固定大小,無論其證明的葉子數量如何。

在多項式承諾方案下,證據大小可管理,可以輕鬆地在點對點網路上傳輸。 這使得用戶端只需極少資料即可驗證每個區塊中的狀態變更。

Verkle 樹的結構為何?

Verkle 樹是 (key,value) 對,其中鍵是 32 字節位元組要素,由 31 字節位元組的主幹和單一字節位元組的後綴組成。 這些鍵被整理為擴展節點和內部節點。 擴展節點是單一的主幹,包含 256 個具有不同後綴的子節點。 內部節點也有 256 個子節點,但可以是其他擴展節點。 Verkle 樹和 Merkle 樹結構的主要區別是,Verkle 樹更加扁平,表示將葉子連接到根的中間節點較少,因此產生證明時所需的資料更少。

閱讀 Verkle 樹結構的更多相關資訊(opens in a new tab)

目前進度

Verkle 樹測試網已經啟動並運行,但用戶端仍需要進行大量更新以支援 Verkle 樹。 將合約部署至測試網或是運行測試網用戶端有助加快進度。

探索 Beverly Hills Verkle 測試網(opens in a new tab)

觀看 Guillaume Ballet 對 Condrieu Verkle 測試網的解釋說明(opens in a new tab)(注意 Condrieu 測試網採用的是工作量證明,現已被 Kaustinen 測試網(opens in a new tab)取代)。

了解更多

這篇文章對你有幫助嗎?