文章概括:
文章介紹了Arbitrum的技術顧問對Arbitrum One的組件結構進行了詳細解讀。主要講解了Arbitrum核心元件中與跨鏈訊息傳遞及抗審查交易入口相關的元件。包括跨鏈與橋接的原理,可重試提案(Retryables),ERC-20資產跨鏈網關,慢收件箱和延遲收件箱,出站箱和發件箱等功能。同時介紹如何實現快速提現和強制提現的方式。整體內容涉及技術知識較多,講解了Arbitrum核心組件的工作原理和運作流程。
Read more at:
https://www.chainnews.com/articles/461601265546.htm
原文標題:《前Arbitrum 技術顧問解讀Arbitrum 的組件結構(下)》
譯文作者:羅奔奔,前Arbitrum 技術大使,極客Web3 貢獻者
導語:
以下是Arbitrum 前技術大使及智慧合約自動化審計公司Goplus Security 前共同創辦人羅奔奔對Arbitrum One 的技術解讀。
在上一篇文章《Arbitrum的組件結構解讀(上)》中,我們介紹了Arbitrum核心組件中的排序器、驗證器、定序器、Inbox合約、Rollup Block、非欺騙性證明的作用,而在在今天的文章中,我們將重點介紹Arbitrum核心元件中與跨鏈訊息傳遞及抗審查交易入口相關的元件。
正文:在通訊員的文章中,我們曾提到,Sequencer Inbox 專門在Layer1 接收排序器發布Batch 的交易資料包。同時,我們指出,Sequencer Inbox 又被稱為快箱,相對於慢箱Delayed Inbox(簡稱Inbox)。下面,我們接收Delayed Inbox等與跨鏈訊息傳遞相關的元件進行讀取。
跨鏈與橋接的原理
跨鏈交易可分為L1到L2(儲值)與L2到L1(提現)。注意這⾥所說的儲值和提現不一定與資產跨鏈相關,可以是不直接附帶資產的訊息傳遞。所以這兩個字形式表示跨鏈相關行為的兩個方向。
跨鏈交易與純L2交易相比,跨鏈交易在L1和L2這兩個不同的系統中進行了資訊對接,因此過程更加複雜。
另外,通常我們說的跨鏈行為,是在兩個毫無關聯的網路上,用見證人模式的跨鏈橋進行跨鏈,這種跨鏈的安全性取決於跨鏈橋的運營者,基於歷史見證人模式的跨鏈橋被盜事件發生。
而在Rollup 與ETH 主網之間的跨鏈行為,與上述跨鏈有本質上的不同,因為Layer2 的狀態是由記錄在Layer1 上的數據決定的,只要你使用的是Rollup 官方的跨鏈橋,其在運作結構上是絕對安全的。
這也凸顯出了Rollup 的本質,它只是在用戶角度看還是一條獨立的鏈,但實際上所謂的“Layer2”只是Rollup 對用戶敞開的快速展示窗口,真實的鍊式結構刻錄在Layer1所以,我們可以認為L2算是半條鏈,或者說是「在Layer1上創造出的一條鏈」。
可重試提案Retryables
需要注意的是,跨鏈都是非同步性和非原子性的,不可能像在一條鏈上一樣做完訂單交易確認後就知道結果,也不能保證另一一定會在某個時間點發生某些事情因此跨鏈有可能因為軟性問題而失敗,但只要使用正確的手段,例如一些可重試票據(Retryable Ticket),就發生不會資金卡住等硬性問題。
可重試設想是透過Arbitrum 官方橋充值時,使用的基本工具,ETH 和ERC20 的充值都會使能使用到。其生命週期分為三步驟:
1. 在L1 上提交表單。在Delayed Inbox 合約中使用createRetryableTicket() 方法建立儲值表單,並提交。
2. L2上自動兌付。大多數情況下,器可以自動幫用戶兌付訂單,後續的手動操作。
3. L2上手動兌付。部分邊緣情況,如L2上gas價格突然飆升,加密貨幣上預付的gas不夠,則無法自動兌付。此時需要使用者手動操作。
注意,如果自動兌付失敗,需要在7日內手動兌付票據,否則或者票據將被刪除(資金將永久損失),或者需要為票據的保存支付一定費用來續租。
另外,對於Arbitrum 官方橋的提現流程,雖然和充值行為在流程上有一定相似性,但並沒有Retryables 這個概念,一方面可以從Rollup 協議本身理解,另外我們可以從一些區別進行理解:
·提現的流程中不存在自動兌付,因為EVM沒有計數器或自動化,而L2上可以實現自動兌付,是排序器幫忙實現的,所以L1上用戶需要手動與Outbox合約交互,以Claim取回資產。
·提現也不存在期待已久的問題,只要過了挑戰期,就可以在任何時間領取。
ERC-20 資產跨鏈網關
ERC-20資產的跨鏈是複雜的。我們可以思考幾個問題:
·一個在L1上配置的代幣,它在L2上要如何配置?
· 它的L2對應合約需要事先手動配置,還是系統可以自動為跨過來的、但尚未配置合約的代幣自動配置資產合約?
·L1上的ERC-20資產,在L2對應的合約地址是什麼?是否該和L1一致?
·在L2上原生發行的代幣,如何跨鏈至L1?
·擁有特殊功能的代幣,如可調整數量的Rebase型代幣,自增長生息代幣,如何跨鏈?
我們不打算全部回答這些問題,因為展開得太複雜。這些問題只是為了說明ERC20 跨鏈的複雜性。
目前非常多擴容方案採用的都是白名單+手動清單的方案,來規避各種複雜的問題和邊界情況。
Arbitrum 使用了Gateway 系統,解決了大部分ERC20 跨鏈的痛點,具有以下特點:
·網關組件在L1和L2中成對出現。
·網關路由器負責維護Token L1Token L2之間的位址映射,以及some tokensome gateway之間的映射。
·網關本身可分為標準ERC20網關,通用自訂網關,自訂網關等等,從而解決不同類型和功能的ERC20的橋接問題。
我們以比較簡單的WETH跨鏈為例,來說明自訂網關的必要性。
WETH 是一種ETH 的ERC20 等價物。以太作為主幣,許多dApp 中的複雜功能是無法實現的,因此需要一個ERC20 等價物。對於WETH 合約內轉入一些ETH,它們會被鎖定在合約內,並產生相同數量的WETH。
同理,也可以歸納WETH,取出ETH。顯然,流通的WETH和鎖倉的ETH數量永遠是1:1的。
如果現在把WETH直接跨鏈到L2上,我們會發現一些奇怪的問題:
· 無法在L2上把WETH解包變成ETH,因為L2上並沒有鎖倉對應的ETH。
·Wrap 功能可以使用,但這些新產生的WETH 如果跨回到L1,也無法在L1 上解封裝為ETH,因為L1 和L2 上的WETH 約定不是「即時的」。
顯然這違反了WETH 的設計原理。那麼WETH 在跨鏈時,必須是充值還是提現,都需要先Unwrap 成ETH 後,再跨到對面,然後Wrap 成WETH。這相當於WETH Gateway 的作用。
其他有更複雜邏輯的代幣同理,需要更複雜和提出設計的網關才能在跨鏈環境下正常運作。 Arbitrum 的自訂網關繼承了普通網關的跨鏈通訊邏輯,並允許開發者自訂與代幣邏輯相關的跨鏈行為,可滿足大部分需求。
慢收件匣延遲收件匣
與快箱也即SequencerInbox相對應的是慢箱Inbox(全稱為Delayed Inbox)。為什麼呼吸快慢之分呢?因為快箱是專門接收排序器發布的L2交易批次的,所有不一定排序器在L2網路內部轉讓的交易,都不該出現在快箱合約中。
慢箱的第一個點作用是,處理L1 到L2 的儲值。使用者透過慢箱進行儲值,排序器監聽到重新反映在L2 上,最終儲值記錄會被排序器包含進L2 的交易序列中,並提交至快箱合約Sequencer Inbox。
在這個例子中,使用者直接向快箱提交充值交易是不合適的,因為提交到快箱收件匣中的交易,會幹擾到Layer2正常的交易排序,然後會影響到排序器的工作。
慢箱的第⼆個作用,是抗審查。用戶直接提交至慢箱合約中的交易,排序器一般會在10分鐘內歸集到快箱中。但如果排序器惡意忽略你的請求,慢箱還有一個強制歸集強制包含功能:
如果交易被提交至延遲收件匣中,經過24小時,慢速箱中的交易精準被排序器包含至交易序列中,使用者可以在Layer1上手動觸發強制包含函數,把被排序器忽略掉的交易請求,強制歸集到快箱Sequencer Inbox 中,之後就會被全體Arbitrum One 節點監聽到,會被強制包含進Layer2 交易佇列。
我們前面提到過,快箱⾥的資料就是L2的歷史資料實體。所以在被惡意審查的情況下,透過慢箱可以讓交易指示最終包含進L2帳本中,這主要是針對Layer2的強制提款等的場景。
由此可以看出,對於任何一個方向和層次的交易,排序器最終都無法永久審查你。
慢箱收件匣的幾個核心函數:
·depositETH(),最簡單的充值ETH 的函數。
·createRetryableTicket(),可用於ETH 和ERC20 以及訊息的儲值。另外DepositETH() 方面,有較高的彈性,例如可指定儲值後L2 的收款地址等。
·forceInclusion(),也即強制歸集功能,任何人都可以調使用。此函數會校驗,提交至慢箱契約中的某筆交易,是否過了24還沒有被處理。如果條件滿足,則屆時訊息進行強制歸集。
要注意的是,force Inclusion 函數其實位於快箱契約中,只是為了每天便理解,我們將其放在慢箱這⾥泛起講解中。
出站箱寄件箱
出站箱寄件箱只與提現有關,可以理解為提編碼為的記錄和管理系統:
·我們知道,Arbitrum 官方橋的提現需要等待約7 天的挑戰期結束,Rollup Block 最終敲定後,提款行為才可以實施。用戶在挑戰期結束後,向Layer1 上的Outbox 一致對應相應的Merkle證明,其再與其他義務的合約通信(如解鎖其他合約中鎖定的資產),最終完成提現。
·OutBox同步會記錄哪些L2到L1的跨鏈訊息已經被處理過,以防止有人重複提交執行過的提現請求。它透過mapping(uint256 => bytes32) public花,記錄提現請求的花索引與資訊對應關係,如果映射[spentIndex] != bytes32(0) 則該請求已被提現過。原理類似於防止重播攻擊的交易整數Nonce。
以下我們將以ETH 為例完整講解儲值與提現的流程。 ERC20 與不同的走了網關,就不再贅述。
ETH充值
1. 使用者呼叫慢箱的depositETH()函數。
2. 此函數會繼續呼叫bridge.enqueueDelayedMessage(),在橋合約中記錄該訊息,並將ETH傳送到橋合約。所有的ETH儲值資金,都保存在橋合約地址中,相當於一個儲值。
3. 排序器監聽到慢箱中的儲值訊息,將儲值反映操作⾄L2資料庫中,使用戶可以在L2網路看到自己儲值進來的資產。
4.排序器進行筆儲值記錄包含進交易批次,提交給L1上的快箱合約。
ETH 提現
1. 使用者在L2上呼叫ArbSys合約的withdrawEth()函數,在L2上對應數量的ETH。
2.排序器提示現請求發送至快箱。
3. 驗證器節點根據快箱中的交易序列,建立新的Rollup Block,其中會包含上述提款交易。
4. Rollup Block 度過了挑戰期並被確認後,使用者可以在L1 上呼叫Outbox.execute Transaction() 函數,證明參數由前面提到的ArbSys 給出。
5.寄件箱確認無誤後,解鎖橋中對應的ETH發送給用戶。
快速提現
使用樂觀Rollup 官方橋提現就會出現等待挑戰期的問題。我們可以用貨運的第三方跨鏈橋來規避這個問題:
·原子鎖交換。這種方式只是在雙方在各自鏈內進行了資產的互換,並且具有原子性,只要一致性方提供了原像,雙方一致性就可以得到應有的資產。但問題是流動性比較稀缺,需要點對點地尋找對手方。
· 見證人跨鏈橋。同一類型的跨鏈橋都屬於見證人橋。使用者提交自己的提現請求,提現目的地指向第三方橋的運作者或流動性池。見證人發現跨鏈交易已提交到L1的快箱合約後,就可以直接在L1端向用戶轉帳。這種方式本質上是用另一方套共識系統來監視Layer2,並根據其已提交至Layer1上的資料進行操作。問題是,這種模式的安全係數低於Rollup 官方橋高。
強制提現
force Inclusion() 強制歸集功能用於對抗定序器的審查,任何L2本地交易、L1到L2交易和L2到L1交易,都可以使用該功能實現。定序器的惡意審查嚴重影響了交易體驗,大多數情況下我們都會選擇提現離開L2,因此以下以強制提現為例介紹forceInclusion的方式。
回顧在ETH 提現步驟中,只有步驟1、2 是涉及定序器審查的,所以只需要更改這一步驟:
·呼叫L1上慢箱合約中的inbox.sendL2Message(),輸入參數就是在L2上呼叫withdrawEth()時需要輸入的參數。該訊息會分享給L1上的網橋合約。
· 等待24小時的強制歸集等待期後,呼叫快箱中的force Inclusion()進行強制歸集,快箱一致性會檢視橋中是否有對應訊息。
最終使用者可以在寄件匣中提現,其餘現步驟則由正常的提現相同。
另外,arbitrum-tutorials中也有使用Arb SDK的詳細教學去指導用戶如何透過forceInclusion()去進行L2本地交易和L2到L1交易。
原文連結
資訊來源:0x資訊編譯自網際網路。版權所有,未經許可,不得轉載!