一文了解Rollup 的分類

除了大家所熟知的Validity Rollup 及Optimistic Rollup,還有哪些不同的Rollup 分類方式?

撰文:NIC Lin

先備知識:

理解Rollup 的運作方式以及Rollup 的資料可得性(Data Availability)問題

Rollup 回顧

不管是 Validity Rollup 还是 Optimistic Rollup,它们都会将资料上传到 L1(例如 Ethereum),让所有人都可以透过存取 L1 来存取到该 Rollup 的资料,并藉此推导出 Rollup 最新的状态,例如 Alice 有 10 USDT、Bob 有 5 USDT。

沒有把資料上傳到L1 的就不屬於Rollup(例如Validium、zkPorter 或Arbitrum AnyTrust),它們不是這篇文章要討論的對象。另外本篇文章也不會討論Rollup 如何驗證狀態的有效性,也就是Validity Rollup 和Optimistic Rollup 的區別。

本篇第一部分將介紹Sovereign Rollup。 Sovereign Rollup 如其名,是屬於擁有自主權的Rollup,進行Rollup 版本升級或硬分叉都發生在Sovereign Rollup 上,不像大家現在所熟悉的Rollup 們(以下簡稱Classic Rollup),Classic Rollup 進行升級、硬分叉的地點不在Classic Rollup 上,而是在L1 的Rollup 合約上:在L1 的Rollup 合約藉由多簽錢包或治理投票執行版本升級。也就是由一個L1 上的合約來決定一個Rollup 目前該用哪個版本。而且如果L1 發生針對該Rollup 的攻擊,例如攻擊治理機製或攻擊Rollup 合約本身,該Rollup 都是會受影響的。相反地,因為Sovereign Rollup 只單純把L1 當成放資料的地方,所以所有Sovereign Rollup 成員都可以自己在鏈下決定目前該用哪個版本,而且不管L1 發生什麼事,只要L1 本身沒有被攻擊(例如發生Re-org 或是鏈停擺),Sovereign Rollup 就不會受影響。

第二部分將介紹Based Rollup。 Based Rollup 移除Sequencer 這樣的角色,將交易排序的權力交給L1 的礦工、Validator、MEV Searcher 等等。不只讓排序交易變得更去中心化,同時也能簡化設計、移除系統許多元件。

主權匯總

數據可用性層和結算層

Classic Rollup 例如Arbitrum、Optimism、StarkNet 等等,除了把Ethereum(L1)當作放資料的地方(也就是Data Availability Layer),還同時將Ethereum 當作Settlement Layer:在Ethereum 上進行結算,把L2 的狀態(也就是L2 各個地址的馀額)寫到L1 上。

為什麼會需要把L2 狀態寫到L1 上?因為這樣L2 和L1 就能互通訊息、互通資產:L1/L2 的dApp 能同步訊息並合作、L1 的ETH 能安全地在L1/L2 之間流轉、L2 的ARB/OP 也能安全地在L1/L2 之間流轉。

L1 能讀得到L2 狀態,就能安全地進行訊息傳遞,L1/L2 之間就能互通有無

而Sovereign Rollup 便是拿掉Settlement Layer(或是說將自己變成Settlement Layer),單純將L1 作為Data Availability Layer 使用。

L1 只讀取得到Sovereign Rollup 放到L1 的區塊或交易資料,但不知道L2 最新狀態,也就沒辦法互通

為什麼要拿掉Settlement Layer?有不同理由或原因:

  1. 如同開頭所述,如果Rollup 的Settlement Layer 在L1,則它將會受L1 所影響,不管是要升級還是被攻擊
  2. 可能 L1 本身不支援複杂的运算来做到纪录 Rollup 状态并利用这个状态进行讯息资产的互通等功能,例如像是在 Celestia 上你只能单纯放资料上去,或像是在 Bitcoin 上你只能进行能力有限的运算,这样的 L1 也就没办法成为 Settlement Layer
  3. 或許該Rollup 本身就不需要另外一條鏈來作為Settlement Layer,它有自己的原生代幣、生態,不需和L1 互通資產

Sovereign Rollup 運作方式

