本文為Arbitrum、Go Pocket 和Rebase 社區聯合舉辦的 『Arbitrum 基礎架構講解:快速入門』 講座的文字整理版。
Arbitrum 是什麼?
Arbitrum 是以太坊的樂觀式Rollup 擴容方案,有以下特性:
-
無需信任的安全性:安全紮根於以太坊,任何人都可以確保正確的L2 結果。若L2 鏈完全宕機,僅憑以太坊上的信息就可以重建整條L2 鏈。
-
以太坊兼容性:所有EVM 標準的合約和轉賬都可以在Arbitrum 上執行。
-
可擴展性:將以太坊的計算和存儲轉移至鏈下,吞吐量更高。
-
最低成本:為最小化以太坊L1 燃氣成本而生,降低每筆交易的成本。
-
瞬時最終性:開啟序列器模式的Arbitrum 鏈會有最終瞬時性這一殺手級特性,瞬時最終性也即交易確認幾乎不需要等待。 Arbitrum 團隊上線的官方旗艦鏈Arbitrum One 開啟了序列器模式。
dApp 開發者關心的內容
代碼需要修改嗎?
代碼無需修改。完整的EVM 兼容性對開發者是相當友好的。
支持什麼語言?
Solidity/Vyper,沒有編譯器、版本限制。
開發環境一致嗎?
各種工具如Truffle、HardHat 以及IDE 均可以在Arbitrum 上使用,開發環境完全一致。
沒有Gaslimit!
Arbitrum 上沒有gaslimit,合約開發者有新的玩法。
總結來說,合約開發者從以太坊遷移到Arbitrum 其體驗是相同的,幾乎等同於從Rinkeby 遷移到主網。當然,會有一小部分特性因為L2 的原因而有所不同,請見 官方文檔:與以太坊的不同點。
整體架構
Arbitrum 整體架構可以簡要分為L1 上的EthBridge 與L2 上的AVM。
L1 EthBridge
EthBridge 主要管理著Inbox,Outbox 和Rollup 合約。
Inbox:所有交易都會先發送至Inbox 然後再送給L2。 Arbitrum 鏈將各條信息逐一讀取並依次執行。鏈的狀態僅取決於收件箱,Rollup 中也不存在PoW/PoS 記賬,所以交易的結果在你將交易提交到收件箱的那一刻就已經是確定的了。
Outbox:記錄著在L2 上發生的最終需要返回以太坊上的事務或消息,如提現。
Rollup 及挑戰:Rollup 協議記錄了一條rollup 區塊組成的概念上的鏈。驗證者可以提出rollup 區塊。如果有驗證者不同意其他驗證者提出的rollup 區塊,可以發起挑戰。挑戰的裁判為以太坊上的EthBridge,輸家質押的資金一半會被銷毀,一半獎勵給贏家。
L2 AVM
Arbitrum 在L2 底層實現了AVM 虛擬機和指令集,並自定義了一種語言mini 及其編譯器,通過mini 在ArbOS 中實現了EVM 模擬器。
AVM:一個在L2 上運行的『操作系統』。 ArbOS 對不同的合約進行隔離並追踪其資源使用情況。
ArbOS:Arbitrum 虛擬機,AVM,是L1 和L2 的接口。 L1 提供了AVM 接口並確保VM 的正確運行。 L2 運行AVM 並提供了一些功能,如部署合約,運行合約,追踪餘額,以及所有有智能合約的區塊鏈所需的能力。
每個Arbitrum 鏈都只有一個AVM,執行所有運算,維護所有存儲空間。有些其他系統對每個合約都單獨運行一個虛擬機,而Arbitrum 更像以太坊,一個虛擬機管理整條鏈。對多個合約的管理是由運行在AVM 上的軟件實現的。
欺詐證明的設計範式:再執行vs 單步證明
當有人對rollup 區塊發起挑戰時,以太坊上的仲裁合約需要對rollup 區塊的真實性做出驗證。
Arbitrum 与 Optimism 使用了不同的设计范式。最终导致了双方架构和流程有了显著不同,二者的优缺点与整体设计都来自各自的设计范式。
再執行(單輪互動)
Optimism 使用再執行設計範式,有挑戰時直接在以太坊上重新執行整條交易。
單步證明(多輪互動)
Arbitrum 使用單步證明設計範式,將被挑戰的rollup 區塊中的命令通過分割協議,進行多輪分割,最終會分割為一個不可分割的最小AVM 指令集,如ADD。最終以太坊進行單步證明。
二者優缺點
整體而言,Arbitrum 的設計範式優於Optimism,有以下非常關鍵的優點:
Gas 费用低:Optimism 每次交易均需要向 L1 提交状态根,Arbitrum 则采用批量提交的方式。此差异会带来显著的 费用差距。
無Gas limit:由於單步證明每次都分割為最小指令,Arbitrum 不需要引入gas limit。而Optimism 為了確保每筆交易都能被以太坊驗證,那每筆交易都必須低於以太坊的gas limit。
更輕便的證明:AVM state 易於被L1 證明,單步證明也縮減了證明所需的gas 消耗。
指令集靈活性:對EVM 實現,AVM 使用虛擬化設計,而OVM 使用容器化設計。如果EVM 修改/ 刪除了某些操作碼,Optimism 在L1 上的歷史交易的可驗證性上將變得比較棘手。而AVM 掌握自己的技術標準,不存在此問題。
EVM 兼容性:AVM 是EVM 全兼容的,這意味著合約開發者不需要修改代碼即可遷移,而移植到Optimism 上則需要對代碼進行修改,Optimism 需要特殊的solidity 編譯器來生成OVM 字節碼,開發者需要遵循其特殊規則。
當然,Arbitrum 這種設計也會有一些缺點,但通常我們認為這些缺點不構成實質問題:
-
對Arbitrum 開發團隊而言,AVM 實現更複雜。但這與用戶或合約開發者無關。
-
多輪互動需要雙方在挑戰結束前都在線,以應對挑戰。但這應該對於絕大部分驗證者都不是問題。
用戶角色普通節點
記錄並追踪Arbitrum 鏈的狀態並接受來自用戶RPC 調用的網絡節點。類似於L1 以太坊上的非挖礦節點。任何人都可以選擇成為普通節點。
聚合器
聚合器,Aggregator。一種Arbitrum 全節點,接收用戶的交易並批量聚合提交。任何人都可以選擇成為聚合器。
序列器—— 特殊身份,特殊能力
序列器,Sequencer。一個有權對一定時間內的交易進行重排序的節點,也具有批量聚合提交交易的能力。開啟序列器模式的Arbitrum 鏈可以使用序列器。
由於這種排序能力,以及上面提及的進入收件箱後交易結果就確定了這兩個特性,向善意的序列器(即它不會惡意地移動、延遲你的交易)提交交易後,你就可以直接根據序列器返回給你的結果確認最終性而無需參考其他消息。也即在使用Arbitrum 的時候你會發現,提交交易後幾乎瞬間交易就完成了,幾乎讓所有UI 中的等待動畫都失去了用武之地。
序列器在Arbitrum One 上線初期使用的是中心化指定的方式,由Arbitrum 官方運行,並非任何人都可以成為序列器。 Arbitrum 團隊日後會研發去中心化序列器方案。更多關於公正排序、去中心化序列器的信息請見 Order-Fairness for Byzantine Consensus。
即使序列器是Arbitrum One 中主要的交易樞紐,也不能據此認為Arbitrum 是中心化的網絡。因為用戶如果不信任序列器,仍然可以向其他普通節點或聚合器提交交易,這些交易將被提交給慢速收件箱(序列器使用的是快箱)。也就是說Arbitrum 網絡仍然保留著抗審查能力,即使序列器作惡也無法阻止你的交易提交。另外,序列器的排序能力是有限的,序列器更無法偽造交易。
驗證者—— L2 安全基石
驗證者,Validator。質押資金並參與可爭議斷言(也叫rollup 區塊)的人。既可以主動發起斷言更新狀態,也可以監控其他驗證者的斷言並對錯誤斷言進行挑戰。
驗證者的任務是維護rollup 鏈的安全,提出新的或質押於已存在的rollup 區塊。如果有驗證者不同意其他驗證者提出的rollup 區塊,可以發起挑戰。挑戰的裁判為以太坊上的EthBridge,輸家質押的資金一半會被銷毀,一半獎勵給贏家。
驗證者對網絡的安全保障有一個簡單易證的原則:anyTrust Guarantee,也叫一誠則成原則,即只要有一個誠實的驗證者,即可讓整個鏈的狀態向正確的方向推進。
Rollup 協議與挑戰
Rollup 協議記錄了一條rollup 區塊(又叫斷言,DA)的鏈條,它們與以太坊區塊並不是同一個概念。你可以認為rollup 鍊是一條概念上的單獨的鏈,是由Arbitrum rollup 協議管理並監控的。 Rollup 鏈只可能有一條路徑是正確的,其餘的分支最終會被挑戰證偽,一般情況下無人作惡則不會有錯誤的分支。
每個rollup 區塊包含:
-
rollup 區塊編號
-
父rollup 區塊編號:本rollup 區塊之前一個(被宣稱為)正確的rollup 區塊的編號
-
本鏈歷史上所發生的運算量(以ArbGas 計量)
-
本鏈歷史上所接收的收件箱信息數量
-
對本鏈歷史輸出的哈希
-
鏈狀態的哈希
驗證者可以提出rollup 區塊。新的rollup 區塊一開始是待決狀態。最終每個rollup 區塊都會被解決,要么被確認,要么被拒絕。已確認的區塊構成了整條鏈的歷史。
質押
在任何時間,都會有一部分驗證者成為質押者。質押者通過EthBridge 充值資金,如果輸掉挑戰則會被沒收。目前所有鏈接受以太幣為質押物。
單筆質押可覆蓋一系列rollup 區塊。每個質押者都質押在最新確認區塊上;如果你質押了一個區塊,你還可以繼續向其子區塊質押。所以你是可以質押在一串連續正確的區塊上的。
創建新的rollup 區塊必須成為質押者,且已在你所創建的區塊的父區塊上質押了資金。如此便確保了作惡則懲罰機制能夠執行。
挑戰
當一名驗證者不同意另一名驗證者時(還有很多條件需要同時滿足),會進入挑戰。每一個DA 都有一個挑戰期,在挑戰期結束之前才能進行挑戰。在Arbitrum One 上為7 天。關於如何合理地設置挑戰期請參考Ed Felten 的文章 Optimizing challenge periods in rollup | by Ed Felten | Offchain Labs | Medium。
挑戰者發起挑戰後,應戰者將被挑戰的斷言分為分割協議規定的若干份;挑戰者繼續指出其中有問題的一段,應戰者再繼續分割;經過多輪互動後,問題聚焦在一條最小的不可分的指令上,應戰者再向EthBridge 提供單步證明。 EthBridge 驗證後整個挑戰結束。
挑戰結束後,一半資金會獎勵給贏家。另一半資金會被銷毀。通過低成本解決爭議,對輸家進行高額懲罰的密碼經濟學方式,Arbitrum 有力地震懾了作惡行為,即使是發生爭議的情況下,也不會帶來明顯的鏈上沖擊。在正常情況下,驗證者會觀點一致並推進鏈的狀態。
Layers 之間的互通性代幣橋接
自由代幣橋接:原則上來說,L1 到L2 代幣橋接是自由、免許可的,任何人都可以將任何幣種跨到L2,甚至還可以製作自己的自定義橋。如果某幣種尚未跨到L2 上,只需要調用跨鏈功能即可,該操作普通用戶就可以完成,無需代幣項目方許可或者任何特殊權限或專業知識。但目前項目剛上線,為防止不可測的問題(如特殊代幣跨鏈),官方還沒有開啟自由橋接,而使用了白名單機制。日後會放開限制。
特殊代幣走橋:Rebase 型,持幣生息型(如AMPL,aETH 等),特殊功能代幣(如USDT 有凍結功能),這種需要實現特殊的橋,使用特殊橋進行遷移,否則會出現不可預知的問題。
地址映射關係:L1 上的代幣跨到L2 後,其地址是確定的。 L1 地址到L2 地址的關係為單射,且可逆推。通過權威地址映射oracle 確保,同一個L1 代幣不論走過哪些自定義橋,在L2 上最終只會有一個合約地址。
反向橋:L2 上的原生代幣跨到L1 上的橋,目前還不存在(雖然你可以自己實現一個)。在L2 上原生髮幣又想回到L1 的項目需要注意。
L1 到L2:充值
充值最重要的概念是Retryable Tickets,該機制解決了充值的原子性和多餘燃氣處理問題。
在L1 充值到L2 時,如果不使用Retryable,一旦出現L1 成功了但L2 上失敗的情況,用戶的錢將永久被鎖定在L1 合約裡。所以當前的Arbitrum 版本已經禁止非Retryable 的普通方法。
使用Retryable 如果失敗後,可以在一個挑戰期(7 天)內重試領取。
L2 到L1:提現
普通提現
普通提現在L1 上有一個等待期(時長同挑戰期),結束後需要手動領取,該過程也需要花費L1 上的Gas。
快速提現
快速提現依賴快速提現服務商,以及流動性提供者或交易對手。而快速提現能夠實現而不用等待7 天挑戰期,則基於對Arbitrum 最終性的理解,文末會詳述。
主要實現方式包括可交易提款和原子鎖交換。
目前有cBridge, renBridge,Connext 等方案為Arbitrum 提供快速提現或跨鏈服務。
另外,單獨的NFT、L2 向L1 的外流信息等非同質化的token 和message,並不適用於基於流動性的快速提現/ 傳播,因為沒人能夠提供等價物。
自定義官方橋
若想使用 官方橋 但自己實現另一套UI 用於自己的產品中,請參考 arbitrum/packages/arb-ts at master · OffchainLabs/arbitrum · GitHub 中的內容。
ArbGas
ArbGas 是Arbitrum 用來管理鏈上執行成本的。與以太坊gas 的理念一致,每個AVM 指令都會有一定數量的ArbGas 消耗,而一次運算的總成本是該運算包含的指令的ArbGas 的加總。
我們需要關注幾個點:
豐饒度和數量級:ArbGas 的值遠大於L1 的gas。 ArbGas 並不能直接與以太坊gas 相比。開發者和用戶應該把ArbGas 理解為是比以太坊gas 更加且便宜的。
無gaslimit:Arbitrum 並沒有硬性的ArbGas limit,正常情況下Arbitrum 鏈每秒可以消耗任意數量的ArbGas,而在以太坊中則有gas limit。
Computational Gas:用來描述AVM 計算成本,一般情況下接觸不到,在Arbiscan 中每條交易的Advanced Info 中可以查到。該數值與用戶交易時的gas 不應混淆。
二價競拍:在以太坊上,一筆交易的燃氣價格等於其聲明的gasbid(price×limit)。在Arbitrum 則不同,gasbid 會視作該交易所願支付的最高價格。所以,在Arbitrum 中,提交交易時錢包上顯示的gas 使用量和實際使用量是不同的,實際使用量可能會比顯示的少50%(一個經驗值,只能代表我個人在特定時間內的使用情況)。
Arbitrum 網絡費用的收費機制:Arbitrum 的網絡費用主要用於補償驗證者、聚合器、序列器等工作角色在L1 上的gas 費用,具體經濟模型由ArbOS 管理。
對Arbitrum 交易成本的預期:
Arbitrum L2 的固定成本主要來源於L1 上的rollup 信息提交行為,其中的固定成本可以攤薄,對固定成本而言_使用人數越多則越便宜(但對calldata 則未必)。另外,L1 上的gas 水平因此也影響到L2 上的gas 水平。綜合這兩方面考慮可以說,在一定數量級內,L1 上的用戶湧入到Arbitrum 上的越多,則Arbitrum 使用起來越便宜。
最終性
Arbitrum 上的最終性有四種層級。不同的用戶或開發者,需要根據自身的需求來確定使用不同的最終性標準。對於普通用戶或普通項目的開發者而言,信任序列器即可,這也是大部分錢包、應用默認的選擇,用戶什麼也不需要做。特殊項目的開發者,如跨鏈協議等,可能需要考慮更加堅實的最終性以應對極端情況。
以太坊確認
一個挑戰期過後DA 被確認,最強的最終性,完全無法更改。由於時間太久,除了官方橋提現等動作需要依照此最終性以外,在實踐中不太可能使用,顯然你不可能在SushiSwap 上做了一筆交易後,7 天后才能說這筆交易確認了。
信任的驗證者質押
如果你信任某個驗證者,或者你自己就是驗證者,你可以選擇相信別人或你自己。根據一誠則成原則,只要這些驗證者是誠實的,他們背書的DA 最終會得到確認。
驗證者或聚合器在不質押的情況下為交易背書
不質押的驗證者,或者普通的聚合器,由於缺乏質押,其可信性比上一種要小一些。但如果你信任的話,也可以採用這種標準。
信任序列器
信任序列器的最終性是最快的,幾乎是瞬時的。只要序列器不作惡,那返回的結果都是正確可信的。大部分用戶和dApp 都會採用這種方式。