作者:Faust,極客Web3
在現實世界中,幾乎每一棟高樓大廈都有一個不可或缺的要素:安全出口。當火災地震等突發事件降臨時,安全出口就是保障民眾生命安全的救命稻草。而在以太坊Layer2這個承載了百億美元資產的託管平台體系中,可以讓用戶把資產安全撤回至Layer1的「強制提款」功能,已然成為不可或缺的必備設施。
Vitalik在最近的文章「Different types of layer 2s」中也強調,使用者能否順利的把資產從Layer2撤回至Layer1,是非常重要的安全指標。
但「順利提款」問題在過去似乎沒有得到大多數人的重視,甚至許多Layer2專案方都沒有上線「強制提款」或「逃生艙」功能。在L2生態體系未成火候的時代,漠視「無需許可的提款」似乎不成問題。但如今Layer2已經承載了120多億美元的資產,已然變成了一棟「太大而不能倒」的大廈。如果這樣的摩天大樓沒有安全出口,後果簡直是不可想像的。
抱著讓廣大讀者重視Layer2安全風險的目的,《極客web3》將在下文以路印協議V3和Arbitrum為例,為大家闡明為何forced withdraw與escape hatch等「無需許可的提款功能」是Layer2不可缺少的一環。
抗審查性是大問題:如果Sequencer故意拒絕你的要求,怎麼辦
過去關於Layer2的科普文章往往有一個問題,就是大多數時候都著重強調“安全性”與表面上的“可用性”,卻忽略了“抗審查性”。即便是在談論去中心化排序器方案時,許多人注意到的也是MEV是否去中心化,而不是抗審查性的改善。
換句話說,大多數人往往注重Layer2的狀態轉換是否有效,排序器能不能盜幣,欺詐證明/有效性證明系統有沒有投入使用,卻忽略了一個不該被忽視的風險:如果Sequencer一直拒絕你的交易請求,或者乾脆長時間故障,甚至停機,這個時候怎麼辦?
要知道,在Solana宕機期間,曾有人因為資產面臨清算而無法及時補倉,使得數百萬美元的資產面臨風險。此類拒絕用戶請求的場景一旦發生,造成的經濟損失並不可小視。
即便只有個別人可能遭遇此類情況,但如果落到了一些手握大量資金的鯨魚身上,整個市場都可能連帶遭殃(假設某人在以太坊上的Defi借貸協議有幾億美元資產可能在一周內被清算,但他因為用了Tornado而被OFAC列入製裁名單。此人大部分資金都在OP上,而OP排序器配合OFAC拒絕它的請求)
我們不妨把這個問題投射到avalanche或polygon等獨立於以太坊的公鏈上去分析。如果Avalanche上超過2/3的Validator共識節點決定對你展開交易審查,那麼它們可以拒絕把你發起的Txn打包進區塊裡,或者不承認包含你的Txn的區塊。這時候,你的錢基本上就被埋在這條鏈裡出不來了:
除非你能拉攏一些Validator,使得參與審查攻擊的Validator不足2/3,或者你能號召一些人通過社會共識的方法,把Avalanche分叉。顯然在這個時候,你還是有辦法把資金快速撤出Avalanche的,並且我們要考慮到,超過2/3的Validator聯合起來對某個地址發起交易審查,本身就需要一段時間去達成,這會給被審查的用戶留下充沛時間「逃出生天」。
但在Layer2上,這種情況可能大不相同。 Layer2的Sequencer一般都是由官方自己在運行,如果Sequencer想要對你展開審查攻擊,它可以把你的錢“凍結在Layer2”,也就是徹底拒絕你發起的,把資產從L2跨到L1的交易請求。顯然按照L2的運作機制,如果你無法繞過排序器執行提款操作,是完全可能被Sequencer把資產凍結在L2不能轉移走的。
那該怎麼解決這種問題呢?其實說白了就是,怎麼實現「無需許可」的提款功能,讓用戶在被Sequencer或Layer2專案方審查的情況下,安然無恙的把資產撤回到Layer1上?有一些專案方提出了去中心化Sequencer的方案,但這治標不治本,如果這些數量極為有限的排序器聯合起來審查你,還是可以把你的資產“凍結”,況且POS節點的反女巫也是個棘手的問題(參考Multichain事件)。
真正最有效的辦法,是直接在L1鏈上設置一個“出口”,讓用戶在長時間得不到Sequencer響應時,通過L1上的專用出口把資金從L2撤出。
路印協議V3版本的強制提領與破產清算模式
這裡我們以路印協議的V3版本為例,它針對用戶發起的強制提款分列了兩種不同情況,第一種情況是:
使用者直接在Layer1上透過ExchangeV3合約中的forcedWithdraw函數發起強制提款,聲明自己在路印協議的L2帳戶是哪一個,以及要提走哪種Token。之後,ExchangeV3合約會拋出一個鏈上事件,提示有人發起了強制提款請求。由於路印協議的所有節點(包括Sequencer)都運行著Geth客戶端,所以會從以太坊區塊中獲知,有人發起強制提款並觸發了對應的鏈上事件。
要注意的是,強制提款不會立刻處理,而是置入pendingForcedWithdrawals隊列,處於待處理狀態。 Sequencer注意到有人在Layer1發起強制提款後,一般會在15天內觸發ExchangeV3合約中的Process函數,在以太坊鏈上把Token轉給提款發起者(從L2項目方在以太坊鏈上的存款地址,轉錢給提款者)。
如果Sequencer在15天內沒有回應使用者的強制提款請求,使用者可以呼叫notifyForcedRequestTooOld函數,讓ExchangeV3合約拋出名為WithdrawalModeActivated的事件,通知路印協議的全節點,破產清算模式被啟動了。
如果破產清算模式被激活,此時路印協議V3會停止接收Sequencer提交的新L2區塊,也就是說這時候路印協議整個就停止了運作。這個過程會持續至少30天。
但在破產清算模式下,用戶依然可以在Layer1上把自己的資產提走,只不過需要提交merkle proof證明自己的資產狀況/狀態,在L2的狀態樹上是可查的。 (證明自己在Layer2的資產餘額,和自己發起提款時聲明的金額是一致的)
路印協議的這種破產清算模式,在L2BEAT上也被稱為Escape Hatch逃生艙機制。這種模式的觸發有個先決條件,就是排序器在規定的時間內沒有回應使用者的強制提款請求,或是Sequencer長期故障或停機。此時使用者可以透過手動觸發的方式,讓Rollup合約進入凍結模式/停止運作。然後使用者可以構造merkle Proof證明自己在Layer2上的資產狀況,從L2專案方在L1的存款地址中,把屬於自己的那部分資產提走。
在StarkEx的文檔中,也為這個過程畫了專門的示意圖。如果L2用戶在L1提交的Forced Withdrawal請求在7天窗口期結束時,未得到定序器回應,則該用戶可以呼叫freeze Request功能讓L2進入凍結期。此時,L2定序器將無法在L1上更新L2的狀態,L2狀態凍結後要過1年才能解凍。之後用戶可以提交merkle proof並提款。
但要建構Merkle Proof,需要先獲知完整的L2狀態樹,也就是需要找一個L2全節點索取數據,同時需要一段程式碼來產生merkle Proof,顯然這需要一定的技術門檻。為了方便廣大用戶,L2BEAT先前曾聲明,Layer2應該設定一批權限開放且程式碼開源的全節點,幫用戶獲知L2上全體帳戶的狀態(包含餘額、交易次數等)。這一舉動其實也說明了強制提款與逃生艙機制的重要性。
Arbitrum的「強制包含交易」功能
但強制提款/逃生艙似乎不是唯一的抗審查解決方案。例如,Arbitrum採用了「強制包含交易」的方式,用戶可以先在L1上的delayed Inbox合約提交需要被Sequencer處理的Txn/withdraw,如果Sequencer超過24小時沒有處理,用戶可以調用L1上Sequencer Inbox合約的force Inclusion函數,讓Txn直接被包含進Arbitrum的交易序列中(拋出一個鏈上event告知Arbitrum全節點,幾筆delayed Inbox上有記錄的Txn需要被包含進L2的帳本中)。
相較之下,Arbitrum的方法要更簡單些,但這種方法還是略帶不足:因為它只拋出一個鏈上事件告訴Arbitrum節點,有幾筆被排序器忽略了的交易需要被包含進L2最長鏈中,而不是像路印協議和StarkEx的破產模式/逃生艙那樣允許用戶直接在L1上把錢提走。如果Arbitrum的挑戰者節點聯合起來發動審查攻擊,似乎還是可以讓用戶的錢被凍結在L2。
所以說Arbitrum的force Inclusion還不夠permissionless,雖然只要有一個誠實節點願意發布欺詐證明,就可以指出排序器忽略了某個用戶的forceInclusion請求,但這還是引入了一定程度的信任假設,只不過程度很輕微。
更確切的說,「需要被強制包含的交易」是要被至少1個ARB的挑戰者節點認可的,這些節點目前有9個,它們有權決定給哪些L2-L1之間的跨鏈訊息放行,現在也只有它們能發布欺詐證明。只要這9個節點聯合串謀,理論上還是可以讓使用者的「強制交易」無效。
所以,目前Arbitrum的強制包含交易/提款,不像路印和StarkEx的破產清算模式那樣無需L2節點許可。但L2BEAT還是對Arbitrum的這個方案給了很高的評價。因為在未來,Arbitrum會上線名為BOLD的Permissionless的詐欺證明發布機制,挑戰者節點屆時將難以或無法串謀(現在其實就很難串謀)。
依照L2BEAT的數據,目前TVL超過5000萬美元,且沒有針對Sequencer Failure或Proposer Failure中的某項提供應對舉措的,包括:OP Mainnet、Base、zkSync Era、Mantle、Starknet、Linea、Polygon zkEVM、Metis。這些L2都可以在極端情況下導致用戶資產被凍結在L2提不出來。
所以顯而易見,強制提款或破產清算模式有其存在的必要性,雖然目前它只是依靠用戶-排序器這個對手方之間的博弈來發揮作用,還稱不上真正意義的“隨時可提款” (Arbitrum有24小時延時且可能失敗,路印最長15天延時,StarkEx有7天最大延時),但顯然「有總比沒有好」。而且強制提款的延時問題,相信可以在未來靠著更精巧的機制設計被妥善解決(目前主要顧及到某些MEV科學家可能利用forceInclusion發起搶跑交易,所以要引入延時。具體詳情可以閱讀各大L2專案方的官方資料)
隨著去中心化Sequencer被越來越多L2納入路線圖,以及Vitalik為首的以太坊基金會不斷向人們加強對Layer2安全性的教育,類似強制提款的抗審查交易功能勢必會被越來越多人所重視,這將使得以太坊Layer2體系更接近一個抗審查、去信任化的金融基礎設施體系。如果Layer2實現了去信任化的資金進入進出方式,相信將會有更多做市商與流動性提供者進入L2基礎設施,為整個web3的mass adoption向前推進一步。