ZKSwap V2版本預計將于6月份上線,支持Layer2自主無限上幣

ZKSwap V2 版本預計將于6月初正式上線, 屆時新版本將會支持 Layer2 的自主無限上幣,用戶可以自主添加自己發行的 ERC20 token 到 ZKSwap 的 Layer2 支付網路和兌換網路,實現免費實時轉賬任意 ERC20 代幣(包括任何穩定幣)以及免費實時兌換任意 ERC20 代幣,

ZKSwap 在 V1 的基礎上,V2 版本新增了如下功能:

1) “⽆限”上幣 – ⽤戶在⽀付⼀定費⽤的情況下,可以⾃主添加任意 Token,并可創建交易對;

2) 優化電路分支的實現,提升電路效率 – ⽀持⼀個賬戶,兩個余額的修改;

3) 優化提現體驗 – V1 版本中,提現的操作和區塊驗證操作捆綁在⼀起。由于每筆 gas 費⽤的限制,導致區塊中的提現的個數受限,特別是在聚合驗證的情況下,受限更多,V2版本將會優化用戶的提現體驗,

1. Token管理

ZKSwap V2 版本將⽀持三種類型的 Token:Fee Token、User Token 和 LP Token,總共⽀持 2^16 個 Token。

1.1 Fee Token

Fee Token 只能由 Governor 添加,主要為 ETH、ZKS、USDT、USDC 和 BTC 等。

1.2 User Token

User Token ⽤戶可以付費添加,

1.3 LP Token

ZKSwap ⽤戶創建交易對時,必須⽀付費⽤,LP Token 將在⽤戶創建交易對時⾃動添加。用戶創建的交易對中必須有⼀種 Token 是 Fee Token,User Token 能創建的交易對個數受限(由 Governor 設置),

1.4 Governor Config

Governor 可以設置添加 User Token 和修改創建交易對⽀付的費⽤,

2. 賬戶管理

ZKSwap V2 版本將⽀持 2^28 個賬戶。其中賬戶 0 為 Validator 賬戶。

3. Fee模型

ZKSwap V2 版本上的 Layer2 交易,可以指定 Fee Token 中的⼀種作為⼿續費。

4. Pub Data of Transactions

ZKSwap V2 版本上的所有交易(包括 Layer1 / Layer2 交易)都需要打包提交 Pub Data 到 Layer1,為了保持最優的電路性能,Chunk ⼤⼩為 11 字節,兌換和轉賬只需要 2 個 Chunk,

4.1 Noop

ZKSwap V2 版本允許存在空交易,來填充 Layer2 區塊,

a. pub data

pub data 的總⻓度 = 1 字節,

4.2 Deposit

用戶從 ZKSwap Layer1 發起充值操作時,系統會將用戶 Layer1 的資產映射到 Layer2。

a. 接⼝函數

function deposit ERC20 (IERC20 _token, uint104 _amount, address _franklinAddr)

function deposit ETH (address _franklinAddr)

b. pub data

pub data 的總⻓度 = 1+4+2+16+20 = 43 字節。總共 4 個 Chunk。

4.3 Transfer

用戶通過 ZKSwap Layer2 發起的轉賬交易,可實現任意 Token 的轉賬,

a. pub data

pub data的總⻓度 = 1+4+2+4+5+1+2 = 19 字節,2 個 Chunk。

4.4 TransferToNew

用戶通過 ZKSwap Layer2 發起轉賬交易,可實現任意 Token 的轉賬。轉賬對⽅不需要提前創建賬戶,

a. pub data

pub data 的總⻓度 = 1+4+2+20+4+5+1+2 = 39 字節,4 個 Chunk。

4.5 Withdraw

用戶通過 ZKSwap Layer2 發起提現操作,可實現任意 Token 在 Layer1 的提現。

a. pub data

pub data 的總⻓度 = 1+4+20+2+16+1+2 = 46 字節。5 個 Chunk,

4.6 FullExit

用戶可直接從 ZKSwap Layer1 發起 FullExit 請求,提取資產,此操作需要 Layer2 提供證明,

