BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

混合Layer 2 協議的曙光

Winkrypto
特邀专栏作者
本文約4507字,閱讀全文需要約7分鐘
Layer 2 擴容解決方案正從理論走向實踐。
AI總結
Layer 2 擴容解決方案正從理論走向實踐。

編者按:本文來自鏈聞ChainNews編者按:本文來自

鏈聞ChainNews

鏈聞ChainNews

編者按:本文來自

鏈聞ChainNews

鏈聞ChainNews

編者按:本文來自

鏈聞ChainNews

鏈聞ChainNews

,撰文:Vitalik Buterin,鏈聞編譯,Odaily經授權轉載。

當前以太坊Layer 2 擴容解決方案(主要是指Plasma 和狀態通道)正從理論走向實踐。但與此同時,我們越來越明顯的看到這些技術存在內在挑戰,離成熟的以太坊擴容技術還有一定距離。

在很大程度上,以太坊是成功的,因為以太坊的開發者體驗很不錯:編寫程序、發布程序、任何人都可以與之交互。另一方面,設計一個狀態通道或Plasma 應用,依賴於很多關於激勵和應用特定用例開發複雜性的明確推理。狀態通道適用於特定用例,例如在兩個交易者或兩個遊戲玩家之間發生的多筆重複支付(在Celer 中成功實施),但是更加通用的用例似乎依然存在一定難度。 Plasma(尤其是Plasma Cash)可以用於支付場景,但想要實現通用用例存在一定程度的挑戰:即使是部署一個去中心化交易所,也需要客戶存儲更多的歷史數據,而且在Plasma 上部署以太坊式通用智能合約似乎也非常困難。

但與此同時,一個被遺忘的「半Layer 2 」的協議類別再次出現了——這一類型雖然無法提升可擴展性,但能實現更加泛化和安全的模型。

在2014 年發布的一篇博客文章中,我介紹了「影子鏈」(shadow chain)的概念,它是一種在鏈上發佈區塊數據的架構,但在默認情況下並不會驗證區塊。相反,區塊會被暫時接受,然後在一段時間(比如兩週左右)之後才最終確認。在這兩週內,臨時被接受的區塊可能會受到挑戰,通過挑戰驗證區塊,如果區塊最終被證明是無效的,那麼該區塊所在的鏈將會被恢復,同時原始發布者的保證金會被扣除作為懲罰。合約不會追踪系統的完整狀態,只會追踪狀態根(state root),用戶自己也可以從頭至尾處理提交給區塊鏈的數據來計算狀態。
而最近出現的一個叫做ZK Rollup 的提案,通過使用ZK-SNARKs 驗證區塊的有效性,雖然沒有挑戰期,但是可以達到同樣的效果。

上圖:發佈在鏈上的ZK Rollup包剖析圖。影響ZK Rollup系統狀態(即帳戶餘額)的數百筆“內部交易”被壓縮成一個包,其中包含約佔10個字節大小的每筆內部交易,以及用於證明相關轉移過程全部有效性的(約100-300字節大小)SNARK,約100-300 字節。

在上述情況下,主鏈用於驗證數據可用性,但不會(直接)驗證區塊有效性或執行任何重要的計算(除非有挑戰被提出)。因此,這種技術在擴容上並沒有什麼關鍵優勢,因為鏈上數據負載最終會成為瓶頸,但不可否認,它依然是一個非常重要的手段。

數據比計算更便宜,而且市場上也有很多大幅壓縮交易數據的方法——主要是因為交易中絕大部分數據都是簽名數據,而且很多簽名可通過多種形式的聚合壓縮為單個簽名。 ZK Rollup 承諾每秒可以處理500 筆交易,這個效率比以太坊本身提升了三十倍,這是因為它將每個交易壓縮到了僅僅10 個字節,交易有效性由零知識證明驗證,因此不需要包含簽名。另一方面,使用BLS 聚合簽名可以在「影子鏈」中實現類似的吞吐量(和最近以太坊Casper 核心開發人員Karl Floersch 發布的新架構Optimistic Rollup 類似)。即將推出的伊斯坦布爾硬分叉會將數據的gas 成本從每字節68 個單位減少到每字節16 個單位,同時還會將吞吐量提升四倍(即每秒處理超過2000 筆交易)。

那麼,相比於Plasma 這樣的鏈下擴容技術,像ZK/Optimistic Rollup 這種數據鏈上技(data on-chain techniques)有什麼好處呢?

