將提升交易速度?「ZK Rollup」真的會是Layer 2的解決方案嗎?
以太坊愛好者/張詠晴編譯
2019-10-07 11:45

 

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。

 

01

-地址的梅克爾樹(Merkle Tree)-

 

這是數據格式(這是最初的提案,後來的實作交易量更小)

 

02

 

因為用索引值當地址的代表,所以只需要 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」)。

 

03

- https://vitalik.ca/general/2019/08/28/hybrid_layer_2.html -

 

本文為巴比特資訊授權刊登,原文標題為「如何理解 layer 2 數據可用性解決方案 ZK Rollup?