隨着以太坊的使用增加,運行完整節點變得對資源和帶寬要求更高。這導致越來越少的人能夠運行完整節點,降低了網絡的去中心化程度。此外,隨着交易需求的增加,以太坊在擴展方面面臨困境,導致網絡擁塞和高昂的Gas費。

幣圈三大交易所註冊(複製鏈接打開去瀏覽器)

https://www.communityrebate.com

Vitalik於2017年提出的無狀態客戶端爲解決以太坊面臨的去中心化挑戰提供了潛在解決方案。無狀態客戶端的關鍵思想是減少運行完整節點所需的存儲和帶寬要求,使更多的人能夠參與並使網絡去中心化。本文將深入探討無狀態客戶端的工作原理以及它們的潛在優缺點。

什麼是以太坊狀態?

要理解無狀態客戶端,我們首先需要了解以太坊中的“狀態”概念。以太坊狀態是指以太坊世界中所有賬戶、合約、餘額、nonce和存儲的當前狀態。它可以被看作是在給定時間點上存儲以太坊網絡的所有相關信息的數據庫。

狀態以Merkle Patricia trie的形式持久化,這實質上是一個修改過的Merkle樹,用於存儲key-value對。該trie的根哈希總結了整個狀態。每個新區塊,根據該區塊中的交易,狀態會更新。新的狀態根哈希包含在區塊頭中。

隨着時間的推移,隨着越來越多的賬戶、合約和交易被添加,以太坊的狀態變得越來越龐大。目前,狀態的大小超過1TB,每年增加數十GB。這種不斷增長的狀態是去中心化問題的根本原因。

爲什麼狀態增長會引起問題

以太坊狀態大小的增加導致了一些關鍵問題:

● 新節點同步時間較長——新節點同步所有歷史狀態改變需要很長時間。這增加了運行新的完整節點的難度,阻礙了去中心化。新節點從創世區塊同步到最新狀態目前需要多天,甚至數週,對於消費者硬件來說,這是一個阻礙有效啓動新節點並允許更多參與者加入網絡的主要障礙。

● 硬件要求增加——更大的狀態需要更多的存儲、內存和處理能力來存儲、訪問和更新。這使得資源較少的用戶無法運行節點。運行一個完全同步的以太坊節點現在至少需要一個具有1-2TB容量的SSD。這對許多潛在的節點運營者來說是無法企及的。

● 帶寬使用增加——新區塊的廣播必須還包括更新後的狀態,需要更多的帶寬。這會增加節點運營者的成本。目前,狀態主導大多數區塊廣播,因此區塊大小不斷增長。更多的帶寬轉化爲節點運營者的更高成本。

● 區塊驗證變慢——讀取和更新較大的狀態使區塊驗證變慢,限制了交易吞吐量。每個交易都需要多次讀寫存儲以更新餘額、nonce、合約狀態等。較大的狀態意味着每個區塊的讀/寫更多,減少了每秒可以處理的交易數量。

● 永久存儲成本——一旦數據被添加到狀態中,就必須永久存儲。這導致unbounded狀態增長。目前沒有主動刪除舊的和未使用的狀態數據的機制。因此,只要以太坊繼續運行,狀態保留成本就會無限增加。

什麼是無狀態客戶端

無狀態客戶端提供了一種在不需要訪問完整以太坊狀態的情況下驗證新區塊的方法。它們利用稱爲“witnesses”的密碼證明來證明區塊中狀態更改的有效性,而無需具體的狀態數據。

無狀態客戶端工作方式如下:

1、客戶端僅存儲區塊頭和狀態根,而不是完整的狀態數據。區塊頭包含在處理該區塊之後狀態trie的根哈希等元數據。

2、在驗證新區塊時,客戶端與區塊一起接收到一個“witness”。這個witness是一組默克爾證明,證明了交易中特定的狀態更新是有效的。

3、witness包含特定狀態值的Merkle證明,用於處理交易。例如,賬戶餘額或合約存儲的更新。

4、客戶端使用witness來確保交易對最後已知狀態根的有效性。證明驗證狀態更改與先前的根匹配。

5、如果有效,客戶端更新到區塊頭中提供的新狀態根。這個新的狀態根將用於驗證下一個區塊。