首先,ZK/Optimistic Rollup 無需「半可信」(semi-trusted)運營商。在ZK Rollup 中,因為交易有效性是通過加密證明(cryptographic proofs)來驗證的,所以package 的提交者其實沒有太多辦法「動壞心思」(當然,雖然根據設置,惡意提交者可能會導致系統暫停幾秒鐘,但這其實是他們能夠給系統造成的最大傷害了)。在Optimistic Rollup 中,惡意提交者可以發布「壞區塊」(bad block),但下一個提交者可以在發布自己的區塊之前立即挑戰該區塊。在ZK Rollup和Optimistic Rollup 中,會有足夠多的數據會發佈到鏈上,允許任何人計算完整的內部狀態,需按順序處理所有提交的delta 即可,而且沒有取消此屬性的「數據扣留攻擊」。也就是說,成為一個運營商可以是完全「無需許可」的,所需的保證金(只有10 ETH)也僅僅是用於反垃圾郵件的目的而已。

其次,Optimistic Rollup 的實現更加泛化,Optimistic Rollup 系統中的狀態轉換函數可以在單個區塊的gas 上限中用來進行更加通用的計算(包括提供驗證過渡期所需狀態部分的Merkle 分支)。理論上,ZK Rollup 也可通過相同方式實現通用計算,但實際操作中,將ZK SNARKs 用於通用計算(比如在EVM 中執行)是非常困難的,至少到目前為止是這樣。

再次,Optimistic Rollup 更容易構建客戶端,因為它對Layer 2 網絡基礎設施的需求較少,只需掃描區塊鏈即可完成很多工作。

不過,像ZK/Optimistic Rollup 的優勢是什麼呢?實際上,這是一個高度技術性的問題,也就是所謂數據可用性問題。 (具體可以參見解釋文檔

https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding 和解釋視頻:https://www.youtube.com/watch?v=OJT_fR7wexw)

基本上,有兩種方法可以在Layer 2 系統中「作弊」:第一種是將無效數據發佈到區塊鏈上,第二種是根本不發布數據(例如,在Plasma 中將Plasma 新區塊的根哈希發佈到主鏈上,但不向任何人透露區塊內容)。

發布無效數據其實很容易處理,因為一旦數據在鏈上發布,有許多方法可以確定它是否有效,並且將提交的無效數據標記為無效,提交者也會因此受到嚴厲的懲罰。另一方面,不可用數據相比而言會更難處理,因為即使遇到挑戰也無法檢測到不可用性,也無法精準確定這些未發布的數據到底是誰的錯誤,尤其是在數據被默認保留的情況下,僅當某些驗證機制試圖驗證其可用性時才按需顯示。這一點在「漁夫困境」(Fisherman's dilemma)中得到了說明,即在一個挑戰響應遊戲中,無法區分惡意提交者和惡意挑戰者:

上圖:漁夫困境。如果你僅在T3 時刻開始觀察給定的特定數據,那麼就無法知道自己是在Case 1 還是在Case 2 裡,因此也就不知道到底是誰的錯。

通過將問題推給用戶,Plasma 和狀態通道有效地解決了「漁夫困境」問題:如果你是一個用戶,並且決定與另一個用戶進行交互(狀態通道中的交易對手、或是Plasma 中的操作員),假設該用戶沒有向你發送他們應該發布的數據,那麼你就會退出,並轉移到下一個交易對手/ 操作員。作為用戶,你擁有所有以前的數據和由你簽署的所有交易數據,這一事實使你可以在區塊鏈中證明自己在Layer 2 協議中擁有的資產,從而安全地將這些資產帶出系統。另外,你還需要有(之前同意過的)接收資產的操作證明,同時,沒有其他人可以證明你把相關資產發送給其他人,那麼你就獲得了這筆資產。

這個技術的確很優雅,但卻依賴一個關鍵性的假設:每個狀態對像都有一個邏輯「所有者」,而且在未經該所有者同意的情況下,對象狀態是不能被更改的。所以,該技術適用於基於未花費交易輸出(UTXO)的支付交易(但不適用賬戶模型的支付交易,因為在這種情況下你能在未經他人同意的情況下向上編輯其他人的賬戶餘額,這也是賬戶模型的Plasma 如此困難的原因),甚至可以用於去中心化交易所,但這種「所有者」的屬性還遠遠不夠。一些應用(比如Uniswap)並沒有自然所有者,即使在那些擁有所有者的應用程序中,也經常出現多個人可合法地對相關對象進行編輯。如果不引入拒絕服務(DoS)攻擊的可能性,就沒有辦法允許任意第三方退出資產,因為沒有人能夠證明發布者或提交者是否有過錯。

此外,Plasma 和狀態通道還分別存在一些其他問題。對於那些還沒有加入狀態通道的用戶,不允許進行鏈下交易。 Plasma 要求用戶用戶存儲大量的歷史數據,當不同的資產相互交織時,這些數據會變得更大(比如,一種資產轉移的條件是基於另一種資產轉移,就像在具有單段式( single- stage)買單機制的去中心化交易所中發生的那樣)。

ETH
歡迎加入Odaily官方社群