當我們向一種新的擴容範式轉變時,回顧被拋棄的舊模式是一種很好的做法。這篇文章旨在讓讀者相信,「以 rollup 為中心」 的方法並不會背離分片,並且有望構建對整個(假設性)系統更直觀的理解。本文源自於 lightclient.io 部落格文章《eth2 was a rollup format》,由專欄作者 Ethfans 編譯、撰寫及整理。
(相關報導:乾貨|深入理解 OVM (Optimistic Rollup):兼容 EVM、以太坊Layer 2擴容方案大躍進)
(事件背景:以太坊 2.0|10月中旬 Medalla 測試網失常,到底是怎麼回事?何時恢復正常?)
Optimistic Rollup 的定義
出於本文的目的,我們先詳細說明最簡單的 Optimistic Rollup (ORU)實現。
ORU 需要具備以下幾個特性:
- 將所有交易數據提交到鏈上
- 將狀態根提交到鏈上
- 假設狀態根是正確的
- 一些節點負責驗證 ORU 的狀態轉換
- 設有鏈上欺詐證明執行程序,可以撤銷無效狀態轉換
分片為什麼不可行
在證明 ETH 2.0 分片只是一種複雜的 ORU 系統之前,我們先來探究一下為什麼原生分片系統並非安全的可擴展性解決方案。
其背後原因不是特別直觀。
從數學角度證明分片的安全性
假設一條區塊鏈上有 16,384 個驗證者和 64 條分片鏈,每條分片鏈都由 128 名驗證者組成的委員會負責驗證。
委員會成員選舉是不可預見的:每個 slot 結束後,所有委員會都會解散,並隨機從全體驗證者中重新選出 64 個委員會,因此每個驗證者都不知道其他驗證者所在的委員會。
假設一個區塊需要獲得委員會中 2 / 3 成員(即,不少於 86 名成員)的認可才能被添加到分片鏈上,這就意味著在全體驗證者中包含 1 / 3 惡意驗證者的情況下,通過隨機的方式選出惡意委員會的概率是:
請注意,我們可以通過調整委員會的規模來按比例放大或縮小該參數,從而達到理想的安全級別。
由於選出惡意委員會的概率極低,以及對不作為驗證者的反向激勵,該分片系統理應繼承其非分片協調系統(it’s non-sharded coordinator)的安全性和活性保障。
但是,就像現實世界中的大多數系統那樣,實現這一點並非易事。
由於委員會成員是提前選好的,惡意參與者就有機會賄賂理性參與者。如果可以輕而易舉地創建從驗證者公鑰到 IP 地址的映射,就會出現更多行賄現象。此外,在免許可型系統中,可驗証投票從本質上來說無法防止行賄。
綜上,分片的實際安全性相比理論上來說低至少一個數量級。
與 Plasma 一樣,分片同樣存在數據可用性問題
雖然分片的安全性低於整體協議,但是我們依然能夠確保其安全性,即,採用欺詐證明來撤銷無效狀態轉換。
但是,如果不為我們這個設想中的簡單分片鏈引入額外的設計,那麼惡意驗證者完全可以扣住數據、不放出來,使得他人沒有足夠的數據來生成欺詐證明。
接下來,我們將講解如何實現這種攻擊。
假設有一條簡單分片的區塊鏈 B,上面有 X 和 Y 兩條分片鏈。區塊鏈 B 在兩個委員會中運行傳統的拜占庭容錯共識算法來幫助運行分片 X 和 Y,分別是 C~x~ 和 C~y~。
B 上的每個區塊都包含兩個門限簽名,即,C~x~ 和 C~y~ 兩個委員會中 2 / 3 的成員對各自分片鏈的當前區塊的狀態根的見證。
假設每條分片鏈的每秒數據和交易處理量與非分片系統相同,那麼引入分片鏈應該能提供大約兩倍的吞吐量。
在樂觀情況下,事實確實如此。
現在,讓我們對 B 發起數據不可用攻擊。假設一個惡意實體能夠迫使 C~x~ 中 2/3 + 1 的成員簽署無效的狀態根,並且不公開對應區塊的輸入數據。
之後,這個無效的狀態根會包含在下一個即將被添加到 B 上的區塊內。這時候,並沒有合理的機制可以讓 B 回到有效狀態,我們可以舉一些機制例子看看:
- C~x~ 中剩餘的 1 / 3 – 1 位成員可以在 B 上發出數據不可用警報。遺憾的是,這不是一個可明確歸屬方的錯誤(註:即無法確定到底是攻擊方扣住了區塊,還是某些人網路不好沒收到,甚至收到了也咬他人一口),因此 B 無法確定是哪一方在作惡。 (如果莽然懲罰某些成員)懷有惡意的少數派有可能會藉此發起零成本的 DDOS 攻擊。
- 網路中的其它節點可以發出數據不可用警報。但他們很可能做不到,因為在錯誤發生期間,只有 C~x~ 的成員在密切關注這個時間。
- 整個社群來發現錯誤,並主動介入將 B 回滾到最新的有效狀態。這種處理模式顯然是糟糕的。
- 執行類似 Plasma 的批量退出(mass exit)機制,從 X 批量退出到 B 上,會產生相關的負面影響。
就像 Plasma 一樣,這裡真正的問題是數據可用性。
延伸閱讀:Vitalik Buterin:如何區分側鏈、Plasma和分片?
安全地提高數據可用性
希望上述分析能讓你明白一個道理:
我們首先應該將關注點放在擴展基礎層的數據可用性上。否則,系統仍將遭受數據不可用攻擊。
從傳統上來說,提高區塊鏈上的數據吞吐量需要就係統所支持的最低硬體 / 帶寬要求達成社會共識 —— 得出一個可以接受的區塊大小。
Mustafa Al-Bassam 和 Vitalik Buterin 最近的研究提供了一種概率性機制來確保數據可用性。
M. Yu 等人進一步擴展了該研究,提出了 Coded Merkle Tree 累加器這一概念,給出了最優階數的指標(order-optimal metrics)。上述機制主要放寬了網路中參與者下載所有數據的要求。
Vitalik 的提議是:
讓網路中的參與者隨機選取區塊中的小部分數據進行驗證,以確保區塊提議者公開了數據。
風險在於,區塊提議者只需要隱藏少量數據即可發動數據不可用性攻擊。因此,參與者必須多次對區塊進行抽樣驗證,才能對區塊的可用性建立起足夠的信心。為了減少抽樣次數,Vitalik 提議採用二維 Reed-Solomon 編碼來對區塊數據進行編碼。
在這個結構中,區塊被分割成 N 個份額,然後進行編碼,生成 M 個份額,只要擁有 M 中任意 N 個份額即可重新構建區塊。
假設 2 N = M,區塊提議者需要影響 1 / 2 的區塊數據,才能成功發動數據不可用攻擊。
Coded Merkle Tree 採用類似的結構,只不過使用 O(b) 的解碼成本和 O(1) 的哈希承諾來代替二維 Reed – Solomon 編碼所提供的 O(b^1.5^) 解碼成本和 O( 𝑏√b)哈希承諾(其中 b 指的是區塊的字節大小)。
關於該技術的詳解,可以參見《A note on data availability and erasure coding》。
分片就是 Rollup
ETH 2.0 的分片設計模糊了它們是信標鏈的 ORU 這樣一個事實。如果將重點從分佈式處理轉向有序的數據可用性層,就變得一目了然了。
如上圖所示,驗證者集起到以下 4 種作用:
- 驗證並執行信標鏈
- 對分片所提供的數據進行抽樣驗證
- 組成分片委員會
- 提交關於無效狀態轉換的欺詐證明
我們已經作了兩個假設:
i) 數據具有可用性,
ii)區塊鏈會從最近一個具有數據可用性的區塊開始進行分叉。
則要嘛人們可以構建欺詐證明,要嘛系統將缺乏數據可用性歸咎於簽署該區塊的分片委員會,並回滾狀態轉換。
從定義上來說,ETH 2.0 是一種 ORU
這時,考慮到我們之前對 ORU 的定義,我們應該能夠證明分片實際上就是 rollup:
1. 所有交易數據都提交到鏈上:分片區塊數據被集中到數據可用性層上,在一定概率上會由全網進行驗證。
2. 狀態根被提交到鏈上:分片委員會為包含在信標鏈區塊中的分片狀態根提供證明。
3. 狀態根被假定為有效的:信標鏈在沒有進行額外驗證的情況下,假定分片委員會的證明是有效的。
4. 一些節點負責驗證 ORU 的狀態轉換:分片委員會驗證分片的狀態轉換。
5. 有一個可以撤銷無效狀態轉換的鏈上欺詐證明執行器:信標鏈支持分片狀態轉換欺詐證明。
解構 ETH 2.0
既然我們已經解釋了 ETH 2.0 和 ORU 系統之間不可思議的相似性,我們能夠如何利用這一資訊來更好地理解整個系統的設計?
讓我們通過 ORU 系統的角度來探索 ETH 2.0 的一些設計決定:
數據吞吐量
在當前設計中,系統的數據吞吐量與分片機制緊密耦合。
這裡可以採用的一種方法是,將數據可用性檢查視為協議中的頭等公民。這樣可以對數據層進行獨立優化,執行層也可以更細的粒度控制(參與協議的)硬體要求。
例如,ETH 2.0 可以提供 64 個數據中心和一個在信標鏈上的 ORU 合約,以此代替分片鏈。
ORU 合約可以讓 rollup 決定領導者選舉機制,它們想要將數據發送到多少個數據中心上,以及它們是否想與其它rollup 綁定(例如,如果一個rollup 發生回滾,與之綁定的rollup 也會發生回滾)。使用的數據中心越多,驗證 rollup 所需的硬體要求就越高。
嚴格來說,上述系統是當前分片設計的超集。
除了由協議定義的 64 個分片之外,還會有其它具有自己特徵的 rollup 構建在安全數據層上,並且獨立於協議分片。
回滾最小化
在簡單的 ORU 中,當選的領導者有權提交無效狀態轉換。雖然這不會影響系統的安全性,因為無效狀態轉換是可以通過欺詐證明撤銷的,但這確實會破壞 rollup 的進程。
單獨來看,這種破壞對作惡者來說通常是不划算的。然而,在 ETH 2.0 中,跨分片通信讓這個問題變得特別棘手。
處於 slot N 的分片預期自己可以獲得其它分片在 slot N-1 時的狀態。假設分片 S~i~ 提交了一個無效的狀態轉換,除了單方面發起回滾之外沒有其它合理的方法來撤銷該狀態對分片 S~j~(0≤j≤64;i≠j)的負面影響。
為避免災難性事件,必須有適當的機制來防止這類回滾。
其中最明顯的兩個機制是分片委員會和託管比特檢查(custody bit check)。正如 「從數學角度證明分片的安全性」 一節中所述,即使考慮到各種攻擊向量,賄賂分片委員會中 2 / 3 以上成員的概率也很低。
託管比特可以確保誠實的驗證者不會因為懶惰而被騙簽署無效的狀態轉換。如果我們認為這些機制的目的是防止無效狀態轉換,而非維護系統安全,就能選擇既有實用價值,又能實現相同效果的參數。
例如,將分片委員會的規模減少到 64 人,隨機組成惡意委員會的概率依然低至 3.1×10-8。但是從網路和簽名聚合的角度來看,這樣能夠極大減輕負擔。
以 rollup 為中心的以太坊路線圖
本文最初撰寫於斯坦福區塊鏈大會 2020(SBC20)期間。
那時,我開始充分領會到 ETH 2.0 和 ORU 之間的相似性。在看過 Vitalik 的文章後,我決定發布這篇文章,來表示對以太坊將來採用以 rollup 為中心的擴容方案的支持。
但是,如本文所述,「以 rollup 為中心」 的擴容方案沒有讓我們偏離方向,而是一個超集。
我們在分片設計中遇到的問題與我們在整合跨 rollup 通信時遇到的問題是同構的。這就意味著,已經開展的大部分工作都可以繼續進行,不會被中斷。以 rollup 為中心的路線圖會降低分片執行所必需的協議複雜性。這使得我們能夠不斷迭代類似分片的複雜的 rollup 機制。
這樣可以讓更多開發者為不同的 rollup 格式做貢獻,讓現有核心開發者和研究者可以專注於構建一個健壯的數據可用性層。
可以說,通往功能完善的 ETH 2.0 的道路從未如此清晰。
📍相關報導📍
盤點:以太坊 2020 年底前這 5 件重要動態,能否帶來大驚喜?
手續費改革|以太坊開發者:如果EIP-1559早通過,過去一年就可「銷毀近100萬枚ETH」
解析|ZeroSwap:引入 Layer 2 ,基於 ZK-Rollup 的去中心化交易所
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務