使用者安全與跨鏈安全性實際上是一幣兩面,Rollup 只是允許鏈提供確認規則,其安全性可達主鏈的安全性。
原文:Do Rollups Inherit Security?(dba)
編譯:Frank,Foresight News
封面:Rollup
介紹
不管你喜歡還是討厭,Twitter 可能永遠不會停止關於「L2」或 Rollup 是否「繼承安全性」(inherit security)的爭論。
雖然大多數爭論都是難以辨別的語義之戰,但如果你能設法縮小爭論範圍,那麼潛在的觀點就非常有價值,因為它們觸及了 Rollup 何時、何地以及為何有意義的核心問題。
可擴展的 L2 是否消除了市場對 L1 的需求? 有沒有可能將像 Solana 這樣的 L1 變成 L2?
這些爭論主要歸結為安全問題。 不幸的是,這裡的「安全」定義一直非常難以捉摸。 我們通常會隨意使用這個術語,大多數人都大致知道我們在說什麼,但又不完全清楚。 我們將在這裡跨不同架構詳細分解安全性。
流行語定義
Rollup
我之前使用過 Mustafa 的以下定義:「Rollup 是將其區塊發佈到另一個區塊鏈並繼承該區塊鏈的共識和數據可用性(DA)的區塊鏈」。
以下則是 James Prestwich 給出了更一般的定義:「Rollup 是通過自定義狀態轉換函數,選擇加入另一個共識機制,並保留超集狀態的一種方式」。
兩者都不需要驗證橋,以最小的信任假設構建跨鏈橋接的能力是 Rollup 的主要好處,但單獨分析它們至關重要。
我們可以考慮以下的 Rollup 標準:
- Rollup 是通過在主鏈(DA 層)上的數據輸入運行自定義狀態轉換函數(STF)而派生的有狀態系統(例如區塊鏈)。
- 用於派生遠端鏈的最終確認狀態(即 Rollup)的所有輸入數據(即完整的交易數據或狀態差異)均在主鏈上確認。
- 由於 Rollup 狀態源自對主鏈上的數據運行的狀態轉換函數(STF),因此 Rollup 的有效性取決於主鏈的有效性。 然後 Rollup 節點必須充分驗證主鏈的共識和有效性(或對主鏈做出誠實多數假設);
Rollup 節點通過應用自身的狀態轉換函數(STF),在主鏈共識結果上確定 Rollup 的狀態(例如主鏈確認排序和可用性的數據區塊)。
跨鏈橋
跨鏈橋是允許兩個區塊鏈相互通信的系統。 鏈 A(目標鏈)需要確信鏈 B(源鏈)上發生了某些事件,反之亦然。 理想情況下,我們希望這種通信是雙向的,具有強相關的安全屬性(例如消息有效的高置信度、源鏈不會撤銷等等)。
從根本上來說,跨鏈橋充當了另一個區塊鏈的「觀察者」(就像任何其他典型的人類用戶一樣)。 跨鏈橋實現了給定的確認規則,通過該規則,它確信所連接鏈的狀態(例如,必須通過多少個乙太坊區塊才能接受轉帳輸入)。
- 傳統跨鏈橋通常運行源鏈的鏈上共識驗證器輕節點(即它們信任大多數共識簽署的任何內容);
- 跨鏈橋可以通過充當完整驗證器輕節點(即添加數據可用性採樣(DAS)+ 有效性 / 故障證明)來提供更強大的安全屬性。 例如,鏈的驗證器可能需要在連接鏈的所有 DAS 輕節點上運行,與要求驗證器運行連接鏈的完整節點相比,這是一種更輕量級的替代方案;
- Rollup 跨鏈橋還可以保留主鏈的活躍性和抗重組性(因為 Rollup 必須共用主鏈的共識);
從主鏈橋接→Rollup
這個方向非常簡單,因為 Rollup 節點會完全驗證主鏈。
Rollup 節點知道主鏈上發生的一切,因此它們知道跨鏈橋接的交易何時發生,當前的乙太坊 Rollup 完整節點還必須為乙太坊基礎層本身來運行完整節點。
請注意,如果支持的話,Rollup 節點也可以改為運行其主鏈的完整驗證器輕節點。 讓我們考慮一個假設的例子,其中乙太坊已經完全實現了以下升級:
- 乙太坊執行區塊帶有有效性證明(基礎層的 zkEVM 研究正在進行中);
- 乙太坊已經實現了完整的 DAS,因此節點可以對 DA 進行採樣;
- 乙太坊執行層將其數據作為 blob 發佈到數據層,就像乙太坊之上的任何其他 Rollup 一樣(例如 Celestia 的執行層數據將被發佈到其 DA 層,因此 DAS 節點將檢查 Rollup 數據和 Celestia 自己的執行層的可用性);
- 乙太坊提供了完整的共識證明,而不是依賴於同步委員會(例如,通過驗證器的整合、更好的簽名聚合、可能的 ZK 共識證明等);
現在,假設你想為基於乙太坊的 Rollup 運行完整節點,要遵循有效的 Rollup 鏈,必須瞭解乙太坊的規範鏈,這就需要檢查乙太坊自身的共識和有效性:
- 乙太坊的共識——任何輕節點用戶端都可以跟蹤作為區塊鏈、區塊頭簽署的共識;
- 乙太坊自己的執行層 DA——Rollup 節點會對乙太坊的 DA 層進行採樣,檢查 Rollup 數據和乙太坊自己的執行層數據的可用性(請注意,DAS 節點仍然對完整節點做出一些額外的假設,我們稍後會看到);
- 乙太坊自身的狀態有效性——有了 zkEVM,每個乙太坊區塊都會附帶一個有效性證明;
Rollup 節點必須檢查乙太坊自身執行層的狀態有效性和 DA,因為這些是以太坊區塊的有效性條件。 Rollup 節點需要知道它不僅跟蹤共識已簽署的乙太坊,而且還知道它是有效的區塊頭。 例如,他們可能會意外地跟蹤共識簽署但無效的乙太坊區塊(例如它產生了大量 ETH)。
如果基礎執行層本身將其數據發佈到 DA 層(就像其他 Rollup 一樣)並添加有效性或故障證明,那麼它將成為一個內置 Rollup。
從 Rollup → 主鏈橋接
這個方向比較棘手,因為主鏈預設不知道 Rollup 的狀態和 STF(即乙太坊節點不需要運行 Rollup 節點)。 為了讓主鏈相信 Rollup 的狀態,你可以在主鏈上部署的智慧合約(即 rollup 的驗證橋合約)中實現 Rollup 的邏輯。 該智慧合約檢查 DA 和 Rollup 狀態的有效性。
同樣,這個跨鏈橋是可選的。 主鏈上的智慧合約用於使所有主鏈節點相信 Rollup 的有效性,這就允許在良好的信任假設下進行雙向通信。
Rollups、協處理器(Co-processor)和意圖(Intents)
正如所討論的,Rollup 除了擁有它們主鏈的狀態(例如乙太坊的狀態)之外,還保存它們自己的一些狀態(Rollup 的狀態)。 那麼,CoW Swap 是否有自己的狀態,而不是乙太坊狀態的一部分? 如果是,那麼聽起來就像是 Rollup。 如果不是,那麼它可能是「協處理器」(Co-processor)。
然而,即使這個問題也不像看起來那麼簡單:
相反,你可能會認為區分因素是狀態的持久性:
如果 CoW Swap 允許特定的參與者向使用者提供快速的預確認(比乙太坊的出塊時間更快),並承諾包含批次處理(batch)的訂單——因為乙太坊批次處理時間比大多數使用者想要的要長,那麼它現在是一個 Rollup 么?
Chris Goes 在模組化峰會的演講中探討了這個話題,首先他為意圖(Intents)提供了一個近似的定義:「對給定系統狀態空間的偏好函數的承諾」。
請注意部分解決(匹配意圖)和 Rollup 排序之間的相似之處。 操作員獲取用戶的鏈下簽名消息→將結果數據發佈到主鏈。
- 基於意圖的應用程式——由此產生的狀態變化在鏈上解決(例如,在 CoW Swap 示例中,應用程式位於基礎鏈上,因此代幣在那裡進行兌換);
- Rollup 應用程式——使用提交到主鏈的數據來計算 Rollup 所產生的狀態更改;
以意圖為中心的架構和以 Rollup 為中心的架構從相反的方向實現相似的目標。 以意圖為中心從使用者和應用程式的角度廣泛地解決了這個問題,以 Rollup 為中心的方式從不同區塊鏈的角度廣泛地解決了這個問題。
在這裡,設置具體的區分邊界並不重要。 更重要的是,我們發現 Rollup 實際上與我們已經習慣的具有鏈下意圖匹配的應用程式沒有太大不同!
你依賴鏈下參與者(排序器與求解器 / 填充器等)來獲得一些較弱的保證,例如提供最佳執行和良好的用戶體驗 → 根據發佈到主鏈的數據來確定結果。 但是,他們不保管你的資金。
隨著可驗證的鏈下計算變得越來越重要,兩者之間的界限可能會變得模糊:
如果你希望意圖求解器或 Rollup 排序器不那麼受信任......
模組化區塊鏈與單片區塊鏈
單片區塊鏈(又名集成區塊鏈)通常被定義為垂直集成所有核心功能(即共識、DA 和執行)的鏈。 它們對自己的安全負全部責任,Solana 和 Cosmos Hub 就是典型的例子。
DA 層(例如乙太坊和 Celestia)通常被稱為「模組化」區塊鏈,因為它們將執行外包給 Rollup,但這並不十分準確。 他們還獨立負責自己的共識、DA 和執行。
即使 Celestia 的執行也會受到限制(例如,轉帳、質押、跨鏈)。 同樣如果有人在 Solana 之上啟動 Rollup,它也不會神奇地成為一個「模組化」區塊鏈。
因此,當你聽到人們將乙太坊或 Celestia 等鏈稱為「模組化」區塊鏈時,請意識到這更多是一種實際區別,而不是嚴格的技術區別。 兩者通常都在優化自己的架構以支援 Rollup。 這些 Rollup 預計將處理其範圍內的大部分交易執行。
即使 Rollup 也不一定完全「模組化」——Rollup 排序器可以就交易排序達成共識,提供 DA,並在主鏈執行任何操作之前執行交易。 這就是用戶獲得預先確認的方式。 然後主鏈提供另一個「最終」承諾,再次聲明 DA 和對 Rollup 交易順序的共識。
Rollups 與「集成鏈」(Integrated Chains)
對於我們的目的而言,更重要的區別是「Rollup」或「非 Rollup」。 鏈的最終狀態是否源自發佈到單獨主鏈(即 DA 層)的數據?
雖然我們今天將 DAS 和有效性 / 故障證明與傳統 Rollup 聯繫起來,但我們應該注意到這些在邏輯上是不同的概念。 理論上,任何「集成鏈」(例如典型的 Cosmos 應用鏈)都可以升級以添加 DAS 和有效性證明,而無需將其數據發佈到乙太坊等其他外部主鏈。 節點將單獨對該鏈進行採樣和檢查證明。
Vitalik 在他的《終局之戰》(Endgame)中談到了這一區別:
你可能會注意到,添加 DAS + 有效性 / 故障證明的「傳統大區塊鏈」(集成鏈)最終可能看起來像一個「內置 Rollup」(enshrined rollup)! 類似地,「一個可擴展和佔主導地位的 Rollup」可能會變得非常成功,以至於它只是與其主鏈合併以容納該 Rollup。
區分的界限在極限處變得模糊。
因此,如果你相信 DAS + 有效性 / 故障證明是最終結果,那麼某種意義上的「Rollup」是不可避免的。 上圖中的兩種方法之間存在有效的區別:
- 「Rollups」又名「模組化」——構建邏輯上獨立的鏈,將數據發佈到其主鏈(DA 層),重用主鏈的共識;
- 「集成區塊鏈」又名「單片區塊鏈」——將所有內容集成到具有自己共識的一個協定中,不將數據發佈到單獨的主鏈(即使 DA 層和執行層在某種意義上是共用協定的邏輯上獨立的部分);
當我們在本報告中討論「Rollup」時,我們將指的是前者(即不是具有 DAS + 有效性 / 故障證明的集成鏈,這可能被稱為內置 Rollup)。
雖然「傳統」Rollup 並沒有壟斷 DAS 或證明(即集成的大型區塊鏈可以添加它們),但請注意,我們在這裡忽略了很多技術細節,你不能只選擇 Solana 並決定「哦,我想我們今天就添加 DAS」。
這需要從根本上重構協定,以開始接近我們所看到的乙太坊和 Celestia 正在做的事情:
改變數據編碼方式以支援 DAS 將等同於減慢區塊編碼和傳播速度,開始更接近傳統的 DA 層:
出於這個原因,我們看到團隊構建了以下內容:
- 專門的 DA 層(例如乙太坊的 Danksharding、Celestia 等)- 慢速區塊 + DAS;
- 共用順序器(例如 Espresso、Astria 甚至 Solana)- 實際上只是快速 DA 層,無需 DAS;
然而如果將快速區塊和 DAS 的時間分開,它們並不一定不相容。 例如,你可以想像像 Solana 這樣的鏈提供兩條不同的路徑:
- 快速路徑 – 繼續盡可能快地執行交易並傳播數據(就像今天一樣);
- 慢速路徑 – 以可以異步採樣的方式事後對數據進行編碼,為 DAS 節點提供稍微落後於共識的保證;
Anatoly 在播客中討論了 Eclipse 如何將乙太坊、Celestia 和 Solana 結合在一起,從另一端來看,你可以想像 DA 層在使數據可用於採樣之前添加更快的路徑:
在同一基礎層協定中提供兩條路徑可以有效地內部化快速共用排序,從而為基於 Rollup 提供有趣的設計。 請注意,目前這仍然是一個非常探索性的想法。
確認規則
有了背景知識,我們現在可以開始分解這些不同架構的安全屬性。
首先,節點通過運行「確認規則」(Confirmation Rules)來與任何區塊鏈進行交互:
「確認規則,是指由節點運行的輸出某個區塊是否被確認的演算法。 在這種情況下,在某些假設下,主要涉及網路同步和誠實股份的百分比,當滿足這些條件時,該區塊將被保證永遠不會發生重組」。
對於給定的鏈可以存在任意多個確認規則:
- 在確認比特幣交易之前你需要等待多少個區塊? 1? 6? 10?
- 你是否使用 LMD GHOST 確認基於乙太坊可用帳本的區塊,還是等待最終性小工具(Casper FFG)來確認?
- 你是否運行直接驗證每個區塊的完整節點,或者僅運行檢查共識簽署的輕節點?
- 你只是問 Infura 么?
由於每個確認規則可以做出非常不同的假設,因此即使與同一條鏈交互,它們也可以具有非常不同的安全屬性:
這種區別很微妙但很重要:
安全=安全性 + 活躍度
現在讓我們深入研究 Rollup 是否會從其主鏈「繼承安全性」。
繼承,也許更清楚地說,Rollup 總是「租用」而不是「繼承」其主鏈中的任何內容,它會為消耗的資源(DA)支付持續的成本,任何一方都可以選擇結束這種關係。 但這不是問題有趣的部分。
安全性,從現在開始我們將重點關注安全性。 演算法的安全(Security)由安全性(Safety)和活躍度(Liveness)組成:
- 安全性(不會發生任何不好的事情),兩個正常運行的節點所確定的最終狀態將永遠不會發生衝突;
- 活躍性(最終會發生好事),所有正常運行的節點將在有限時間內完成反映適合包含的交易的新狀態;
使用 Sreeram 的出色框架,我們可以將它們進一步分解為五個屬性,這些屬性共同確保確認規則的安全:
讓我們考慮一個具有 DAS + 有效性 / 故障證明的假設整合鏈的範例。 它的數據不會發佈到任何其他外部主鏈。 為了簡單起見,我們假設即時最終確定(例如 Tendermint),因此可用分類賬與最終確定分類賬之間沒有可用的區別(例如乙太坊的 Gasper)。
我们将考虑三个确认规则,可用于使用不同类型的节点来跟踪链:
- 共识验证器轻节点 – 验证共识证明(即信任诚实的多数共识)。
- 全验证者轻节点 – 验证共识 + 检查 DA(使用 DAS)+ 验证状态有效性(使用有效性 / 故障证明);
- 全节点 – 验证共识 + 直接验证 DA(下载所有数据)和有效性(执行所有交易并计算状态);
确认规则有安全属性,链没有
再次强调这一点,「我们通俗地谈论一条链是安全的,但实际上它是安全属性所附加的确认规则」。
让我们看一些例子。
CAP 定理
作为背景,CAP 定理告诉我们,没有一个账本可以同时满足这两个条件:
- 适应性(Adaptivity,又名动态可用性)– 在动态参与下保持活动状态(即如果大部分节点离线);
- 最终性(Finality,又名一致性)——在网络分区下保持安全;
共识协议往往分为两个部分,每个部分都满足上述条件之一:
- 最長鏈協定 – 這些協定(例如比特幣的中本聰共識)即使在活躍參與節點的數量可變(即它們是自適應的)時也能保證活躍性,然而它們在網路分區下並不安全(即沒有最終性);
- BFT 型協定 – 經典共識協定(例如 PBFT)實現了最終性,但沒有實現適應性;
比特幣確認規則
比特幣的共識並不提供任何硬性的經濟最終性。
節點在其本地檢視中觀察最長的鏈,每個使用者都可以自由應用他們喜歡的任何確認規則(例如接受具有 > k 個確認的區塊)。 標準是等待 6 個區塊確認,但這取決於你。
對於更高價值的交易,等待更長時間是合理的。 等待時間與安全性(即重組的可能性)之間需要權衡。
乙太坊確認規則
乙太坊的 PoS 共識(Gasper)乍一看似乎迴避了 CAP 定理。 然而,它實現了這兩個屬性,因為它包含兩個嵌套帳本:
- 動態可用的分類賬 – 如果網路未分區,則在動態參與下安全且活躍;
- 最終確定的前綴分類賬 – 始終安全可靠。 如果網路未分區並且有足夠的節點參與,則保持活動狀態;
Gasper 屬於「潮起潮落」(ebb-and-flow,又名雙帳本或雙確認規則)協定家族。 雙帳本設計不屬於 CAP 定理的範圍(即它假設單一確認規則)。 當網路分區時,最終確定的帳本落後於自適應帳本,但當網路修復時它會趕上。
這允許在用戶級別而不是在系統範圍級別解決適應性與最終性之間的權衡。 這是區塊鏈 CAP 定理在允許使用者依賴的適應性和最終性中,提出的「檢查點最長鏈」協定的一個特徵。 這些協議為個人使用者提供了最終性和適應性之間的選擇,而不是將其強加於整個系統級別。
Gasper 明確公開了兩個不同的確認規則,映射到上面提到的兩個帳本:
- 動態可用規則 – 保證適應性。 尊重最長鏈的區塊頭。 LMD GHOST 是用於確定最重子樹的分叉選擇規則;
- 最終確定規則 – 保證最終確定性。 尊重由最終性小工具確認的區塊。 Casper FFG 是應用在分叉選擇規則之上的最終性小工具;
正如論文中所討論的:
「更樂觀的自適應規則總是確認由更保守的規則標記為最終確定的區塊,並且可能在可變的參與水準期間確認更多的區塊。 客戶(用戶)根據個人喜好在確認規則之間進行本地選擇,而礦工遵循與這兩個確認規則一致的固定區塊提議規則」。
這允許系統中所有(誠實的)節點:
- 遵循通用的區塊提議機制;
- 但不同的節點可以選擇不同的確認規則;
無論參與程度如何,驗證者都會繼續延長最長的鏈(在不斷增加的高度上開採新區塊),但只有在有足夠的參與度時才會出現新的檢查點。
最長的鏈(包含最新的檢查點)可以在不同的鏈之間交替(即重組未完成的區塊),但無論網路條件如何(即最終性),檢查點都保證位於單個鏈上。
使用者的安全取決於他們遵守的確認規則。 快速區塊確認與更強的安全保證之間需要權衡。 賣咖啡的使用者可能更喜歡活躍性而不是安全性,但賣遊艇的使用者可能更喜歡安全性而不是活躍性。
乙太坊節點還可以將一些其他的中間確認規則啟發式應用於實際用途。 與其像比特幣那樣使用樸素的 k 個區塊作為自適應確認規則,我們可以添加其他啟發式方法,其中包括有關網路同步和驗證者誠實的假設。
這正是《乙太坊共識協定確認規則》中提出的內容,它提出了具有以下屬性的確認規則:
- 在理想條件下 – 規則將在其插槽之後立即確認新區塊;
- 在典型的主網條件下 – 該規則應該能夠在一分鐘內確認大多數新區塊;
該確認規則不能替代經濟最終性。 相反,它為相信網路同步將在不久的將來保持的使用者,提供了有用的啟發式方法。 讓我們比較一下兩者:
讓我們考慮一些例子,譬如你以 250 萬美元的 ETH 出價售賣一艘遊艇,以下是一些可能的確認規則:
- 全節點 + 等待最終結果——即使是惡意的大多數驗證者也無法欺騙你接受無效塊(例如產生假 ETH)。 如果他們付給你 250 萬美元的 ETH,然後嘗試稍後重組最終確定的區塊,他們將承受巨大的成本(至少三分之一的權益是可懲罰性削減的);
- 全節點 + 等待一個區塊——大多數惡意驗證者仍然無法欺騙你接受無效區塊,然而他們可以在一個有效的區塊中向你發送 250 萬美元的 ETH,乘坐遊艇離開,然後該區塊立即重組,如果有足夠的權益權重或較差的網路條件,這是可能的,它們沒有被懲罰性削減;
- 輕節點用戶端——惡意同步委員會可以對你撒謊,而不會受到任何處罰,買家就可以乘遊艇離開(請注意,這個同步委員會作為共識的子集是以太坊獨有的,其他具有更高效的輕節點客戶端支援的 PoS 鏈可以在驗證者數量較少的情況下檢查所有共識投票);
- MetaMask——你只是信任 Infura,向你買遊艇的人向 Infura 員工承諾他們可以在週末乘坐遊艇,所以他們對你撒了謊,你認為你已經拿到了 250 萬美元的 ETH,然後你交出了鑰匙;
Rollup 確認規則
與任何鏈一樣,節點使用不同的確認規則與 Rollup 進行交互。 Rollup 最強的確認規則將與其主鏈的共識一起最終確定。 Rollup 定序器可以暴露較弱的確認規則以獲得更好的用戶體驗(即為不耐煩的使用者提供快速預確認),但使用者也可以等待主鏈確認規則的完全安全性。
典型的 Rollup 交易流程大致如下:
- 使用者向定序器提交交易;
- 定序器對交易進行排序並給出預先確認;
- 確定性 STF 應用於有序交易以計算新的 Rollup 狀態;
- 更新的 Rollup 狀態承諾和相關交易數據最終發佈到主鏈;
交易數據發佈到主鏈后:
- Rollup 全節點 – 直接驗證提議的鏈狀態是否正確;
- Rollup 輕節點(包括驗證橋)– 無法直接驗證;
同一 Rollup 的不同觀察者使用不同的確認規則,因此他們在不同的時間最終確定其觀點:
- 假設發佈了完整的交易數據(不僅僅是狀態差異);
- 如前所述,Rollup 節點還必須運行主鏈完整節點或完整驗證器輕節點(或使用共識驗證器輕節點做出誠實多數假設)。 Rollup 輕節點可以作為附加軟體運行,也可以在主鏈節點內部隱式運行(即主鏈上的跨鏈橋合約驗證 Rollup);
使用者還可以通過信任定序器預先確認來更快地確認交易,甚至在主連結收數據之前也是如此。 如果定序器行為不當,安全性可能會失敗。 然後,一旦數據位於主鏈上(並且你已經檢查了 DA + 有效性),只有主鏈故障(例如乙太坊重組)才會影響你的安全。
因此,即使中心化排序器也不會真正降低「Rollup」的安全性。 你始終獲得符合你所需的確認規則的安全性。 無論 Rollup 具有基於定序器還是其他的設計,你都可以使用相同的確認規則(例如等待主鏈最終確定並檢查 Rollup 有效性)。 假設正確實施(例如,通過主鏈強制交易包含),你可以在相同的時間範圍內獲得相同的安全屬性,同時保持其他條件相同。
同樣,你可以想像乙太坊 L1 區塊生產者由於區塊時間緩慢而提供預先確認,這也不會讓「乙太坊」的安全性降低。 你只需決定是否使用另一條確認規則(安全性較低),直到乙太坊驗證器最終確定更高的安全性為止。
預先確認的想法非常符合 Vitalik 所描述的 Gasper 的邏輯:
總的原則是,你希望為使用者提供「盡可能多的共識」:如果存在 > 2/3,那麼我們會定期達成共識,但如果存在 < 2/3,那麼就沒有理由拖延而不提供任何內容,因為顯然儘管新區塊的安全級別暫時較低,但該鏈仍有可能將繼續增長。 如果單個應用程式對較低級別的安全性不滿意,則可以隨意忽略這些區塊,直到它們最終確定。
將所有這些結合在一起,當所有確認規則同時就帳本的相同狀態達成一致時,我們就有了一個「一致性區域」:
確認規則 – 安全和可訪問性
如果你的確認規則是信任由 SBF 運行的單個定序器,而不是信任由世界上最有信譽的驗證器組成的去中心化定序器,那麼你的安全性可能會更差,活性故障和重組是安全故障。
或者,你可以等待更強的(主鏈)確認規則變得可用。 那麼,在其他條件相同的情況下,不可信的定序器就不會影響你的安全性。 如果你正在賣咖啡,你可能馬上出發,但如果你要賣遊艇,你則需要仔細檢查主鏈確認資訊。
然而,如果每個人實際上都使用該確認規則來出售他們的遊艇,我們不能完全忽視「信任運行單獨定序器的隨機人選」確認規則潛在的較低安全性。 精確的設計是基於對給定用例在什麼時間所需的漸進承諾水準的平衡。
同樣,這也觸及了對 Solana 等高輸送量區塊鏈的真正批評。 人們實際上可以使用什麼確認規則? 你可能具有運行 Solana 完整節點的良好安全條件,但大多數人可能無法訪問該確認規則(即取決於資源要求和 / 或成本)。
直接驗證(即不僅僅是信任誠實的大多數)是這些系統的核心屬性。 因此,對於給定的確認規則,我們真正關心的是兩個方面——安全和可訪問性:
總之:
- 用戶通過確認規則與任何鏈進行交互;
- 一條鏈可以有任意多個確認規則;
- 安全是確認規則的屬性,而不是鏈本身的屬性;
- 我們關心給定鏈的確認規則的安全和可訪問性;
實際上,當我們說一條給定鏈是安全的時候,我們試圖表達這樣一個概念:其相關的確認規則既安全又可訪問。
Rollups 與整合鏈的安全性
1,帶有 DAS+ 有效性證明的集成鏈
我們現在看到,有關 DA 和狀態有效性的安全性可以直接通過加密技術(DAS + 有效性 / 故障證明)進行檢查,而無需對鏈的運營商進行強有力的假設。 任何協定都可以在技術上實現這些。 全節點還可以在沒有外部假設的情況下檢查 DA 和狀態有效性。
現在讓我們關注其他屬性 – 活躍度和抗重組。 正如我們之前所看到的,無論你運行哪種確認規則,這些都可能會失敗。 再看一條 DAS+ 有效性證明 +PoS 單插槽最終性的集成鏈:
選擇強大的確認規則對於安全故障的子集特別有效,即使大多數惡意驗證者也無法欺騙全節點或全驗證器輕節點,使其相信:
- 不可用的數據實際上可用;
- 或無效的狀態轉換是有效的;
無論乙太坊有 1 個驗證器還是無數個驗證器,全節點都或多或少地相信區塊的 DA 或有效性,他們通過檢查來得到保證。 完整驗證器輕節點可以以更簡單的方式進行檢查(但請注意,DAS 會做出一些其他假設,我們將在稍後討論)。
然而,惡意的大多數驗證器可能會阻止帳本增長、審查你或重組鏈(發生哪些失敗取決於確認規則)。 DAS + ZK 救不了你。 抗重組和活躍度在某種程度上總是依賴於給定鏈的各種底層屬性(例如可靠的運營商、經濟激勵、社會共識等)。
不太明顯的是,活躍度和抗重組仍然是給定確認規則的屬性,因為每個節點都會受到和上表中相同的攻擊。 無論這裡的確認規則如何,他們都有相同的保證。
然而,當你刪除單插槽最終性假設時,這一點再次變得明顯。 在乙太坊的 Gasper 中,根據你遵循的帳本(即可用的最長鏈帳本或檢查點最終確定帳本),你將再次擁有不同的活躍度和抗重組屬性。 大多數惡意驗證器會導致不同的安全失敗,具體取決於你運行的確認規則。
無論如何,關鍵是鏈的底層構建在這裡非常重要。 你需要強大的運營商、經濟激勵和社會共識來維持鏈的活躍度和抗重組。 此外,諸如乙太坊之類的雙帳本共識協定為使用者提供了寶貴的靈活性,可以根據自己的需求自行計算可用性與最終性。
2,使用 DAS + 有效性證明 Rollup
現在讓我們稍微修改一下這個例子:
- 上一個示例 – 具有 DAS + 有效性證明的集成鏈,想像一下採用今天的 Solana,但添加 DAS + 證明;
- 新示例 – Rollup 部署在外部主鏈(例如乙太坊)上,具有有效性證明 + DAS(注意乙太坊 DAS 尚未上線),Rollup 有一個去中心化的定序器集,可以達成快速預確認的共識;
你會注意到,Rollup 對於不同的時間範圍有兩類完全獨立的確認規則(即無論你是基於定序器的預共識進行操作還是等待主鏈的最終共識),我們現在來看看每條路徑。
快速路徑 – 在主鏈共識之前
Rollup 節點可以依賴定序器的確認(在發佈到主鏈之前),我們假設他們可以運行以下 Rollup 節點:
- Rollup 共識驗證器輕節點 – 信任 Rollup 定序器共識中誠實的大多數;
- Rollup 完整驗證器輕節點 – 在定序器的 feed 上運行 DAS + 在將任何內容發佈到乙太坊之前檢查有效性證明;
- Rollup 全節點 – 從定序器的 feed 中下載所有數據並執行所有交易,以直接檢查 DA 和有效性;
從技術上講,Rollup 定序器可以促進 DAS 並在發佈到主鏈之前提供有效性證明,但實際上這不會發生。 完整驗證器輕節點通常旨在通過主鏈檢查這些,但是我假設「即時」DAS + 證明可以與集成鏈進行更清晰的同類比較。
下表是與集成鏈示例相比的變化:
- 依靠 Rollup 定序器來實現活躍度和抗重組,而不是集成鏈的驗證器集;
- 只是刪除了最終的活躍度屬性,因為在這裡只查看主鏈共識之前的時間範圍(這些「最終」活躍度屬性稍後將來自主鏈);
刪除內容以紅色刪除線顯示,添加內容以藍色顯示:
慢速路徑 – 等待主鏈共識
為了額外的安全性,節點可以等待主鏈(例如乙太坊)的共識,這就是更清楚地發揮作用的地方,即 Rollup 節點也應該運行主鏈節點:
- 主鏈共識驗證器輕節點 – 信任主鏈誠實的多數共識;
- 主鏈全驗證器輕節點 – 檢查主鏈的有效性證明 + 在主鏈上運行 DAS(包括 數據 Rollup+ 主鏈數據);
- 主鏈全節點 – 下載所有主鏈數據(包括檢查 Rollup 數據)+ 執行所有主鏈交易以直接檢查有效性;
請注意,可以通過兩個不同的路徑驗證 Rollup 的狀態有效性:
- 主鏈外部(運行額外的 Rollup 節點軟體) – Rollup 不需要其主鏈來驗證其狀態或 STF,不需要部署驗證橋,相反可以通過另一種方法檢查 Rollup 證明(例如通過 p2p 接收 Rollup 證明),這需要運行額外的 Rollup 節點軟體來驗證證明(即 Rollup 輕節點);
- 主鏈內部(在主鏈內部實現 Rollup 節點) – 這是當今的常態,Rollup 輕節點驗證器邏輯是部署在主鏈本身(即 Rollup 的內置橋合約),由於此 Rollup 驗證器節點在主鏈的 STF 內運行,因此驗證主鏈的 STF 也就意味著驗證 Rollup 的 STF;
如果我們得到一個可零知識證明的主鏈(例如乙太坊 L1 zkEVM)+ 所有 Rollup 都證明它們在主鏈內部的狀態→我們就得到了 Vitalik 對奇點證明的願景。 驗證乙太坊的一個零知識證明意味著驗證所有其他鏈及其內部實現的驗證節點:
為了簡單起見,我們在這裡假設 Rollup 的狀態有效性是在主鏈本身內驗證的(例如 Rollup 與主鏈有一個內置的橋),因此我們可以忽略顯式運行協定外的附加 Rollup 節點軟體。
與之前的「快速路徑」Rollup 表相比的變化如下:
通過主鏈強制交易包含或強制定序器 / 證明器替換來實現,我們在這裡稱之為「最終」活躍度,因為從 Rollup 的角度來看,它是一條慢速路徑,但從主鏈的角度來看,這可以被視為「即時」活躍度。
Rollup 與集成區塊鏈
現在我們可以看到與集成區塊鏈和 Rollup 相關的安全屬性變化:
- DA 和狀態有效性 – 如果實施,DAS + 有效性證明可以提供適用的安全保證,無論鏈是集成的還是傳統的 Rollup。 實際上,如今這些技術以 Rollup 為主;
- 活躍度和抗重組(Liveness & Re-org Resistance)- 集成區塊鏈在所有場景中獨立負責這些。 相反 Rollup 提供了不同時間範圍內確認規則的選擇。 你可以採用不太安全的確認規則(信任定序器共識)來獲得快速保證,或者等待更安全的確認規則(等待主鏈共識);
活躍度和抗重組
無法通過密碼保證這些屬性,即使跨越確認規則(例如無論運行全節點還是輕節點),你也可能容易受到安全故障的影響。
如果運營商完全失控,沒有完整的節點或 ZK 證明可以保護你免受活躍度故障或重組的影響。
這些屬性是通過強大且去中心化的運營商、抗審查機制、有利於活躍度的共識、重組的高「成本」、強大的社會共識等來實現的。 客觀比較這些通常具有挑戰性。
你如何衡量運營商去中心化和社會共識? 沒有一個正確答案。 這些可以說是最難設計的方面,而且它們對於給定的鏈來說確實是非常獨特的。
重要的是,我們看到 Rollup 可以將抗重組和活躍度委託給主鏈,Rollup 上使用的確認規則可以具有相同的安全屬性,就像它們在同一時間範圍內在主鏈上運行一樣。
鏈甚至可以選擇將哪些屬性委託給哪個鏈,不同類型的「L2」架構(例如 validiums、optimism 和側鏈)可以吸收不同的安全屬性子集。 例如:
- 抗重組 – Rollup 可能會將抗重組委託給乙太坊,它的分叉選擇規則是根據乙太坊共識確認的內容來選擇「規範鏈」。 如果乙太坊重組,Rollup 也會重組。
- 活躍度– 但是,如果 Rollup 缺乏強制包含和強制操作員替換機制,則 Rollup 使用者仍然不會收到乙太坊的活躍度屬性;
Rollup 還可以為使用者提供退出 Rollup 的逃生通道,但保留審查使用者並防止存款進入 Rollup 的能力(例如 Loopring 就是這樣工作的)。 如果存款在一段時間后仍未得到處理,使用者可以從 L1 合約中提取鎖定的資金。
這凸顯了此類機制的重要性。
數據可用性和狀態有效性
與活躍度和抗重組不同,節點可以確保 DA 和狀態的有效性,而無需做出任何大的閾值假設(或無需在兩者之間進行安全權衡)。 惡意的大多數區塊生產者可能會導致活躍度和重組失敗,但它們不會導致全節點或全驗證器輕節點的 DA 或有效性失敗。
然而,共識驗證者輕節點當然會受到誠實多數的狀態有效性和 DA 失敗的影響。 他們只是相信共識所說的一切。 這就是為什麼 DA 和狀態有效性是使安全確認規則易於訪問並真正發揮作用的原因。 這通常是傳統 Rollup 與不太重視使用者驗證的大型區塊鏈之間在意識形態上的巨大差異。
按照順序,這些通常是平衡安全性和可訪問性的首選方法:
- 使 DAS 和有效性證明可供廣泛使用;
- 如果你沒有 DAS 和 / 或有效性證明,則使完整節點可廣泛訪問(即資源要求低、易於運行等);
- 如果你沒有 DAS 和 / 或有效性證明,並且完整節點基本上無法訪問,那麼請使共識驗證者輕節點廣泛訪問,並擁有值得信賴的誠實多數共識;
- 訪問 Infura;
請注意,2(完整節點)實際上是最安全的。 ZK 驗證非常簡單,但 DAS 節點做了一些完整節點沒有的額外假設。 然而,它們提供與完整節點接近相同的安全性,而資源需求只是其中的一小部分,它們是可擴展的。
全節點只需下載所有數據,因此具有 100% 的確定性。 只有當一切都在那裡時,他們才會在區塊上簽字。 沒有對外部各方做出任何假設。
DAS 的目標是獲得幾乎與全節點一樣好的安全性,同時資源需求大幅降低(即更高的規模)。 這篇關於輕節點數據可用性安全級別的文章很好地涵蓋了這一點。
簡而言之,你通常會圍繞網路同步性以及是否存在足夠的節點來重建數據做出一些假設。 如果敵對區塊生產者隱瞞任何數據,即使是一小部分誠實的輕節點也應該能夠集體重建區塊。 關於選擇性份額披露還存在一些假設,其中敵對區塊生產者可以單獨欺騙一些少量的輕節點,但不能集體欺騙。
相對於典型的大致「N/2」假設(例如,51% 的區塊生產者可以導致重組),這些「N 中少數」假設(例如,誠實的少數節點可以確保 DAS 安全)非常有利。 Vitalik 在信任模型的帖子中對此進行了很好的介紹。
總體而言,DA 和狀態有效性並不像活躍度和抗重組那樣由 Rollup「委託」。 DA 和狀態有效性可由使用者直接驗證,而其他屬性更嚴重地依賴於鏈的共識參與者及其激勵。
回顧一下之前驗證 Rollup 證明的範例:
- 將 Rollup 的 ZK 證明發布到乙太坊智能合約,你運行一個乙太坊完整節點,隱式驗證該證明;
- 將 Rollup 的 ZK 證明發送到我的 Rollup 輕節點,直接驗證證明;
無論哪種情況,你都可以保證有效性。 無論你在哪裡檢查,都無法確定其有效性。 乙太坊並沒有像乙太坊節點「強制」抗重組或活躍屬性那樣真正「強制」有效性。 抗重組和活力很大程度上取決於你從誰那裡獲得它們。
考慮基於詐騙鏈的 Rollup:
- Rollup 的分叉選擇規則是遵循詐騙鏈確認的鏈尖(the tip of the chain)→ 如果詐騙鏈重組,Rollup 也會重新組織;
- Rollup 的強制包含機制和定序器刪除是通過詐騙鏈上的跨鏈橋接合約強制執行的→ 如果詐騙鏈的帳本停止,那麼 Rollup 的帳本也會停止。 如果詐騙鏈想要審查你的 Rollup,那麼你就會受到審查;
Rollup 能夠公開具有與其主鏈相同的安全屬性的確認規則,他們最多可以按照其主機鏈共識的速度接收這些屬性(實際上,它通常會慢一些,具體取決於 Rollup 發佈到主鏈的頻率)。
Rollup 還可以提供「快樂路徑」更寬鬆的確認規則(即定序器)以獲得更好的用戶體驗,但它們保留了失敗時的交易回退。 如果你的定序器停止了,你可以繼續移動。 但是,如果你的鏈完全依賴於你自己的驗證器集(即作為集成鏈),則情況並非如此。
明智地選擇 Rollup 的主鏈會對安全屬性產生具體的影響。 利用具有強大活躍度(帳本增長 + CR)和抗重組特性的主鏈尤其有價值。
不同時間段的不同安全假設
讓我們看一個簡單的例子。 Chain X 正在決定是在現有主鏈上部署為 Rollup,還是部署為自己的集成區塊鏈。
Rollup 具有以下特點:
- 10 秒的出塊時間;
- 可支援 DAS 輕節點
- 可以提供關於活躍度和抗重組的「高安全性」確認規則(例如去中心化的可信驗證器等);
集成區塊鏈具有以下特點:
- 出塊時間為 1 秒;
- 可以實現 DAS 輕節點和有效性證明,無論它是作為集成區塊鏈還是作為 Rollup 啟動;
- 如實現中心化定序器 – 它將提供有關活躍度和抗重組的「低安全性」確認規則;
- 如果實現自己的去中心化共識(作為預確認的 Rollup 定序器集或作為集成鏈驗證器集),它將提供關於活躍度和抗重組的「中等安全性」確認規則;
下表給出了用戶在各種實現下可能擁有的最佳安全保證的簡化直觀表示(即他們使用可用的最強確認規則)。 特別是,我們在這裡關注活躍度和抗重組(因為我們假設該鏈將在這兩種情況下僅實現 DAS + 有效性證明):
Rollup 的「最终安全性」高于其「实时安全性」,因为主链无法为我们提供比其自身出块时间更快的保证。即使你可以检查定序器的预确认是否是有效的状态转换,但在它们最终到达 DA 层之前,你也无法完全保证它们的最终性。
但正如我们所看到的,以 Rollup 方式部署到强大的主链可以增强安全性。他们可以按照其主链的速度租用安全性。从根本上说,没有办法以比主链自身共识更快的速度获得主链的全部安全属性。
然而,用户往往不耐烦。因此,Rollup 通常会提供更快的预确认,但在此期间的保证会较低。Rollup 可以选择一个平衡的定序器设计:
- 实用的功能和效率。例如中心化定序器可以提供快速的预确认并减少运营开销;
- 强大的保证。例如一个令人难以置信的去中心化定序器集可以提供更好的实时活跃度性,但代价是更高的运营成本和延迟(在最极端的情况下,你只需让 DA 层处理 Rollup 的排序,选择不公开更快的路径);
有趣的是,你可以认为 L1 排序 Rollup 的活跃度比中心化定序序器更差,具体取决于你的时间尺度。到目前为止,我们已经讨论了活跃度,将其纳入某种「有限时间」的概念中。然而,这完全是相对的和主观的。相对于什么?需要多少时间?
单纯的 L1 顺序 Rollup 将仅以 L1 区块的速度(例如 10 秒)包含在内,当你周围的世界在变化时,你在这些区块之间没有活跃度保证。所以这取决于你的基准:
- 如果基准 = Rollup 内部的操作,L1 顺序 Rollup 可能会提供更好的活跃度。在主链确认之前,链上的其他人不应该得到承诺,所以你们都处于平等的地位;
- 如果基准 = Rollup 外部的操作– 具有软性预确认的 Rollup 可以提供更好的活跃度。预确认只是一个免费选项,你仍然以主链的速度回退到主链保证,但在此期间你可以获得较弱的保证。如果你不信任他们,只需等待主链确认即可。世界不会在以太坊区块之间冻结,对于许多应用程序来说,长区块时间之间的过时价格可能是不可接受的;
如果你尝试在没有预先确认的情况下实现基于「真实」的 Rollup,则甚至有可能无论如何都会出现预先确认。对于参与者(例如以太坊构建者和验证者)来说,他们自己做出这一承诺是有经济激励的。这正是为什么有人讨论以太坊建设者和利益相关者如何尝试在基础层提供快速预确认。
这里有最后一个重要的说明。假设 Rollup 用户可以回退到与主链相同的活跃度,假设你可以完全以主链区块的速度强制包含(例如如果 Rollup 排序器正在审查你,你可以强制将交易包含在主链下一个以太坊区块)。
在实践中,通常会有短暂的延迟。如果你允许立即强制包含,你可能会暴露有利可图的审查 MEV 以及其他复杂性。然而,有些设计可以从主链提供近乎实时的活跃度保证(例如,可能以几个主链区块而不是一个区块的速度)。
无论确切的时间尺度如何,吸收主链的最终活跃度都是非常强大的,使用强大的主链作为协调机制提供了可信的威胁和退出权利。仅仅暴露这种可信的威胁本身,就使得它极不可能被需要从而从一开始就防止恶意行为。
例如,如果用户有可靠的机制可以强行退出甚至强行删除运营商,那么中心化的 Rollup 定序器就不能随意从用户那里提取租金并将其锁定。这是 Chris Goes 关于 MEV 转换成本边缘和慢游戏的演讲中讨论的一个一般领域。
当然,意外的活跃度也可能发生,在这种情况下,此备份路径可能再次非常有价值。
证明并不保护链,而是保护用户
遵循这一切,我们可以看到,对于给定的确认规则,证明更准确地保护 Rollup 的不同「观察者」(用户),而不是保护「Rollup」本身。「Rollup」的安全性并不作为单一的具体措施而存在。
确保观察者的安全当然是最重要的,因为我们都是链的观察者!这条链就是它的观察者所说的任何东西。如果你无法以安全的方式观察它,你就必须信任其他人(例如验证者)来告诉你它的「真相」。但我们不想信任,我们想要验证→我们想要证据。
要了解为什么区分「证明保护链」和「证明保护链的观察者」很重要,请考虑以下事项:
- 轻节点 – 如果有证明,则 Rollup 轻节点会更安全,他们不必相信任何人的话的有效性;
- 全节点 – 如果有证明,则 Rollup 全节点的安全性不会增加或降低,你可以在没有内置桥甚至任何证明的情况下启动 Rollup(「pessimistic rollup」),如果你开始发送有效性证明,全节点的安全性不会增加或降低;
证明为无法直接检查其有效性的链观察者(即轻节点)增加了安全性。我们不希望用户必须运行强大的全节点,因此这些证明很重要。
证明确保 Rollup 桥的安全
Rollup 的验证桥是一个极其重要的观察者!证据确实保证了桥的安全!
与任何典型的轻节点一样,网桥无法直接检查 Rollup 的有效性。我们不相信诚实的多数,而是用证据来保护桥梁。数据库 A(DA 层)的共识协议对数据 blob 进行排序,然后验证桥独立检查数据库 B(Rollup)相应更新的有效性:
桥是另一条链的观察者,它铸造的每一项资产总是带有对应桥的确认规则的安全假设。其确认规则的安全性可以产生广泛的影响。这就是为什么建立安全的桥如此重要(或者理想情况下,首先通过进一步扩展单链执行来减少对如此多的桥的需求)。
如果你为该链运行全节点,则恶意方无法诱骗你接受无效的状态转换。然而,如果恶意方有不同的确认规则,它仍然可以欺骗桥。如果你在该桥中持有有抵押品支持的资产,那么你的资金可能会变得没有支持。从这个意义上说,欺骗桥的安全故障是「传染性的」。
让我们考虑一个关于 Terra 的旧假设场景:
- Terra 有自己的验证器集,其原生代币是 LUNA,并且可以发行原生 UST;
- Osmosis 有自己的验证器集,其原生代币是 OSMO。
- 我们有一个标准的 Terra ←→ Osmosis IBC 桥,其中每一侧都运行另一条链的共识验证器轻节点(即桥的每一侧都依赖于另一条链的验证者集的诚实多数);
- 你作为用户运行每个链的自己的全节点;
- 我们将通过 IBC 桥接的 Osmosis 上的 UST 称为 osmoUST;
- 我们将通过 IBC 桥接的 Terra 上的 OSMO 称为 terraOSMO;
- 你在 Terra 上拥有 terraOSMO;
- 你正在 Osmosis 上的 osmoUST/OSMO 池中做 LP;
随着 Terra 的崩溃,LUNA 的价格暴跌,最终,理论上变为恶意验证器集的的利润将超过所质押的 LUNA 的价值,Terra 验证器可以签署无效区块,并执行以下操作:
- 铸造假 UST → 跨链到 Osmosis 以铸造 osmoUST,使用它来耗尽所有 osmoUST 交易对(例如,从 osmoUST/OSMO 池中取出所有 OSMO;
- 铸造假 terraOSMO → 跨链到 Osmosis,以撤回锁定在 Osmosis 上支持 terraOSMO 的所有原生 OSMO 抵押品,Terra 上剩下的所有 terraOSMO 现在都将不再受支持;
那么,这里的安全性就失败了:
- 全节点(我)– 我的全节点将 Terra 区块识别为无效的并拒绝它们,Terra 验证者不能窃取我的 terraOSMO 或 osmoUST/OSMO LP 位置;
- 轻节点(桥)– 桥只是检查 Terra 的共识是否在区块上签字(不检查有效的状态转换),因此它不会拒绝它们,Terra 验证者可以窃取支持我的 terraOSMO 的 OSMO 抵押品,并从 osmoUST/OSMO 池中耗尽所有 OSMO(留下一堆毫无价值的 osmoUST);
该桥使用了具有更强信任假设的确认规则。
Terra 驗證者無法從完整節點竊取 Terra 本身的大量資產(他們不會被欺騙),他們會拒絕這些區塊。 然而,驗證者可能會欺騙共識驗證器輕用戶端(包括橋),這就是為什麼共識錯誤會影響跨鏈資產。
請注意,重要的是,這些故障不會「傳染」到鏈的其餘部分,即該故障會「傳染」到暴露於 Terra 橋路線的 Osmosis 資產,但 Osmosis 鏈本身不存在安全故障。
然而,我們顯然想要橋接東西(一般來說,跨鏈通信),僅限於使用其主鏈上的原生資產會很糟糕,我們需要鏈來安全地通信和跨鏈橋接。
作為一個思想實驗,最簡單的解決方案就是讓每個用戶運行每個鏈的全節點,這包括跨鏈橋本身。 請記住,我們已經看到了一些單向嵌入式全節點橋:
- 乙太坊 Rollup 目前都要求其節點運行乙太坊全節點,這些 Rollup 共用乙太坊的共識;
- Namada(一條單獨的 Tendermint 鏈,而不是 Rollup 鏈)將要求其節點運行乙太坊全節點,然而 Namada 不同意乙太坊的共識(即它不會將數據發佈到乙太坊或基於此得出其狀態);
這適用於乙太坊全節點,但這顯然無法擴展。 你無法開始讓每個 Cosmos 鏈只需要運行每個其他 Cosmos 鏈的全節點。 這些雙向全節點橋不會擴展,它們只是增加硬體要求。
幸運的是,有一個更具可擴展性的選項。 我們可以部署橋來充分驗證另一條鏈的狀態有效性和 DA(除了仍然檢查共識之外)。
狀態有效性 – 雖然 IBC 目前與傳統共識證明一起使用,但可以對其進行修改以添加連接鏈的有效性證明,現在橋不會被無效的狀態轉換所欺騙。 這本來可以準確地防止前面描述的攻擊,如果橋能夠驗證狀態轉換的有效性,則會將 Terra 驗證器的區塊視為無效而拒絕。
這看起來與乙太坊上的 Rollup 橋如何檢查 Rollup 證明非常相似,只不過這裡也可以是雙向的。
DA – 此外,鏈可能要求其節點運行連接鏈的 DAS 輕節點。 例如你可以讓這兩個 Cosmos 鏈需要它們自己的驗證器來運行另一個鏈的 DAS 輕節點(如果每個鏈都實現了 DAS 輕用戶端,而這些鏈目前不支援)。 完成此操作后,每個鏈現在都可以知道彼此的有效性和 DA,而無需運行全節點。
對於 Rollup,根據定義,你擁有主鏈上的所有數據,因此那裡的橋可以訪問它。 另一方面,Rollup 節點運行主鏈節點。
依賴鏈與獨立鏈
讓我們再看一次我們的五個安全屬性,現在在乙太坊上觀察 Rollup 的 Rollup 驗證橋的背景下:
- 帳本增長——乙太坊驗證器可以強制 Rollup 的帳本繼續增長(例如強制包含交易);
- 抗審查 – 乙太坊驗證器可以強制 Rollup 的運營商不會無限期地進行審查(例如強制交易包含或定序器替換);
- 抗重组 – Rollup 的抗重组与以太坊相关。如果以太坊重组,那么以太坊上的所有 Rollup 都将重新组织在一起;
- 数据可用性 – Rollup 的 DA 得到保证,因为 Rollup 根据定义是从主链共识(Rollup 合约所在的位置)确认的数据派生的,Rollup 和主链共享合并共识,DA 是以太坊本身的有效性条件,因此如果数据不可用,那么以太坊区块本身就是无效的。桥可以访问主链上的数据,无需添加信任假设;
- 状态有效性 – 合约将检查 Rollup 状态转换的有效性证明(或等待挑战窗口通过),这证明所声明的状态更新是在主链上确认的相应数据上应用 Rollup 的 STF 的有效结果;
请注意,桥的安全性不仅仅通过附加链的超强确认规则(例如,到具有超级值得信赖的验证器集的链的完整验证器桥)来最大化。如果桥具有与主链相同的安全性假设,则你可以在跨链原生资产时获得最大的安全性。
Vitalik 提供了一个有用的说明性示例:
「你將 100 ETH 轉移到 Solana 上的一座橋上,得到 100 Solana-WETH,然後乙太坊受到 51% 的攻擊。 攻擊者將自己的一堆 ETH 存入 Solana-WETH,然後在 Solana 方面確認後立即在乙太坊端恢復該交易。 Solana-WETH 合約現在不再得到完全支援,也許你的 100 Solana-WETH 現在只值 60 ETH。 即使有一個完美的基於 ZK-SNARK 的橋接器完全驗證共識,它仍然容易受到像這樣的 51% 攻擊。
因此,在乙太坊上持有乙太坊原生資產或在 Solana 上持有 Solana 原生資產總是比在 Solana 上持有乙太坊原生資產或在乙太坊上持有 Solana 原生資產更安全。 在這種情況下,「乙太坊」不僅指基礎鏈,還指構建在其上的任何適當的 L2。
如果乙太坊受到 51% 攻擊並恢復,Arbitrum 和 Optimism 也會恢復,因此即使乙太坊受到 51% 攻擊,在 Arbitrum 和 Optimism 上保存狀態的「交叉 Rollup」應用程式也能保證保持一致。 如果乙太坊沒有受到 51% 攻擊,那麼就沒有辦法分別對 Arbitrum 和 Optimism 進行 51% 攻擊。 因此,持有基於 Arbitrum 的 Optimism 發行的資產仍然是完全安全的。
你可以用任何你想要的鏈替換 Solana – 甚至是你在信任方面超過乙太坊驗證器的假設鏈,從根本上講,當你談論將資產與其記錄帳本(例如,來自乙太坊的 ETH)跨鏈時,任何安全假設都是附加的,並且連接的鏈總是有可能重組或出現活躍度故障。
然而,具有合併共識的鏈(即共用其主鏈共識的 Rollup)可以迴避這些額外的安全假設。 這些不同區域之間的跨鏈橋可以具有與主鏈本身相同的最終活躍度和抗重組屬性。 共享共識最大限度地減少了該共用安全區域內的跨鏈信任假設。
什麼是合理的安全假設由你決定。 實際上,各大鏈之間還沒有出現過類似的共識失敗的情況。 這將是顯而易見的,且成本高昂,但這可能是連接較弱鏈的更強有力的假設。
將 Rollup 鏈綁定到主鏈也有一些缺點。 讓我們比較兩種跨鏈場景,在這兩種情況下,我們都有兩個使用雙向全驗證器跨鏈橋接的鏈:
- 依賴 – 遠端鏈(即 Rollup)共用主鏈(即 DA 層)的共識,並從主鏈上的數據導出自己的狀態,遠端鏈必須與主鏈一起分叉,並以主鏈為基礎確定其最終性;
- 獨立 – 這些鏈有自己獨立的共識,它們不會根據其他鏈上的數據得出自己的狀態。 它們不共享遠端鏈(即 Rollup)←→主鏈(即 DA 層)關係。 它們不會重組在一起,也不依賴於對方的活躍度;
有趣的是,這些都有好有壞:
- 壞 – 將你的鏈與其他鏈進行重組或出現活躍度故障乍一看可能聽起來像是一個缺點,為什麼我的鏈會因為你的鏈壞了而出現問題?
- 好 – 如果這種分歧會在你的鏈上造成嚴重問題,這實際上是一個重要的好處(例如如果你有大量來自源鏈的跨鏈資產,那麼它會從你的跨鏈橋接器的角度進行重組,留下無支援的抵押品),鏈及其跨鏈橋需要彼此一致;
同樣,鎖定和過度尋租也存在潛在的積極和消極影響,這凸顯了為什麼中立且抗審查的基礎層如此重要:
- 好 – 良好的主鏈可以保護 Rollup 使用者免受 Rollup 運營商從他們身上榨取過多價值的影響,從而強制執行退出許可權;
- 壞 – 糟糕的主鏈可能會任意抬高價格,並從 Rollup 及其使用者本身中提取該價值;
提交證明 + 雙向運行 DAS 而不是共用公共主鏈也存在一些低效率:
- 你不想要求你的節點運行一堆其他鏈的 DAS 輕節點,並且必須手動添加新鏈,在一個巨大的共用 DA 層上運行 DAS 效率要高得多;
- 對於每個鏈來說,為許多不同的鏈雙向驗證有效性證明是低效的,然而,理論上可以聚合多個鏈之間的證明,這樣整個鏈集群只需將一個證明發佈到鏈上;
這裡有權衡和好處,但也要記住,有趣的資產在哪裡存在巨大的路徑依賴性,如果你想使用一堆乙太坊原生資產(包括其 Rollup 中的資產),那麼將你的鏈紮根於乙太坊及其跨鏈橋是有意義的。
結論
「Rollups 繼承安全性」是一個很好的簡寫,但請記住這些是我們真正的意思的關鍵點:
- Rollup 向其主鏈(例如乙太坊)支付其消耗的資源(DA)的租金;
- Rollup 可以公開具有高達主鏈的安全屬性的確認規則(即使用者可以獲得與在主鏈本身上操作時相同的安全保證);
- 使用者以主鏈共識的速度獲得這些主鏈安全屬性;
- 如果 Rollup 使用者希望比主鏈提供的確認速度更快,他們可以使用確認規則,該規則會做出額外的臨時安全假設;
- 觀察者(即使用者)通過確認規則與 Rollup 進行交互,具有最小信任假設的驗證橋就是這樣一個(可選但非常有價值的)觀察者;
現在,考慮在集成鏈上部署 Rollup 的好處:
使用者安全 – 無論你是否想要實現任何跨鏈橋,Rollups 都可以從其主鏈租用 DA 並回收其共識,這允許 Rollup 向其使用者公開與主鏈匹配的確認規則,無需達成自己的共識;
跨鏈安全性 – Rollup 可以在主鏈的共用安全域(即主鏈本身及其 Rollup)內構建跨鏈,其安全屬性與在主鏈本身上操作相當;
我們應該看到,這實際上是一幣兩面,Rollup 只是允許鏈提供確認規則,其安全性可達主鏈的安全性。 跨鏈橋和普通使用者都是具有給定確認規則的鏈的觀察者。 橋可能是這些鏈中最重要的「觀察者」,因為它們的安全具有廣泛的影響。
當我們嘗試創建安全系統時,我們需要關心給定確認規則的安全性以及它們的可訪問性。 如果大多數與這些鏈交互的觀察者(使用者)無法觸及,那麼安全確認規則就沒有多大説明。
雖然我們今天將 DAS 和有效性證明與 Rollup 聯繫起來,但它們在邏輯上是獨立的概念。 任何鏈都可以集成這些技術,並且什麼是 Rollup 或不是 Rollup 的區別在終局時開始分解(即對於單個整合的 Rollup 來說,它可能在一個協定下具有邏輯上獨立的 DA 和執行層)。
然而,「傳統 Rollup」和 DA 層顯然在當今的這些驗證和擴展技術中佔主導地位。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。