a. pub data

pub data 的總⻓度 = 1+4+2+20+16 = 43 字節。4 個 Chunk。

4.7 ChangePubKey

用戶通過在 ZKSwap Layer2 發起提取交易,可實現任意 Token 在 Layer1 的提現。

a. pub data

pub data 的總⻓度 = 1+4+20+20+4 = 49 字節,5 個 Chunk,

4.8 CreatePair

用戶通過 ZKSwap Layer1 發起交易池的創建。創建交易池需要在 Layer1 創建對應的智能合約(LP 代幣),

a. 接⼝函數

function createPair (address _tokenA, address _tokenB)

b. pub data

pub data 的總⻓度 = 1+ 4+2+2+2+20 = 31 字節,總共3個Chunk,

4.9 AddLiquidity

用戶通過 ZKSwap Layer2 添加流動性,

a. pub data

pub data 的總⻓度 = 1+4+4+5+5+5+5+1+2 = 32 字節,總共 3 個 Chunk,

4.10 RemoveLiquidity

用戶通過 ZKSwap Layer2 移除流動性,

a. pub data

pub data 的總⻓度 = 1+4+4+5+5+5+1+2 = 27 字節。總共 3 個 Chunk,

4.11 Swap

用戶通過 ZKSwap Layer2 實現兩種 Token 之間的兌換,

a. pub data

pub data 的總⻓度 = 1+4+4+5+5+1+2 = 22 字節。總共 2 個 Chunk。

5. Circuit Optimization

ZKSwap V2 版本為了降低 AMM 相關操作的 Chunk 個數,需要降低“Branch”的個數,原有設計在狀態樹上的⼀個 Account 和⼀個 Token 的 Balance 組成⼀個“Branch”,在 AMM 相關的操作中,如果采⽤ Fee Token 的⽅式,原有的設計效率⽐較低,需要⽀持 1 個 Account 和 2 個 Token 的 Balance的“Branch”。

1) Account Audit Path (aap)

2) 該 Account 下的 2 個 Balance (balance0 / balance1) 在修改前的 Audit Pat(bap0/bap1) 3) 該 Account 下的 2 個 Balance (balance0’/balance1′) 在修改后的Audit Pat(bap0’/bap1′)

在修改前電路需要證明:

• balance0 + bap0 ==> b_root0

• balance1 + bap1 ==> b_root0

• account (b_root0) + aap ==> root

在balance修改后電路需要證明:

• balance0′ + bap0 ==> b_root0′

• balance1 + bap1′ ==> b_root0′

• balance1′ + bap1′ ==> b_root0”

• account(b_root0”) + aap ==> root’

6. AMM Circuit Explanation

6.1 CreatePair Circuit

6.2 AddLiquidity Circuit

6.3 RemoveLiquidity Circuit

6.4 Swap Circuit

7. Withdrawal Optimization

ZKSwap V2 版本提現操作和區塊驗證隔離開,區塊中的提現個數將不受限制,

在某個區塊驗證后,通過 Check Withdrawals 函數創建 Pending Withdraws,再通過Complete Withdrawls 完成提現。Complete Withdrawls 函數需要增強可以優先處理某個Pending Withdraws。區塊驗證是針對多區塊聚合實現的,Check Withdrawals 針對每個驗證后的區塊進⾏處理。創建⼀個Pending Withdraw 的 gas 費⽤在 7w 左右,按照⼀個交易最⼤的 gas 費⽤ 1250w 來說的話,⼀個區塊⽀持的最⼤的提現個數是 178 筆,

7.1 checkWithdrawals

7.2 completeWithdrawals

8. Limitation

1. Fee Token:32個;User Token:16352個;Pair:49152

2. 兌換中交易對的 2 個 Token,其中一個必須是 Fee Token;

3. 兌換時收取的費用將是 2 個 Token 中的一個 Fee Token;

4. 所有交易的⾦額最⼤為 120 bit,且任何中間計算變量的最⼤值為 120 bit。

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