背景
最近,以太坊創始人 Vitalik Buterin 在一篇題為“混合式二層協議的曙光” 的文章[1]里對 Rollup 方案大加贊賞,認為它為智能合約的可擴展性打開了大門。那么什么是 Rollup ?它包括哪些主流方案?這些方案各自有什么優缺點?它們未來發展前景怎樣?為了找到這些問題的答案,筆者對相關項目做了一番調研,將收集到的信息整理成下面這篇文章。
Rollup 的出現
最近幾年,以太坊二層(Layer-2)擴容技術得到迅猛發展。所謂二層,就是將一部分資金存儲在主鏈智能合約里,在保證足夠安全的前提下,把一部分交易放到主鏈之外進行,好像鏈下多出來一層網絡。二層方案里表現比較突出的是狀態通道和 Plasma 側鏈。雖然這兩種方案誕生時間很早,但是發展的卻比較緩慢。其背后的原因歸根結底是數據的可用性(Data Availability)問題。
什么是數據可用性呢?這里有個不太恰當的例子。假設你去賭場玩撲克,首先要把現金換成籌碼,這可以理解成在鏈上創建狀態通道,并存入押金。然后你開始玩撲克,這就是所謂的鏈下交易。在贏得一手大牌之后,你想要兌現走人,突然有人給你腦后來了一悶棍,醒來后桌上的籌碼不翼而飛。你記不起來牌局的細節,所以無法追回已經贏得的籌碼,這就是所謂的“數據不可用”。無論是狀態通道還是 Plasma 側鏈,完整的交易記錄和見證數據都只保存在鏈下,出現爭端時如果參與者沒有及時提供正確的交易和見證數據,交易的安全性就無法保證。就好像是那個忘記了牌局細節的人,很難追回屬于自己的籌碼。
就在二層擴容技術舉步維艱的時候,一種名叫 Rollup 的新方案被提了出來。與狀態通道和 Plasma 不同的是,它可以“打包”交易,并將“打包”后的交易數據連同一個 SNARK 零知識證明發布到鏈上。打包的正確性可以通過零知識證明來見證,負責“打包”的操作者不可能發布惡意或無效的交易。這就是后來被 Vitalik Buterin 稱之為 ZK Rollup 的二層擴容方案。ZK Rollup 并非萬能,它遇到的最大問題是通用性。除非要證明的交易非常簡單,否則創建 SNARK 證明的成本會非常高。因此,一種名叫 Optimistic Rollup 的折衷方案被提了出來。Optimistic Rollup也是把交易數據都放到鏈上,但不是用 SNARK 做見證,而是采用“加密經濟學有效性博弈”來實現有效性驗證。
Rollup 的核心思想是將“打包”后的交易數據區塊發布在鏈上,從而降低交易有效性驗證的難度。交易數據的上鏈和驗證是基于智能合約完成的。操作者收集到不同參與者提交的鏈下交易后,在鏈上執行 Rollup 智能合約提供的腳本,將打包后的交易數據區塊作為參數提交給合約,合約驗證數據有效后為每個參與者記賬。這相當于一次性執行了一批鏈下交易,但是在鏈上只執行了一個交易。
下圖是 ZK Rollup 提交上鏈的打包數據。它包含一組壓縮后的交易數據 [Tx](不包含任何簽名)、執行這批交易之前的老的用戶狀態的 merkle 樹樹根,以及執行交易之后的新的用戶狀態的 merkle 樹樹根。除此之外還包含一個 SNARK 零知識證明,合約用它來驗證在老的用戶狀態上施加這批交易 [Tx] 后結果就是新的用戶狀態。零知識證明具體是如何工作的?這不是三言兩語就能解釋清楚的,大家可以參考文章[2],里面對零知識證明的工作原理做了詳細闡述。
生成 SNARK 的成本非常高,所以 Optimistic Rollup 采用了不同的方法——“欺詐證明”來驗證交易有效性。這里的“欺詐證明”并非 SNARK 那樣的見證數據,它實際上指的是加密經濟學有效性博弈(Cryptoeconomic Validity Game)。越說越暈了#¥¥%......,其實很簡單,就是每次打包后的交易被提交到鏈上時,智能合約都假定它們是正確的,無需驗證。如果有人篡改了交易,操作者或者其它參與者都可以挑戰非法交易,挑戰成功后通過智能合約回滾不正確的區塊,作弊者會受到懲罰,它的押金將會被沒收,部分押金會獎勵給挑戰者。這就是所謂的基于加密經濟學有效性博弈的“欺詐證明”,實際上是讓參與各方互相監督,通過懲罰機制來提高作弊成本。為了實現“欺詐證明”,光有 ZK Rollup 那樣的交易數據 [Tx] 是不夠的,Tx數據需要包涵交易提交者的簽名,合約通過校驗簽名來判斷交易是否合法。
安全性
Rollup 的安全性來自于數據可用性和交易有效性。有了數據可用性和交易有效性,就能保證 Rollup 操作者永遠不能破壞狀態或竊取資金,即使操作者不配合,參與者也能方便的追回 Rollup 網絡上的資產。Rollup 將交易數據發布到鏈上,就像“錨”一樣將 Rollup 網絡錨定到了以太坊主鏈上。就好比是賭場里裝上了攝像頭,即便是玩撲克的人被打了一悶棍,還是能通過視頻記錄證明自己確實贏了錢。
對于交易有效性驗證,ZK Rollup 和 Optimistic Rollup 采取了不同的方法[3]。ZK Rollup 采用零知識證明來保證交易有效。它的安全性建立在密碼學基礎之上,智能合約僅在交易數據被證明為正確之后才會接受狀態轉換。每次狀態轉換都有一個零知識證明,這保證了鏈上總是對應著一個正確的二層狀態。Optimistic Rollup 采用基于加密經濟學有效性博弈的“欺詐證明”,它無需為每一次狀態轉換都提供證明,只在有人認為狀態轉換有誤的時候提供。因為沉默將被視為同意,所以它要求交易方必須每時每刻都要在線。相比較 ZK Rollup,Optimistic Rollup 的安全性有所降低,它需要采取額外的措施來防止 DDoS 攻擊造成的“默許”。
可擴展性
Rollup 通過一次鏈上交易可以執行一大批打包后的鏈下交易,主鏈不需要通過執行每筆交易來驗證其有效性,而且交易數據是作為函數參數發布的,驗證完有效性后就會被丟棄,這樣就不會占據主鏈的存儲空間。因此 Rollup 可以大幅度提升主鏈的可擴展性。
但是這種提升并非沒有限制,雖然只有一次鏈上交易,但是它會受到交易數據本身 gas 成本的制約。以太坊數據的 gas 成本在伊斯坦布爾升級前是每字節 68 單位,而以太坊上每個地址就會占用 20 字節,所以如果用以太坊交易的數據結構來表示鏈下交易,gas 費用會非常高,因此 Rollup 對交易數據進行了壓縮。
ZK Rollup 在智能合約里用 merkle 樹來記錄地址,這樣地址就可以表示成樹的索引值,地址數據的大小就從原本的 20 bytes 減少到只有 3 bytes 到 4 bytes。每筆交易就被壓縮成 10 幾個字節,再加上一個約 100-300 字節的 SNARK,理論上可以將以太坊吞吐量從 32 TPS 提升到約 680 TPS,伊斯坦布爾升級后可達到 2000 TPS。下圖是壓縮后 ZK Rollup 每筆交易數據的格式:
Optimistic Rollup 的吞吐量理論上只有 100 TPS,主要原因是上文提到過的,為了支持“欺詐證明”,Optimistic Rollup的每筆交易數據需要包涵交易提交者的簽名。每條簽名的大小是 64 bytes,這大大增加了提交上鏈的交易數據的字節數,從而很快達到 gas 上限。為了減少交易數據的字節數,一種 BLS 聚合簽名機制被提了出來。如下圖所示, BLS 聚合簽名機制是在操作者收集到所有交易后,將打包后的交易發送給每個交易提交者簽名,因為每個簽名都是針對相同的數據,所以可以被操作者聚合成一個 BSL 簽名。發送給鏈上合約的將是壓縮后的交易數據加上聚合后的 BLS 簽名,從而大幅減少了交易數據所消耗的 gas。BLS 簽名可以將 Optimistic Rollup 的吞吐量從100 TPS提升到 450 TPS,伊斯坦布爾升級后也可以達到 2000 TPS。
延遲
Optimistic Rollup 基于加密經濟學有效性博弈,只有過了1~2周的挑戰期才能確認交易生效。ZK Rollup的延遲相對較小,如果一個打包區塊中有 1000 筆交易,在普通的服務器上大概需要 20 分鐘可以構造出一個證明。開發者已經提出很多減少延遲的方法,比如采用 GPU 加速可以將零知識證明構造時間壓縮到 1 分鐘。還有一種叫做“即時交易收據”(instant tx receipts)的方法兩種 Rollup 方案都適用。它主要借助經濟學博弈來完成,就是負責打包的操作員需抵押一部分安全保證金,如果某個交易沒有被打包到區塊中,這筆錢就會被沒收。理論上“即時交易收據”可以將交易確認時間壓縮到 1 秒以內,但是實現相對復雜,安全性有所降低。
通用性
通用性方面,Optimistic Rollup 明顯好于ZK Rollup,當然它的設計目標就是支持任意智能合約。而 ZK Rollup 目前僅適用于支付之類的特定交易,對于通用智能合約,由于創建零知識證明的成本非常高,部署起來困難較大。為了提高效率, 開發者正在開發專門的零知識證明虛擬機,比如 ZEXE。它在一定程度上可以縮短創建證明的時間,但是缺點是合約開發者需要大量的專業知識。Matter Labs團隊基于ZK Rollup開發的新一代區塊鏈擴展方案 ZK Sync[4],設計開發了一款以委托的方式生成零知識證明的沙盒式虛擬機,開發者不需要深入了解零知識證明領域的技術細節就可以編寫出高效且安全的智能合約。
總結與展望
本文簡要介紹了區塊鏈擴容方案 Rollup 的工作原理,對比分析了兩種 Rollup 方案 ZK Rollup 和 Optimistic Rollup 在可擴展性、延遲、通用性、安全性上的優劣。
(可擴展性*伊斯坦布爾升級后可達到2000 TPS;延遲**使用“即時交易收據”優化后可達1秒)
根據以上的對比分析,短期看來 Optimistic Rollup 由于較好的通用性會受到開發者的青睞;但從長期來看,隨著零知識證明虛擬機的演進,ZK Rollup 會在通用性上不斷提高。它能否主宰智能合約可擴展性的未來呢?這個問題只能留給時間來回答了。
責任編輯;zl
評論