Rollup 與資料可用性
本文將介紹資料可用性與 Rollup 的關聯,Rollup 要怎麼在資料可用性上做出一些犧牲來換取更低的交易成本。
在進入正文前讀者需要對 Rollup 有基本的認識及知道在討論資料可用性(Data Availability)時是在講什麼樣的問題。
註:我在今年的 COSCUP 有介紹以太坊過去的 L2 及 Rollup 技術的發展歷史、當前狀況及未來展望,今天的文章也是從中擷取而來,可以參考這一份內容有點多的投影片:
Rollup
如果把 Sidechain、Plasma 和 Rollup 看做同一條發展路線的技術演進,會比較好理解每一個演進所解決的問題及解決的方法。
Sidechain
Sidechain 是由一個中心化角色(稱作 operator)所經營的一條鏈,使用者將錢在 L1 轉給 operator,operator 在 Sidechain 上鑄造出相對應的代幣給使用者。當使用者享受完高速低成本的服務後,將錢在 Sidechain 上轉給 operator,operator 在 L1 上解鎖相對應的錢給使用者。
Sidechain 的缺點是什麼?Operator 有資金的完全掌控權。今天 operator 選擇耍賴,不在 L1 上把錢還給使用者,使用者也拿他沒轍。
Plasma
Plasma 怎麼解決 Sidechain 的問題?它把 operator 的權力用智能合約來取代,使用者只要能向智能合約證明資金的擁有權,就能自由地離開 Plasma 鏈。證明資金擁有權的方式像是提供 Merkle Proof 證明你在一個 Merkle Tree 所保存的狀態裡你有 100 元。這是很客觀的證據,不需要任何中心化角色來做判斷。
在講到 Plasma 的缺點之前,必須要講到 Plasma 的一個運作重點:operator 需要定期把 Plasma 鏈的每一個區塊的標頭檔(Block Header)送交到 L1 上,但不包含區塊內容(即區塊裡包含的每一筆交易)。這些交易會放在 operator 那保管,其他人再向 operator 索取區塊裡包含的交易資料。
Plasma 的缺點是什麼?Operator 雖然沒辦法任意拿走使用者的資金,但他可以選擇把交易資料藏起來,這樣其他人就沒辦法驗證區塊裡的交易,也就沒辦法驗證這些交易執行完的狀態是不是對的。使用者發現 operator 藏著區塊內容(也就是資料不可用,Data Unavailable)的時候,他可以向 L1 Plasma 合約提供證明來離開這條 Plasma 鏈。
Rollup
Rollup 怎麼解決 Plasma 的問題?答案是直接把交易資料都上傳到 L1 上,如此大家都看得到交易(資料可用,Data Available),大家都能自己算出最新的狀態是長怎樣(例如 Alice 有 10 元、Bob 有 5 元)。
Rollup 解決資料可用性的問題,讓使用者不用擔心當 operator 把資料藏起來時,他只能選擇離開這條鏈。Rollup 把對中心化角色的信任需求降到最低,但這也是有代價的,也就是把資料上傳到 L1 的成本。而且這將會是 Rollup 主要的成本所在。
資料可用性
當你的節點不會保存完整的鏈的資料時,就會遇到資料可用性問題,像是 Plasma 或是 Sharding。資料可用性和資料保存成本之間是一個無可避免的 trade-off:自己保存資料達成資料可用性,避免相信第三方來保存資料,提升了安全性,但也因此增加了資料保存成本;想要降低資料保存成本,將資料交予第三方保管,就勢必要犧牲安全性,增加一個對第三方的信任假設。
以上快速介紹了 Rollup 與資料可用性,接下來就要進入正題,介紹 Rollup 與資料可用性的關聯。
Rollup 因為要把交易資料都上傳到 L1 來解決資料可用性的問題,但也必須承擔將資料保存在 L1 所要付出的成本。Rollup 是否可以在資料可用性上做出讓步,以降低資料保存成本呢?
ZK Rollup 與資料可用性
比起 Optimistic Rollup,ZK Rollup 更有資格在資料可用性上做出讓步,這是因為 ZK Rollup 的安全性是由零知識證明保證,有沒有把資料上傳到 L1 並不影響狀態的正確性。
註:這裡的「資料」指的是像是交易資料,不包含零知識證明的「證明資料」,這個證明還是需要送到 L1 驗證才能確保安全性。
但如果真的這麼好,那 ZK Rollup 幹嘛還要把資料上傳到 L1?答案是如前面資料可用性所述,犧牲資料可用性是有代價的,這個代價就是你要相信第三方來保管你的資料。
當保管 ZK Rollup 資料的第三方消失或藏資料時,ZK Rollup 的使用者就拿不到資料,拿不到資料就沒辦法算出當前的狀態長怎樣,也就沒辦法產生 Merkle Proof 來向 L1 Rollup 合約證明例如自己的資產有多少,代表沒有辦法離開這個 Rollup。
註:ZK Rollup 可以選擇把每一個 batch 所改動的狀態(例如 Alice 多了十元,Bob 少了十元)以 storage 的方式存在 L1 Rollup 合約,如此使用者就不需要擔心算不出當前的狀態而離不開 Rollup。只是代價是平常的交易成本會貴非常多。
上一段為了避免混淆讀者,所以先繼續稱呼「不把資料上傳到 L1 的 ZK Rollup」 為 ZK Rollup。但其實相關的專有名詞已經被提出並廣泛討論了,例如 Starkware 稱「不把資料上傳到 L1 的 ZK Rollup」為 Validium 。Starkware 例外還有提供 Volition 模式。
Validium
把資料上傳到 L1 的稱為 Rollup,相反地,把資料交給第三方保管的稱為 Validium。
註:Starkware 的 StarkEx 技術中,保管資料的第三方是由一群節點組成,稱作 Data Availability Committee(DAC)
Volition
Volition 是 Rollup/Validium 的混合模式,讓使用者可以自己選擇要把自己的交易資料上傳到 L1 還是交給第三方保管。
StarkEx 在 v4.5 版後 Rollup/Validium/Volition 三種模式都支援,讓項目方可以自己選擇。
zkSync zkPorter
zkSync 的 zkPorter 設計如同 Volition,支援 Rollup 及 Validium。
Optimistic Rollup 與資料可用性
前面有提到,ZK Rollup 比 Optimistic Rollup 更有資格在資料可用性上做出讓步,這是因為 ZK Rollup 的安全性是由零知識證明所保證,但 Optimistic Rollup 沒有這個優勢。Optimistic Rollup 的安全性仰賴挑戰機制,而要能夠成功挑戰需要先有完整的交易資料!
註:因為零知識證明的優勢,Vitalik 也預測未來 ZK Rollup 將會勝出。
但當然 Optimistic Rollup 不是不可以這麼做,只是這麼做是要犧牲安全性的。如果保管資料的第三方消失或藏資料,那就表示沒人可以成功發起挑戰,也就是任何人都可以搶第一宣稱自己有 Rollup 上所有的錢,然後等到挑戰期過後馬上在 L1 將錢全部轉走。
也真的有項目這麼做了,分別是 MetisDAO、Arbitrum AnyTrust 及 Celestium。
MetisDAO
MetisDAO 把資料交給一個叫 MEMO 的去中心化檔案儲存系統。
如果 MEMO 掛了,那 MetisDAO 就會如同上面所講的直接崩壞。
L2Beat 對 MetisDAO 的安全分析:https://l2beat.com/projects/metis/
Arbitrum AnyTrust
Arbitrum Anytrust 搭建在原本 Arbitrum 的 Rollup 之上,新增一個模式是用 Honest Minority 信任假設來換取低成本、無挑戰期的優勢,在這裡先以信任模式稱之。信任模式會由一群 N 個節點組成的 Committee 來保管資料,要上傳到 L1 的不再是完整的交易資料,而是 Committee 成員們的簽名,且需要至少 N-1 個成員的簽名。
AnyTrust 的安全性假設是 N 個節點中只要有 2 個節點是誠實的節點就好(不需要假設誠實節點過半,也就是 Honest Minority 假設)。如果 L1 收到 N-1 個成員簽名,表示至少有一個誠實節點也簽名了,因此我們可以相信至少那個誠實節點會好好保管資料且會如實提供資料。除了資料不需上傳至 L1 以減少交易成本外,還有無挑戰期的一大使用者體驗提升,也就是相信 Committee 的誠實節點一定會對有問題的狀態提出挑戰,如果他簽名了表示狀態一定沒問題。
AnyTrust 平常都會優先以信任模式運作,如果誠實節點一直沒簽名(可能因為沒拿到資料)導致湊不滿 N-1 個成員的簽名,則會啟動 Rollup 模式,也就是所有交易一律上傳到 L1。此時使用者就沒辦法享有低手續費及無挑戰期的優點。
注意雖然 AnyTrust 可以 fallback 到 Rollup 模式,但是這不代表它跟 Rollup 是一樣安全的,它是有加入 Honest Minority 的信任假設的。如果誠實節點假設被違背,那這條鏈也完蛋了。
Arbitrum 最近剛上線 AnyTrust 版本的鏈,稱作 Arbitrum Nova:https://nova.arbitrum.io
L2Beat 對 Nova 的安全分析:https://l2beat.com/projects/nova/
Celestium
Celestium 和 Arbitrum AnyTrust 有點像,只是資料是上傳到 Celestia 這條公鏈,由 Celestia 的驗證節點來確保資料可用性。可以在下圖中看到左下角的 DA Bridge 合約是專門來驗證 Celestia 節點的簽章的(如同 Aribtrum AnyTrust 合約驗證 Committee 簽章)。
Celestium 不支援 fallback 回 Rollup 模式,也不支援無挑戰期的功能,單純是 Celestia 用來試驗結合以太坊 L2 與 Celestia 的可行性。
結語
將資料交給第三方保管可以降低成本,但無可避免一定要做出一些犧牲。
在 ZK Rollup 裡就會需要擔心第三方如果消失,使用者(資產)狀態雖然不會受影響,但也沒辦法離開該 Rollup。
在 Optimistic Rollup 裡則是要做出安全性的讓步,需要假設完全信任第三方(例如 MEMO)或是相信一群節點,而節點的信任假設裡又分為 Honest Minority(Arbitrum AnyTrust)及 Honest Majority(Celestium)。
使用者在開心跳入之前,需要謹慎衡量這些 trade-off 及自己的風險承受程度。
Special thanks to Cyan Ho and Chang-Wu Chen for reviewing and improving this post