簡單一句話解釋 ZK Rollup 就是,數據放在鏈上的 layer 2 解決方案。

原文標題:《科普 | ZK Rollup & Optimistic Rollup》
作者 : Kimi Wu
翻譯 : 阿劍

作者注:ZK Rollup 不是一個新的提案,大約在一年前被 Barry Whitehat 所提出,同時間 Vitalik 在以太坊研究員的論壇有一篇比較完整的文章解釋,現在由 Matter Lab 在開發。研究完 zk-SNARKs 之後,一直沒空來看,直到最近纔有機會來深入瞭解。除了 ZK Rollup,也會簡單帶一下前陣子在 Plasma Group 所提出的 Optimistic Rollup。

ZK Rollup 一開始提出來的時候,是被定義爲 layer 2 的解決方案,年初的時候一度以 Plasma Ignis 這個名稱作爲發表。應該是因爲去年 Plasma 很紅,一直不斷有新的提案跟進展,加上這當時也被定義爲 layer 2 的解決方案,這些種種原因,開發者就冠上了 Plasma 的名稱,不過因爲這項技術跟 Plasma 的精神完全不一樣,被社羣抗議,後來就恢復到 Rollup 這個名稱(開發者的聲明),所以搜尋 「Plasma Ignis」會找不到什麼東西。到最近,Rollup 被更名爲 semi-layer 2 的解決方案,就是有一點 layer 2 但又沒這麼 layer 2。

簡單一句話解釋 ZK Rollup 就是,數據放在鏈上的 layer 2 解決方案。

在瞭解 ZK Rollup 之前,先來解釋原本 layer 2 有什麼問題。以 Plasma 爲例,Plasma 鏈只把 Plasma 區塊的 hash 放上 Ethereum 主鏈上做公正(欲瞭解 Plasma 可以參考這裏),也就是在鏈下交易了數百或數千筆的交易,最後上鍊只有幾十個 bytes,這是鏈下交易的精神,但也是設計上最麻煩的地方——數據的可取得性(編者注:大陸一般譯爲 「數據可用性」)。
就是當有人要離開這個鏈時,需要一個額外的遊戲規則,在 Plasma 叫做挑戰期(因爲鏈上沒有數據,需要側鏈參與者的提供證據),這衍生了有數據才能挑戰,所以大家都要存一定數量的數據,相較於跟主鏈的互動,只需要裝一個錢包,並不需要下載區塊數據,用戶體驗上差異很大。挑戰期的另一個問題是,使用者需要保持上線狀態,不然錯過挑戰期,就代表默認了交易(因爲是採用詐欺證明並非是有效性證明)。簡單來說,因爲數據的可取得性問題,衍生了:

  • 使用者需要常常在線
  • 需下載部分數據
  • 而造成使用者體驗很糟(當然現在的 Plasma 設計已經改進了不少)

如何將數據放在鏈上,又不會造成數據過大呢?

首先,先介紹整體架構。跟 Plasma 一樣,有一個智能合約做擔保,有中繼者 (relayer) 幫忙送交易到智能合約(在 Plasma 叫 operator),中繼者除了送交易外,還需要產生 SNARK 證明,一起送上鍊做驗證。

智能合約的部分,可以想象跟 ERC20 一樣,在合約裏記每個參與者的帳,差別在於,標準的 ERC20 交易是由 Ethereum 這系統做驗證,也因此不能合併(因爲這就是 Ethereum 的標準交易),而 Rollup 中,是把好幾筆交易包成一個標準交易,對 Ethereum 這個系統,就是一個交易,而驗證交易的有效性則由智能合約做驗證。

實際在智能合約裏,用兩個 merkle tree 做紀錄,一棵樹是紀錄地址,所以只需要樹的索引值就可以代表一個地址(未註冊的索引值內容爲 0),因此地址的數據量就從原本的 20 bytes 減少到只有 3 bytes,另一棵樹則記錄 balance 跟 nonce。

如何理解 layer 2 數據可用性解決方案 ZK Rollup?

這是數據格式(這是最初的提案,後來的實作交易量更小),
如何理解 layer 2 數據可用性解決方案 ZK Rollup?

因爲用索引值當地址的代表,所以只需要 3 bytes (2²⁴個地址),Value 的部分是以 10^-6 當作基底,這樣只需要 15 bytes 就可以代表一筆交易,而儲存這樣一筆交易大約只需要 892 gas (雖然 Value 是 6 bytes,但是文章中的假設大部分的交易只會使用到 4 bytes,所以算法是 13 bytes * 68 + 2 bytes * 4 = 892),而一般 ether 的轉移需要 21K gas,因此交易速度能提升(所以 Vitalik 的文章標題是 「On-chain scaling to potentially ~500 tx/sec through mass tx validation」)。
如何理解 layer 2 數據可用性解決方案 ZK Rollup?

