Rollup 不為人知的黑暗面
本文由深潮 TechFlow 授權轉載,轉譯於鏈閃 Web3 媒體(連結點此)
原文標題:信用的遊戲:《被多簽和委員會操控的Rollup們》
原文作者:林克|極客Web3
▍導語
自 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 = 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 都曾強調過這類問題。
▍哪些 Rollup 被多簽/委員會操控?
根據知名 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 的冷清”,其實早已有了答案。
正如東野圭吾在其著作中所說,人心要遠比數學公式更難捉摸,更難理解,更為複雜,也更難改變。許多事情無法靠單純的技術手段來解決,但凡涉及到“人性”的因素,永遠都是這個世上最不可控、最難預測、也最需要嚴肅對待的問題。在此,請讓我們牢記康德墓碑上的那句傳世經典:
“有兩樣事物始終圍繞著我的心靈,我越是加深對他們的思考,心中喚起的驚奇和敬畏越是日漸加深:這便是內心的道德律和頭頂燦爛的星空。”
▍『讀後心得』鏈閃專欄作者 - 歐文笑長
常聽我分享的夥伴,應該知道公鏈領域有太多細節是很脆弱的,例如節點過度依賴雲端伺服器,一大堆節點都在雅馬遜的 AWS 上運行,你覺得這是去中心化的表現嗎?我也常常詬病 Rollup 只有項目方能運行節點,這樣根本就是單機遊戲,與 Web3 的概念沾不上邊。所以在浪漫的粉紅泡泡中,我們會認為公鏈是去中心化的、是主權個人的、是革命性的,但實際上卻是「不成熟」。
這篇文章點出了一個房間裡的大象,就是 Rollup 的智能合約可以由項目方修改,這在以太坊的信仰者眼中應該是十惡不赦,因為不可修改的智能合約才是去中心化的,這也是 Solana 以前被罵的其中一個原因,因為 Solana 與以太坊不同,Solana 的智能合約在預設上就是可以修改的,沒想到許多 以太坊的 Defi 與 Rollup 都是用一些小技巧來修改的智能合約,非常諷刺。
我雖然常常 Fud 公鏈的這些缺點,但我投資部位最大的代幣就是公鏈族群的幣,因為這些不成熟反而擁有極大的潛力,去深入細分不同鏈的好壞與發展狀況,就能透過資訊落差提高獲利,也因為知道這些公鏈不像表面上的美好,所以我也更加謹慎,希望各位能多花點心力去做研究,去發掘公鏈的潛力。
▍『預告』公鏈教學文章與 Podcast
公鏈的知識很學術,相信很多人理解起來很痛苦,包括今天分享的文章也是,所以我已經在著手寫一系列的公鏈教學文章,第一篇已經接近完稿,希望由這一系列文章能降低公鏈科普的知識難度,我未來的 Podcast 集數也會用白話的方式來講解公鏈,敬請期待。
關於我
「愛鏈歐文 Podcast 」是由歐文笑長與鏈鏈共同主持,我們會從宏觀角度觀察幣圈趨勢,也會從微觀角度對幣圈項目進行科研,藉此建立長期穩定的投資配置。
Podcast 收聽:Apple Podcast、Spotify、KKBOX
追蹤優質資訊:Telegram
更多相關連結:Linktree
合作夥伴
愛鏈歐文與「鏈閃 Web3 新聞媒體」是深度的合作夥伴,共同在觀察幣圈產業趨勢,我們想讓更多人了解 Web3 領域,一起見證這個嶄新的世界。
學習討論群組:Telegram
新聞官方網站:網站連結