Sovereign Rollup 单纯将 L1 作为 Data Availability Layer,把资料上传到 L1,仰赖 L1 确保资料可得且资料排序不会改变。Sovereign Rollup 的节点则靠著读取 L1 上的资料并进行解读,来算出该 Sovereign Rollup 当前的最新状态。「解读、算出」代表的其实就是 Sovereign Rollup 的共识规则、State Transition Function:怎么从 L1 资料中筛选出符合该 Sovereign Rollup 格式、规则的区块和交易、筛选后怎么验证这些区块和交易、验证后怎么执行这些交易来算出最新的状态。

Sovereign Rollup 節點從L1 資料中篩選出自己的區塊,並解讀、算出最新狀態

如果兩個Sovereign Rollup 的節點是不同版本,就可能會解讀出不同資料、或是算出不同的最新狀態,也因此這兩個節點就不會在同一條鏈上,它們各自所看到的其實就是兩條分岔的鏈的其中一條。

不同版本的節點可能會得到不同的狀態,也就分岔到不同的鏈上

這其實就和你跑不同版本的Ethereum 節點一樣,兩個版本有可能不會是同一條鏈。例如硬分叉後,忘記更新節點版本、不願意更新節點版本的人就會自然地留在原本的鏈上(例如ETC、ETHPoW),而更新節點版本的人就會在新的鏈上(ETH)。

看到這邊讀者應該也知道為什麼它會被稱作Sovereign Rollup 了,因為在Sovereign Rollup 中大家可以各自按照自己群體的(社會)共識,去選擇節點版本、去解讀資料。如果今天該Sovereign Rollup 社群出現像是ETHPoW vs ETH 的分歧,那就是大家各走各的,選擇不同的節點版本去解讀資料,但資料還是原本那一份,沒有改變過。

*注:當然分叉後,各自版本的節點就會上傳符合自己規則的資料到L1,屆時兩邊都會直接過濾掉對方上傳的資料。 *

在中間的時間點下面的節點分岔到了v1.1.2 版,之後彼此的區塊就各自獨立

有哪些Sovereign Rollup?

目前没有什么 Sovereign Rollup 的例子,不过随著区块链的模组化设计风潮越来越热,肯定会有许多 Sovereign Rollup 出现。例如 Celestia 正在设计的模组化框架 Rollkit 可以透过 Cosmos SDK 打造一个 Sovereign Rollup。不像原本使用 Cosmos SDK 打造的链(一个 L1)会需要执行 Tendermint 共识来决定交易排序,该 Sovereign Rollup 可以像目前常见的 Rollup 一样使用单一 Sequencer 来排序交易,省去需要多个共识节点并仰赖其安全性的困扰以及执行共识演算法所消耗的资源。且该 Sovereign Rollup 是将交易资料上传到 Celestia,但同时因为是 Sovereign Rollup 所以不会受 L1 影响(例如升级或被攻击)。

*注1:Rollkit 後來也支援了將Bitcoin 當作Data Availability Layer,這樣的Rollup 能繼承Bitcoin 安全性但throughput 就會受限於Bitcoin。 *

*注2:基本上基於Celestia 的鏈都可以稱作Sovereign Rollup。 *

或是假設Arbitrum 不再使用Ethereum 當作Settlement Layer、不再需要和Ethereum 互通訊息或資產,單純把Ethereum 當成放資料的地方,則這樣的Arbitrum 也會成為一個Sovereign Rollup。

結算匯總

另外也有像是Settlement Rollup 這樣的定義出現,不過它基本上就是Sovereign Rollup,然後這個Sovereign Rollup 還會是其他鏈的Settlement Layer。也就是說,如果一個Sovereign Rollup 上面還會有其他鏈、其他Rollup 將它當作Settlement Layer 的話,這個Sovereign Rollup 就可以稱作Settlement Rollup。

*注:要能成為其他鏈的Settlement Layer 必須要有基本的智能合約功能,讓兩邊能互通訊息、資產。 *

如果Ethereum 今天改成把鏈的資料都上傳到Celestia,那這樣的Ethereum 就會是Celestia 上的Sovereign Rollup,且同時也是Settlement Rollup,因為Ethereum 上面還有許多鏈、許多Rollup 把它當作Settlement Layer。

Ethereum 是Celestia 上的Sovereign Rollup,也是Settlement Rollup

注:或许未来大家逐渐熟悉模组化、熟悉不同 Layer 的功能,不再从 Rollup 角度出发,Sovereign Rollup 或 Settlement Rollup 这样的名词就会渐渐消失。反正重要的是你这条链(不管是 L1 还是 L2 还是 L3 etc.)怎么设计、怎么做出取捨,为不同 Layer 选择适合的建造工具。

