Rollup 和 L2 真的如同大多數人所鼓吹的那般美好嗎?它真的像人們所認知的那樣安全嗎?一個必須思考的問題是該如何降低多簽和安全委員會帶來的信任風險。
(前情提要:面臨Rollup時代,Opside如何共建ZK生態? )
(背景補充:科普|Rollup分類有幾種?除了Validity、Optimistic之外還有.. )
自 Solana 逐步衰落和 OP 發行 Token 以來,Layer2 和 Rollup 似乎成為了無數 Web3 從業者新的港灣。隨著熊市的持續蔓延和 FTX 暴雷出局、Multicoin 損失慘重,以太坊的競爭對手們陸續淡出了 Web3 這個大舞臺,不斷失去了和 ETH 一較高下的底氣。越來越多的人開始將 Rollup 視為新一輪敘事核心,越來越多的專案如同雨後春筍般在 L2 上紮堆湧現。
但這一切是否是 「虛假的繁榮」,是否是 「隨時可能被戳破的泡沫」?Rollup 和 L2 真的如同大多數人所鼓吹的那般美好嗎?它真的像人們所認知的那樣安全嗎?且不談許多 OP Rollup 沒有欺詐證明,Rollup 的安全隱患還有哪些?
本文受到 L2BEAT 近期發布的 「Upgradeability of Ethereum L2s」 啟發,針對 Rollup 升級背後的多簽與委員會信任風險,及此前關於 Rollup 的老生常談,聯想到前不久的 Multichain,綜合聊下 L2 為何不像許多人所想的那麼 「美好」。
Rollup 原理簡述
(如果你已經熟悉 Rollup 的原理,可以直接越過下面的許多段落,往後拉)
以太坊 Rollup = Layer1 上的一組合約 + Layer2 網路自己的節點。
Layer2 網路節點這個群體可以拆分出幾類角色,其中最重要的當屬定序器(Sequencer)。它接收 Layer2 上發生的交易請求,決定它們的執行次序,然後把交易序列打包為批次(Batch),傳送給 Rollup 專案在 Layer1 上的合約(下文中將統稱為 Rollup 合約)。
Layer2 的全節點可以直接從定序器處獲取交易序列,也可以讀取定序器發到 Layer1 上的交易批次(Batch),但後者具備比前者更高的最終確定性(不可更改性)。通常,當一批交易被定序器傳送到 Layer1 上後,這批交易的次序便不可變更(只要以太坊不發生區塊回滾,Rollup 的交易序列就不會變更)。
由於交易執行會更改區塊鏈帳本的狀態,所以除了交易次序外,Layer2 全節點還需要和定序器同步帳本狀態,這樣才能保證一緻性。因此,定序器不光要往 Layer1 的 Rollup 合約傳送交易批次,還要把交易執行後的狀態更新結果(Stateroot/State diff)傳送至 Layer1。
不難看出,L1(以太坊)實際上充當了 L2 節點們的公告闆,它要遠比 L2 自己的網路更去中心化、更 Trustless、更安全 。對 L2 的全節點而言,只要獲取了 L1 上的 Rollup 交易序列 + 最開始的 Stateroot,就可以還原出 L2 的區塊鏈帳本,計算得出最新的 Stateroot。如果 L2 全節點自己算出的 Stateroot 和定序器發布到 L1 的 Stateroot 不一緻,就說明定序器存在欺詐行為。
最直觀的假想案例是:L2 的定序器可不可以盜取使用者資産。比如,它可不可以偽造一些本不該發生的交易(ps:把某些 L2 使用者的 Token 轉移至定序器執行者的地址,然後再把這些 Token 轉移到 L1 上)。這類問題可以歸結為:定序器發布了錯誤的交易資料或錯誤的 Stateroot 後,該怎麼辦?
針對定序器的欺詐風險,不同型別的 Rollup 有不同的應對措施。Optimistic Rollup(樂觀 Rollup)允許 L2 全節點提供欺詐證明(Fraud Proof),證明定序器在 L1 發布的資料存在錯誤。比如 Arbitrum 設定了一個節點白名單,允許白名單上的 L2 節點發布欺詐證明。
除此之外,考慮到大多數交易所和私營跨鏈橋專案方都會執行 L2 全節點,可以立即發現錯誤,大多數 Rollup 定序器盜幣的成功率基本為 0(因為它最後要套現,還是要在交易所完成,或者把盜來的幣轉移至 L1 後再另謀出路)。
但對於沒有欺詐證明的 Optimism,定序器可以通過 Rollup 自己的跨鏈橋 bridge 合約來盜幣。比如,定序器執行者可以偽造交易指令,將其他人在 L2 的資産轉移至自己的地址,再通過 Rollup 自帶的 bridge 合約,把盜來的幣轉移至 L1。因為沒有欺詐證明,OP 的全節點無法對錯誤交易發起挑戰,所以理論上,OP 的定序器可以盜取使用者在 L2 的資産(只要它真的想這麼做)。
解決這種問題的方法是 「社會共識」(靠社群成員和社交媒體等輿論監督),或者靠 OP 官方的信用背書。
有趣的是,近期某交易所降低了 Arbitrum 和 Optimism 使用者向所內轉幣的延時(從 100 個 L2 區塊降低到 1 個 L2 區塊),這其實是信任 ARB 和 OP 的定序器不會作惡(預設它們是有官方背書的中心化伺服器)。
不同於樂觀 Rollup,除了依靠 L2 全節點外,ZK Rollup 通過有效性證明 Validity Proof(往往與 ZK Proof 相混淆)解決定序器欺詐問題。ZK Rollup 網路裡有一種稱為 Prover 的節點,專為定序器發布的交易批次 Batch 生成有效性證明。同時,L1 上有專門驗證有效性證明的合約(一般稱為 Verifier),只要交易批次及 Stateroot / State diff 對應的證明通過 Verifier 合約的驗證,便被最終確認(Finalized)。ZK Rollup 的官方 bridge 只會給通過有效性證明驗證的提款交易放行,顯然這要比 Optimism 可靠太多。
理論上來說,OP Rollup 的安全性靠 L2 全節點來保證(至少要有 1 個能發布欺詐證明的誠實節點)。ZK Rollup 的安全由 L1 上的 Verifier 合約保證(由 L1 節點完成交易最終確認)。表面上看,它們都可以 「繼承 L1 的安全性」(藉助 L1 完成交易的最終確認 / 結算),以太坊最大主義者甚至將其稱作 「等價於 L1 的安全性」(與 L1 的交易結果最終性一致),但實際情況卻並非如此,甚至是遠非如此。
那些 「老生常談」 的點
首先,ZK Rollup 的有效性證明生成速度極為緩慢,定序器可以在 1 秒內執行幾千筆交易,但為這幾千筆交易生成 Proof 最多可能要幾小時。但這個問題也容易解決,主流的 ZKR 基本都會通過切分 Proof 生成任務、交由不同的 Prover 節點並行處理的方式,大幅提高 Proof 生成速度。
其次,要考慮 L2 節點在 L1 發布資料的延遲。因為定序器或 Prover 每次往 L1 傳送資料,都會有一個固定成本(就好比每次運貨都要消耗一個集裝箱)。頻繁在 L1 上發布資料是不划算甚至虧本的,所以定序器和 Prover 會盡量減少在 L1 上發布資料的頻率,等一次性湊夠了大量的資料再打包發布。
換言之,當使用者數量不足、發起的交易筆數不夠多時,定序器會延遲向 L1 發布資料。比如在去年使用者較少時,Optimism 半小時才向 L1 傳送一次交易批次。現在,因為使用者多了起來,這個問題得到了有效解決。與 OP 不同的是,Starknet 採用了減少 State diff 發布頻率的方式降低資料成本,這使得 Starknet 的交易最終確認延時被拉長到了 7~8 小時。
除此之外,多數 ZK Rollup 為了進一步降低成本,往往會 「聚合許多個 Proof,再一次性發到 L1 上」。也就是說,Prover 不會在生成一個 Proof 後就立刻發到 L1,而是等多個 Proof 都生成完,聚合在一起,再發給 L1 的 Verifier 合約。(其實聚合 Proof 的過程,就是用一個 Proof 來包含掉驗證多個 Proof 産生的計算步驟)
這樣做的後果是,Proof 的發布頻率進一步降低了,交易從發起到最終確認的延時進一步拉長了。
根據區塊瀏覽器顯示,Polygon ZKEVM 的交易確認延時大概是 30~50 分鍾,Starknet 和 Zksync Era 在 7 小時以上。顯然這只是 「部分繼承 L1 的安全性」,與以太坊支援者們所說的 「等價於 L1 的安全性」 有很遙遠的距離。
當然,以上問題都可以靠技術進步來解決,在不久的未來實現。比如很多專案方在研發高效能硬體,降低有效性證明的生成時間;Optimism 也承諾將很快發布欺詐證明系統;以太坊的 Danksharding 方案將把 Rollup 的資料成本降低幾十倍甚至更高,這可以有效解決上面羅列的問題。
難以解決的 「人治」 問題
與 Defi 等應用類專案一樣,Rollup 網路的運轉需要依靠 L1 上的相關合約,而這些合約是 「可升級」 的,也就是說部分程式碼可以更換(大多數 Rollup 都用了代理合約),並且可以在多簽或安全委員會的授權下立刻進行。先說結論:Rollup 可以通過少數人控制的多簽或安全委員會,快速更改 L1 上的合約程式碼,然後盜取使用者資産。
首先 「Rollup 合約為什麼需要升級」 和 「它是怎麼升級的」。以太坊上的合約程式碼在部署後,是不可更改的,但 Rollup 在開發過程中難免存在各種各樣的 bug,可能導緻錯誤的結果;同時 Rollup 也在頻繁的進行産品疊代,需要頻繁增加新的功能;更極端的情況下,還可能有駭客攻擊 Rollup 合約,所以 Rollup 合約需要有可升級性,這往往通過代理合約來實現。
代理合約其實是以太坊合約開發中常用的一種方法,就是將合約的資料和業務邏輯分開,分別儲存在不同的合約中。資料(狀態變數)儲存在代理合約中,業務邏輯(函式)儲存在邏輯合約中。代理合約(Proxy)通過 delegatecall,將函式的執行過程全權委託給邏輯合約(Implementation),再把最終的結果返回給呼叫者(Caller)。
代理模式下的合約升級,只需要將代理合約指向新的邏輯合約(改寫代理合約裡儲存的邏輯合約的地址)。大多數 Rollup 專案都採用了這種給合約升級的方法,可謂簡單粗暴。
不難想到,Rollup 的合約可升級其實是巨大的雷:如果升級後的合約裡包含惡意的程式碼,比如把 Rollup 自帶的 Bridge 合約的提款放行條件加以修改,或者把 Verifier 合約判定有效性證明正確性的條件加以更改,定序器就可以盜幣(原理在前面講了)。
但問題在於,又不能不允許 Rollup 合約可升級,理由在前面說的很清楚。權衡之下,絕大多數 Rollup 會通過 DAO 治理、安全委員會或多簽授權,用人治的方式來決定要不要升級 Rollup 的合約。除此之外,還會通過時間鎖 Timelock,來為合約升級設定延時視窗期。
考慮到大多數的 DAO 提案都有自動化的執行流程(通過鏈上合約來實現),即便要升級合約,也要先獲取足夠多的投票,然後再經過時間鎖 Timelock 規定的延時(往往要經過很多天),升級合約的操作才會執行。如果有人想搞惡意的合約升級,需要通過治理攻擊的方式度過 DAO 治理這關(比如發生在 Tornado Cash 上的治理攻擊),但這樣做的成本很高,要先獲取足夠多的 Token 才行,正常情況下不會成功。即便治理攻擊成功了,由於有時間鎖的限制,使用者會有足夠多的時間把資産從 L2 撤出,Rollup 官方也會有足夠多的時間採取緊急措施。
時間鎖就是經過一段延時後,才允許你進行某些操作
看起來時間鎖是解決惡意的合約升級的法寶。但問題在於,所謂的 「Rollup 官方可採取的緊急措施」,其實就是繞開 DAO 治理和時間鎖,通過多簽或者安全委員會授權,立即升級 Rollup 合約。考慮到目前主流的 Rollup 託管了動輒幾十億美元的使用者資産,由多簽和安全委員會來授權的 「合約可立即升級」,是終極的應急措施,但也是懸在所有使用者頭頂上的達摩克利斯之劍。
顯然這是信任最大化問題:你需要信任 Rollup 官方不會有盜取你的資産的念頭。如果從 Trustless 的角度來考慮(尼克薩博的視角),所有由多簽和安全委員會控制的 Rollup 都是不安全的。Avalanche 創辦人 Emin Gun Sirer 和 Solana 創辦人 Anatoly、著名黑子 Justin Bons 都曾強調過這類問題。
哪些 Rolllup 被多簽 / 委員會操控?
根據知名 L2 研究機構 L2 BEAT 發布的報告 「Upgradeability of Ethereum L2s」,及 L2BEAT 資料視覺化網站顯示,Arbitrum、Optimism、Loopring(路印)、ZKSync Lite、ZkSync Era、Starknet、Polygon ZKEVM 等主流 Rollup 都存在多簽或委員會授權的可升級合約,並且可以繞開時間鎖限制。
dYdX 雖然有一個 EOA 地址可以繞開 DAO 治理升級合約,但受到時間鎖限制(至少有 2 天的延時)。Immutable X 則存在 14 天的合約升級延時,所以,按照 L2BEAT 的說法,dYdX 和 Immutable X 要比其他已上線主網的主流 Rollup 更 Trustless。
那麼該怎麼降低多簽和安全委員會帶來的信任風險?答案其實和 Multichain 事件類似:可以歸結為反女巫問題。必須要保證,多簽 / 委員會由多個不同的、無高度利益重合的、串謀風險低的實體來控制。目前看來,除了加大 DAO 去中心化治理的成熟度、邀請有名望有信譽的名人或機構來參與多簽 / 委員會 以外,似乎沒有什麼太好的辦法。而以上場景似乎早已在現實世界的民主政治中屢見不鮮。
當然,也可以通過時間鎖給多簽 / 委員會管理的合約升級行為加以限制,但這需要針對許多因素進行權衡,因為多簽 / 委員會的存在目的就是為了快速處理一些緊急情況;同時,如果 Rollup 專案方在去信任化問題上沒有什麼堅定的決心,這個問題也不可能被解決。
所以,盡管不同的 Rollup 專案通過精妙的機制設計,可以在絕大多數時候保障使用者資産的安全,但由於存在多簽和委員會,Rollup 發生黑天鵝事件的概率並不為 0。即便多簽和委員會成員串謀的概率只有萬分之一,考慮到 L2 託管的資産價值(假設為 100 億美元),L2 使用者資産每天的風險仍高達 100 萬美元。聯想到 Multichain 事件,著實令人毛骨悚然。
所以我個人認為,就像 Polynya 此前所說的那樣,以太坊生態內的大多數資金仍然會傾向於在 L1 流通和鎖倉,而非 L2,Rollup 生態長期內都無法捕獲以太坊生態內的大部分價值。對於大戶和鯨魚,以太坊主網顯然是一個比 L2 更合適、更可靠的資金去處。所以,很多人此前考慮的 「L2 的崛起會不會導緻 L1 的冷清」,其實早已有了答案。
正如東野圭吾在其著作中所說,人心要遠比數學公式更難捉摸,更難理解,更為複雜,也更難改變。許多事情無法靠單純的技術手段來解決,但凡涉及到 「人性」 的因素,永遠都是這個世上最不可控、最難預測、也最需要嚴肅對待的問題。在此,請讓我們牢記康德墓碑上的那句傳世經典:
「有兩樣事物始終圍繞著我的心靈,我越是加深對他們的思考,心中喚起的驚奇和敬畏越是日漸加深:這便是 內心的道德律和頭頂燦爛的星空。」