爲什麼交易速度能提升?也順便來了解一下交易速度

現今以太坊每個區塊的 gas 上限約 8M,所以若單純 ether 交易,速度約略是

8M / 21K / 15 ~= 25 tps

所以現在的交易瓶頸其實是 gas 的問題,下降交易手續費(編者注:指調低轉賬所需耗用的 Gas 數量)或是提升區塊 gas 上限,都能適時紓困(但也會造成衍伸的問題),而 ZK Rollup 就是藉由交易數據量 (size) 的減少,進而能增加交易速度。那來看一下使用 ZK Rollup 後交易速度能到多快

(8M — 600K (zk-SNARK 驗證) — 50K (預計合約運行的 gas 花費)) / 892 / 15 ~= 550 tps

這個數字就是 Vitalik 文章的標頭 “On-chain scaling to potentially ~500 tx/sec”。但實際上並沒有這麼理想,在作者 Barry 的實作中,大約只有 268 tps,因爲每次資產的更新都會留下 event,所以有多餘的 gas 花費,然而,這樣的設計在應用上也是比較親切的。

數據都在鏈上,而且透過 zk-SNARK 做驗證,代表着上鍊的數據都是被驗證過的,因此就沒有一開始 layer 2 遇到的問題,需要挑戰、需要下載數據等等。這也隱含着不需要信任中繼者,因爲他們無法作壞,最多就是不幫你送交易。

事情沒有這麼美好…

大家都覺得 zk-SNARK 像個萬靈丹一樣,用了好像什麼事都解決了,不過實際上並沒有這麼完美。zk-SNARK 除了需要初始設定之外(編者注:指需要信任的初始設置),最大的問題就是需要大量的運算力,在 Barry 提供的數據中,中繼者的計算機若是一臺 8G 內存加上 20G 的硬盤 swap,大概只能產生 20 tx/sec,遠遠不及預期的 500tps 或是實作的 200 多 tps。所以這個方案最大的問題在於要怎麼解決算力問題。

平行運算!

Matter Lab 使用了多中繼者模型跟平行運算。多中繼者的模型,很像小型的區塊鏈,使用了 DPOS (Delegated Proof of Stake),還有隨機挑選區塊產生者,所以被挑選到的區塊產生者,就可以收集交易、產生證明並且上鍊。這樣的方法避免了中心化,若中繼者被惡意攻擊,整個網絡還是能運作得下去,另一方面,也爲平行運算做了鋪路。零知識證明的產生非常花時間,因此基於多中繼者模型,Matter Lab 提出了 “上鍊-驗證” 兩階段的方式,也就是中繼者先把數據上鍊,下一個階段再上傳證明做驗證,進而達到平行運算(如下圖)。再加上一些數據的優化,測試結果可達到 1600 tps。
如何理解 layer 2 數據可用性解決方案 ZK Rollup?

延遲…

聽似很美好,但是因爲你的交易被分兩階段上鍊,也就是從送出到到被驗證,會是好幾個區塊,時間比原本單純上鍊時間會更久。當然,延遲多久是使用者可接受的,這目前也無從得知。這是一個取捨,省了手續費,增加了交易速度,卻也增加了時間的延遲,這一切也要等上線後纔會知道。

今年初,Vitalik 在臺北的線下聚會中分享了 ZK Rollup 的進階版 — ZK ZK Rollup,有興趣的人可以參考這篇文章,記錄的很詳細。

Plasma & Optimistic Rollup

Optimistic Rollup 在設計上跟 Plasma 相關,所以只會簡單帶一下差異。

Karl (注)基於 ZK Rollup 的設計,在上個月提出 Optimistic Rollup,概念上也是把數據都放鏈上,但不是用 zk-SNARK 做驗證,因爲希望能達成更普遍性的應用。而不一樣的地方有,把 from 的部分,改爲使用者的簽章(65 bytes),因爲數據量變大的,可想而知,花的 gas 會更多,交易速度就會不及 ZK Rollup。另一部份是,因爲不是用 zk-SNARK 做驗證,就需要數據驗證的輔助方法(validity game),這邊就不詳細介紹,有機會再寫一篇 Plasma/Optimistic Rollup 的詳細介紹。

在估算上,交易速度約是 100 tps,若簽章方式改爲 BLS,約可提升到 450 tps。而在 10 月的硬分岔後,gas 會下降,預估的交易速度也會分別到達 400/2000 tps。(許願:希望有人可以介紹一下 10 月的硬分岔細節 XD)

注:在中文的媒體文章中,都稱他是 Casper 的核心研究員之一,但是從我一開始知道這個人,都是在大力宣揚 Plasma,他的部落格、twitter 都是跟 Plasma 相關的文章,不確定他在 Plasma Group 的角色,但我是把他定位成 Plasma Group 的 leader

來源鏈接:mp.weixin.qq.com