基於匯總

另一个最近出现的 Rollup 分类是 Based Rollup,又或著称 L1-sequenced Rollup。Based Rollup 的 Based 指的是在排序交易这件事上,Rollup 不是交给一个 Sequencer(或多个 Sequencer)来排序交易,而是完全交给 L1 的矿工、Validator 或 MEV Searcher 等等来排序交易。Classic Rollup 将资料上传到 L1 时,L1 Rollup 合约会检查是不是符合资格的 Sequencer 所上传的,而 Based Rollup 则是没有限制,任何人都可以上传。

任何人都可以上傳Based Rollup 的區塊

Based Rollup 最大的优点就是没有 Sequencer,也就没有单点故障的问题或甚至需要担心 Sequencer 有完全交易排序权力的问题,也就是不需要担心 Sequencer 当机导致链停摆或故意不收特定使用者的交易,或是担心 Sequencer 会恶意套取使用者的 MEV。Based Rollup 完全继承 L1 在出块上的去中心化程度。

Based Rollup 有以下優點:

使用者離開Rollup 的成本很低

一般 Rollup 为了避免 Sequencer 故意不收入特定使用者交易或是 Sequencer 停摆导致使用者无法离开 Rollup,会设计一套 Force Inclusion 机制或是 Escape Hatch 机制来让使用者可以不透过 Sequencer 而直接到 L1 安插自己的交易到 L2 区块中。但这样的设计第一个代价是成本高,使用者必须要自己付出 L1 矿工费去安插交易,第二个代价是从 L1 安插的交易可能会影响 Sequencer 打包 L2 区块的过程:有可能 L1 安插的交易会导致 Sequencer 准备收入到 L2 区块裡交易无效,例如 Alice 在 L1 安插的交易把钱都转给 Bob,导致 Alice 在 L2 区块裡转钱给 Carol 的交易失败。

Sequencer 收到Alice 的交易後,確認交易結果並放進下一個區塊中

但Alice 直接透過Force Inclusion 將另一筆交易直接送到L1,導致Sequencer 收到的Alice 交易失敗

Arbitrum 为了避免 L1 安插的交易影响 Sequencer 打包 L2 区块的过程,所以 L1 安插的交易不会马上生效,需要等待 Sequencer 主动申请将该交易收入最新一个区块才会生效,或如果 Sequencer 都没反应,过一段时间后就会强制生效。Optimism 则是允许交易立即生效,如果 L1 安插的交易影响到 L2 区块裡的交易,Sequencer 必须要自己想办法处理。可以看这篇介绍了解更多 Arbitrum 及 Optimism 在处理 L1 安插交易的比较。

設計簡單許多

Based Rollup 比一般Rollup 少了Sequencer 的角色,也就少了硬體的負擔(不必擔心Sequencer 機器負載問題)以及任何為了讓排序交易更公平的機制(例如去中心化Sequencer 的機制)。然後也不需要Force Inclusion/Escape Hatch 機制,包含L1 的相關合約及相關鏈下工具來方便使用者能自己在L1 安插交易。

但Based Rollup 也有一些缺點:

沒有交易提前確認的服務

有Sequencer 的話,Sequencer 可以很快告訴使用者他的交易執行結果。只要使用者相信Sequencer,就能立刻確認交易結果,不需等待交易上傳到L1。

Based Rollup 中,Alice 等到交易上傳到L1 才相信自己的交易被收入,要等至少一個L1 區塊的時間

一般Rollup 中,如果Alice 相信Sequencer 會收她的交易的話,馬上就能確認交易是否會被收入

協議失去MEV 收益來源

MEV 不再交由 Sequencer 来把关、提取,而是交给 L1,因此 L2 本身没办法获得 MEV 收益。可以透过设计出块权利的竞标机制来捕捉 MEV 收益,但相对地会拉高 L1 参与者参与出块的门槛,也就降低去中心化程度,且引入竞标机制也带来一定複杂度。

參考資料與推薦延伸閱讀

主權匯總

基於匯總

查看原文
本頁面內容僅供參考,非招攬或要約,也不提供投資、稅務或法律諮詢。詳見聲明了解更多風險披露。
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate.io APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • ไทย
  • Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)