通過使用witness驗證狀態,而不是在本地存儲完整的狀態,無狀態客戶端獲得了一些優勢:

● 非常快速的同步時間——無需完全同步歷史狀態更改。無狀態客戶端幾乎可以瞬間同步,只需區塊頭即可。

● 低存儲要求——狀態根僅爲32字節。而不是數百GB的狀態,只需要區塊頭。

● 更少的帶寬使用——只傳輸區塊頭和witnesses,而不是完整的狀態。帶寬使用最小化。

● 快速驗證——witnesses僅包含小的相關狀態子集。只證明已更新的賬戶/存儲是有用的。

● 輕鬆支持輕客戶端——輕客戶端可以輕鬆驗證證明。輕客戶端模型與無狀態驗證非常兼容。

無狀態客戶端的挑戰

雖然無狀態客戶端帶來了一些重大好處,但也存在一些顯著的技術挑戰:

● witness大小——witnesses可能過大而無法有效傳輸。如果使用完整的Merkle證明,它們可能會超過區塊大小的限制。

● witness的創建——生成最佳的witness對於區塊提議者來說是複雜的。提議者必須組裝正確的證明片段來驗證每個交易。

● 沒有witness激勵——提供witness沒有直接的獎勵。與挖礦不同,witness的創建沒有內置的激勵機制。

● 臨時數據——witnesses在某一時間點證明狀態,需要再生。witness不能在狀態發展過程中被複用。

● 狀態存儲——仍然需要有人維護完整的狀態以生成witness。無狀態驗證依賴於有狀態的witness生成。

● 複雜的應用——一些合約可能依賴於較大的狀態子集,使witness變得臃腫。例如,每個交易更新許多存儲槽的合約。

可能的解決方案

研究人員提出了各種解決方案來解決這些挑戰:

● Verkle樹——用於減小witness大小的特殊數據結構。Verkle樹使用簡潔的密碼承諾來最小化證明大小。

● witness緩存——提議者可以維護最近的witness以便複用。緩存可能再次有用的witness可以攤銷創建成本。

● 協議激勵——提供有用witness的獎勵機制。新的激勵結構可以補償witness的創建。

● 中間狀態根——隨時間跟蹤根以避免重新生成證明。維護部分根可以重用witness片段。

● 狀態租金——要求支付以長期維護狀態,修剪未使用的狀態。租金強制清理過時的存儲以限制證明大小。

● 分區witness模型——在提議者和驗證者之間拆分狀態處理。一些專用的提議者節點生成witness。

這些方法之間存在權衡,需要進一步的研究來發現最佳實現。幸運的是,零知識密碼學領域的快速創新可能會爲高效無狀態客戶端帶來新的可能性。

潛在影響

如果技術障礙能夠被克服,無狀態客戶端可能會顯著推動以太坊的發展:

● 更快的同步和驗證以支持更高的交易吞吐量。無狀態驗證將極大地加速區塊處理。

● 減少運行節點所需的資源,提高去中心化程度。筆記本電腦和業餘愛好者可能真實地運行完整節點。

● 更好地支持移動錢包等輕客戶端。狀態證明與輕客戶端模型高度兼容。

● 更順暢地引入分片,在分片之間進行無狀態驗證。跨分片交易可以利用高效的狀態證明。

● 刪除和修剪不再有用的舊狀態數據的能力。狀態增長可以被積極管理,而不是無限增長。

● 節點運營者更靈活地根據需求自定義狀態的能力。節點可以根據用例定製狀態保留策略。

● 過渡到計算和帶寬更重要於存儲的模型。架構向更加雲友好的模型發生變化。

也存在一些潛在的風險,如增加對DDoS攻擊的脆弱性以及只有少數節點運營者可靠地存儲區塊鏈歷史。然而,密碼學證明可以減少這些風險。總體而言,無狀態客戶端是克服以太坊當前限制的最有前途的方法之一。

結論

隨着採用的增加,以太坊不斷增長的狀態大小對去中心化構成了挑戰。無狀態客戶端通過使節點能夠驗證交易而無需完整的區塊鏈狀態來提供一種解決方案。這最終可能使移動手機能夠運行以太坊節點,從而極大地提高了去中心化程度。#DeFiChallenge