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。

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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 中的⼀种作为⼿续费。

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+2+16+20 = 43 字节。总共 4 个 Chunk。

4.3 Transfer

用户通过 ZKSwap Layer2 发起的转账交易,可实现任意 Token 的转账。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+2+4+5+1+2 = 19 字节。2 个 Chunk。

4.4 TransferToNew

用户通过 ZKSwap Layer2 发起转账交易,可实现任意 Token 的转账。转账对⽅不需要提前创建账户。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+2+20+4+5+1+2 = 39 字节。4 个 Chunk。

4.5 Withdraw

用户通过 ZKSwap Layer2 发起提现操作,可实现任意 Token 在 Layer1 的提现。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+20+2+16+1+2 = 46 字节。5 个 Chunk。

4.6 FullExit

用户可直接从 ZKSwap Layer1 发起 FullExit 请求,提取资产,此操作需要 Layer2 提供证明。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+2+20+16 = 43 字节。4 个 Chunk。

4.7 ChangePubKey

用户通过在 ZKSwap Layer2 发起提取交易,可实现任意 Token 在 Layer1 的提现。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+ 4+2+2+2+20 = 31 字节。总共 3 个 Chunk。

4.9 AddLiquidity

用户通过 ZKSwap Layer2 添加流动性。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+4+5+5+5+5+1+2 = 32 字节。总共 3 个 Chunk。

4.10 RemoveLiquidity

用户通过 ZKSwap Layer2 移除流动性。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

pub data 的总⻓度 = 1+4+4+5+5+5+1+2 = 27 字节。总共 3 个 Chunk。

4.11 Swap

用户通过 ZKSwap Layer2 实现两种 Token 之间的兑换。

a. pub data

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

6.2 AddLiquidity Circuit

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币
ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币
ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

6.3 RemoveLiquidity Circuit

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币
ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

6.4 Swap Circuit

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币
ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

7. Withdrawal Optimization

ZKSwap V2 版本提现操作和区块验证隔离开,区块中的提现个数将不受限制。

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

在某个区块验证后,通过 Check Withdrawals 函数创建 Pending Withdraws,再通过 Complete Withdrawls 完成提现。Complete Withdrawls 函数需要增强可以优先处理某个 Pending Withdraws。区块验证是针对多区块聚合实现的。Check Withdrawals 针对每个验证后的区块进⾏处理。创建⼀个 Pending Withdraw 的 gas 费⽤在 7w 左右,按照⼀个交易最⼤的 gas 费⽤ 1250w 来说的话,⼀个区块⽀持的最⼤的提现个数是 178 笔。

7.1 checkWithdrawals

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

7.2 completeWithdrawals

ZKSwap V2 版本预计将于 6 月份上线,支持 Layer2 自主无限上币

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。