在之前花了兩個系列介紹了ZK Rollup的ZK以及Rollup了,那麼現在相信你們對ZK Rollup的概念已經算是有一定程度的認識了,如果還沒的話可以點這邊補一下之前的文章,那麼這系列將會講深一點點的ZK Rollup,包含他的架構以及如何實作,最後來看一下他會有怎樣的效果,那麼今天我就先從架構開始談起,不過不同的ZK Rollup的項目架構都有所不同,我這邊就講一個比較常見的版本。
我們都知道ZK Rollup主要交易都在鏈下,而鏈上都在進行存證,所以ZK Rollup的架構也在鏈上跟鏈下各有不同,而之前曾講過以太坊Layer 2的概念,所以也有人會稱在鏈上為Layer 1、鏈下叫做Layer 2,但不論如何,我這邊都用鏈上跟鏈下來區別。
之前有談過說人們解決以太坊可擴展性是使用支鏈的方式,我相信Rollup也有參考過這種概念,所以在鏈下的結構基本上就跟鏈上差不多,差別只在於使用人數會比較少,因為不太可能發生鏈上所有使用者都跑來鏈下的情況,所以在鏈下,ZK Rollup也會跟鏈上一樣維護一個屬於自己的帳號樹(account tree)以及鏈下的公開帳本,如果不知道帳號樹的,可以上網搜尋一下以太坊的資料結構。基本上帳號樹在維護的,便是各個帳號的狀態,包含餘額以及nonce之類的,所以有時候帳號樹也會被稱為狀態樹(state tree),而這個資料結構主要是用來解決雙重支付(double spending),裡面的nonce是用來解決重放攻擊(replay attack)的,也因為鏈下交易人數一定會比鏈上少,所以在這個情況下,大部分的設定都傾向將所在的帳號樹節點設計成鏈下的交易地址,因為我們都知道在鏈上的交易地址是用公鑰做雜湊得到的,總共大小是20個Bytes,如果這時候用帳號樹的節點作為交易地址只需要花差不多3到4個Bytes就可以完成,所以如果交易明細也要上鏈的話,這樣也可以達到節省空間的效果,除了要有服務維護帳號樹跟交易紀錄之外,還需要有服務去聽取鏈上的資料,當鏈上有人想要把其他資金轉成鏈下時,會有一個服務專門去將這些事件轉成交易,放入公開帳本中,而每當公開帳本累積到一定數量未上鏈的交易時,還需要有一個服務專門產生出證明,用來打包上鏈,以上便是ZK Rollup在鏈下會做的事情以及整個架構。
而在鏈上ZK Rollup基本上會提供一個智能合約,這個智能合約要負責的有兩個功能,首先第一個功能算是最重要的,這個智能合約要負責鏈上的存證,證明鏈下的交易都有效,所以智能合約會透過記錄當前已經實現交易的交易包跟當前帳號樹的根植狀態當作一個存證,當然這些交易包跟帳號樹的狀態都是會透過驗證證明的合約來驗證他們都是正確的;而第二個功能便是他需要擔任一個橋的功能,這個橋將會連結鏈上跟鏈下,每當有人想要注入資金或者將鏈下資金領回鏈下時,也是靠著這個智能合約來達成目的,以上便是ZK Rollup鏈上智能合約的功能,所以基本上在鏈上ZK Rollup只需要管理好這個合約就好。
了解完架構之後,就可以開始實作了,假如看完上面的架構還不是太懂,我相信一定可以透過實作環節來更加認識他,接下來我會帶大家來實作一個小型的ZK Rollup,就當作是一個實驗,來檢驗看看ZK Rollup帶來的效益,以及讓大家更加理解ZK Rollup,而在實作之前可能會先介紹一下我會使用的工具,雖然之前有介紹過做零知識證明的工具,但今天如果要完成一個ZK Rollup可不僅僅需要零知識證明工具這麼簡單,再加上之前介紹的工具在使用上可能會有點困難、不太好理解,我這邊會介紹另外一個比較容易理解的零知識證明工具,所以從明天開始就來介紹我將會使用的工具以及實作小型的ZK Rollup吧!