ZKSwap 设计规格

此设计规格描述了ZKSwap协议与ZKSync的区别。

ZKSync 提供了实现 ERC20 币种转移的 ZKRollup 框架。ZKSwap 是在以太坊上使用 ZKRollup 技术实现的基于 PlonK 证明系统的 L2 加密货币交易协议。

1. 交易协议

交易协议部分与 Uniswap 相同,但交易路径限制为 1。这意味着目前仅支持已创建交易对的两个币种之间相互直接交易。

2. 账户与交易对账户

L2 的整体状态由一棵默克尔树表示,并以账户和币种分层。账户默克尔树的高度是 ACCOUNT_MERKLE_DEPTH,币种默克尔树的高度是 TOKEN_MERKLE_DEPTH。

1

账户节点包括以下域:

2

与 zkSync 中的账户相比,ZKSwap 新加入了 Token0 ID、Token1 ID、Reserve0、Reserve1、LP tokenID、LP Total Amount 等域,从而可以实现交易相关的操作。

ZKSwap 协议支持两类账户:账户与交易对账户。对账户而言,附加信息没有作用,所以(这些域)是空的。对交易对账户而言,附加的域应该被正确填充,并且 PubKeyHash 固定为零。

3

3. 币种管理

ZKSwap 智能合约帮助维护一个币种列表。该列表分为两个部分:普通 ETH/ERC20 币种和 LP ERC20 币种。

a. 普通ERC20币种

总计支持 128 种 ETH/ERC20 币种���序号为 0 至 127,序号 0 为 ETH 预留。

b. LP ERC20币种

总计支持 2048-128=1920 种 LP ERC20 币种。LP ERC20 币种的序号从 128 开始。 在 Layer2 中,每个币种都被赋予一个 ID。这个 ID 会在 L1 与 L2 中通过 ZKRollup 转账进行同步。

4. 交易操作

共有4种交易相关的操作。CreatPare 帮助用户创建交易对,而交易对由两种不同的币种组成。AddLiquidity 和 RemoveLiquidity 操作能增加和移除流动性。Swap 操作可以把一种加密货币换成另一种加密货币。

4

a. CreatPair

CreatPair 操作从 L1 转账开始。ZKSwap 智能合约会创建一个币对的 ERC20 智能合约和相应的 LP 币种。L2 会使用该币对 ERC20 合约地址识别该交易对,并把相应的 LP 币种地址绑定至对应的 LP token ID。

5

6

b. AddLiquidity

当创建一个币对后,用户就可以给该币对增加流动性,也就是提供该币对对应的两种资产。AddLiquidity操作开始于 L2。

7

通过添加流动性,一个账户可以被授予流动性代币(LP Token)。每种流动性代币都存储在 L2,并可被提取至 L1。

8

c. RemoveLiquidity

移除流动性操作可以从一个交易对中移除特定的资产,该操作开始于 L2。

9

d. Swap

Swap 操作用来把一种加密货币通过币对账户换成另一种加密货币,两个币种的兑换比率取决于两个币种在币对账户中的余额。

10

11

5. 电路设计

L2 的世界状态由转账执行,并被电路再次确认。当一笔转账应用在电路上时,它会被分成 OperationBranch 和 Operation Arguments 两部分。OperationBranch 描述了默克尔路径,Operation Arguments 表述了 Branch 以外的所有信息。

12

Operation(操作)是一种重要的结构,也是最小的电路块。

13

一次逻辑转账会被分成多个操作,一个电路块能动态支持不同的操作数量。

14

a. CreatePair

CreatePair 电路会尝试用特定的币种信息创建一个币对账户。

15

b. AddLiquidity

16

17

18

19

c. RemoveLiquidity

移除流动性的操作是增加流动性的逆操作。

20

21

d. Swap

22

23

24

6. 费用模型

除了交易操作外,ZKSwap 协议没有其他费用。

25

7. Exodus(撤离)模式

如果 L1 的请求在三天内没有被处理,ZKSwap 协议就将进入撤离模式。如果撤离模式开启,用户可以并应该提供资产证明,将资产提取至 L1。

从撤离模式的角度来看有两种资产:一是普通的 ERC20 代币,另一种是一种币对的流动性代币。

a. 普通 ERC20 代币

对于普通 ERC20 代币来说,默克尔路径应该被最后的默克尔根所验证。

26

b. 流动性代币

对于流动性代币来说,用户需要提供更多的默克尔路径。特定币对的信息应该是正确的,且该账户的流动性代币也应该是正确的。

27

28

29

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 2021-02-01 17:29
  • 阅读 ( 391 )
  • 学分 ( 4 )
  • 分类:零知识证明

0 条评论

请先 登录 后评论
ZKSwap
ZKSwap

16 篇文章, 121 学分