零知識證明 - Loopring DEX 3.0

買賣虛擬貨幣
Loopring,路印,一直專注在高效能的去中心化交易協議。路印協議的目標是想實現以太坊上基於訂單撮合的去中心化的交易協議。從2017年,路印從“環路撮合”的最初設計,經過了1.0,2.0以及3.0的三個大的版本的協議升級。1.0/2.0,相對來說,受限以太坊本身效能的限制,交易流程複雜,體驗和中心化交易所相比,有較大的差距。路印協議3.0,是一種大膽的設計和嘗試,透過零知識證明技術(ZKP),兼顧去中心化和交易效能。

本文對比路印協議2.0/3.0,分析zkSNARK零知識證明技術如何在路印3.0協議中運用。

1. 路印協議1.0/2.0

路印協議在2.0版本之前,雖然有一些細緻的功能和改進,但是,從框架上來說,沒有本質的改變:

鏈下主要由Relay維護訂單(Order Management)和完成訂單的撮合(Settlement Engine)。完成撮合的訂單,需要在鏈上記錄(由鏈上的智慧合約實現)。簡單的說,2.0協議之前,採用的是“鏈下撮合,鏈上記錄“的方式。在這種方式下,所有的交易狀態記錄在鏈上,鏈上的智慧合約需要實現很多邏輯:

· 檢查訂單的簽名資訊
· 檢查訂單的填充率以及是否取消
· 檢查訂單的時間
· 計算費率
· 在上述檢查和計算完成後,完成token之間的轉賬

往往一個撮合中包括多個訂單,完成這樣的一筆撮合大概需要20w~30w的GAS費用。也就是說,在以太坊區塊最大GAS 800w,出塊速度是15秒的前提下,路印2.0協議的撮合效能大概是:每秒大約2筆撮合。

2. 路印協議3.0

採用零知識證明(ZKP)技術,路印協議3.0所有的撮合邏輯都在鏈下完成。每一筆撮合(Settlement)都會生成證明並提交到鏈上,證明鏈下的撮合正確無誤。路印協議3.0的設計文件釋出在Github上:

https://github.com/Loopring/protocols/blob/master/packages/loopring_v3/DESIGN.md

路印協議3.0的框架如下:

2.1 鏈上/鏈下同步

路印協議採用和以太一致的“賬戶”模型,所有的賬戶的“狀態”(餘額)都記錄在鏈下。

所有和狀態相關的操作,都是在鏈下更改,提交Proof到鏈上記錄。因為存在鏈上鍊下的狀態同步,賬戶的任何操作有三個狀態:

1/ Committed (操作已經提交)2/ Verified (該操作已經提供了相應的Proof)3/ Finalized(之前的所有的操作都已經提交正確的Proof)

以使用者Deposit“充值”的操作為例:

使用者轉賬到路印協議的智慧合約,轉賬在鏈上確認(鏈上完成充值)。該操作的狀態就是“Committed”。鏈下的Relay,監測到“Committed”的狀態後,更改鏈下的狀態,生成Proof,並將證明提交到鏈上,此時該“充值”操作的狀態為“Verified” - 鏈下也已經完成充值。如果之前的所有操作都是Verified,那該操作的狀態就是Finalized(也就是這個狀態是確定的,不會被篡改的)。

2.2 鏈下狀態和操作

為了支援DEX的業務場景,並結合ZKP的技術要求,路印3.0將鏈下的狀態用三層的四叉Merkle樹來表示:

第一層是N層的四叉樹,維護DEX的所有賬戶資訊(也就是能支援400w左右的使用者)。
第二層是M層的四叉樹,支援一個賬戶下的所有Token資訊。一個Token一個葉子節點。
第三層是K層的四叉樹,一個賬戶下某個Token的Order資訊。

所有的操作,都會更改這三層Merkle,完成狀態的變化。路印3.0協議支援如下的一些操作:

1/ On-chain Deposits (線上充值)
2/ On-chain Withdrawals(線上提幣)
3/ Off-chain Settlements (鏈下撮合)
4/ Off-chain Withdrawals (鏈下提幣)
5/ Off-chain Order Cancellation(鏈下取消訂單)
6/ Off-chain Transfers (鏈下轉賬)

大部分操作都比較容易理解,需要說明的是2和4。因為每個操作都需要經歷三個狀態,需要鏈上鍊下的同步,所以, 使用者既可以從鏈上,也可以從鏈下發起提幣操作。

2.3 ZKP證明

路印3.0,採用的是zkSNARK的Groth26演算法提供零知識證明。針對每種操作,Relay都會提供對應的ZKP證明電路。以鏈下撮合為例,相應的電路證明的邏輯如下:

假設Account X鏈下轉賬給Account Y。ZKP證明電路,包括:

1/ TradeHistory中Order Ox的變化導致TraderHistory的樹根的變化
2/ TradeHistory中Order Oy的變化導致TraderHistory的樹根的變化
3/ Balance Bx變化導致Balance的樹根的變化
4/ Balance By變化導致Balance的樹根的變化
5/ 兩個賬戶的Balance的變化一致
6/ Account X和Account Y賬戶的變化導致的Account樹根的變化

注意,不同的操作會有不同的電路對應。簡單的說,鏈下的狀態的變化,都會對應不同的電路,並且,電路生成的證明會提交到鏈上。鏈下的狀態變化,“固化”成規則,並透過ZKP的電路表示。這種思路,和以太坊的zk Rollup的思路一致。

在鏈上,雖然智慧合約不再需要驗證和記錄撮合資訊,但是,需要提供Order資訊以及各種操作的證明。Order資訊可以透過Calldata儲存在鏈上。在鏈上驗證Groth26的Proof,還是比較昂貴的。一個Proof的驗證,目前需要50w左右的GAS費用。在君士坦丁堡升級後,可以降到原來1/4左右。

為了進一步節省鏈上的GAS費用,路印3.0設計了“Batching”的操作處理(批次處理),也就是多個同類操作,一起生成一個Proof。多個同類操作,被打包在一起,稱為“Block”(和區塊鏈中的Block不是一個含義)。

3. 效能對比

在足夠多的交易的情況下,路印3.0的TPS在目前的以太坊上達到了350。在君士坦丁堡升級後,TPS能達到1400。每筆交易平均下來的費用大約在1美分。

總結:

Loopring,路印,一直專注在高效能的去中心化交易協議。從2017年,路印從“環路撮合”的最初設計,經過了1.0,2.0以及3.0的三個大的版本的協議升級。路印協議3.0,透過零知識證明技術(ZKP),兼顧去中心化和交易效能。在鏈下維護Account模型的賬戶狀態,每個操作都透過ZKP,生成證明並儲存到鏈上,保證鏈下的狀態可靠安全。在足夠多交易的情況下,目前路印3.0協議的TPS可以達到350。每筆交易平均下來的費用大約在1美分。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;