ZeroSwap:基于 ZK-Rollup 的 DEX(花开满原野,梵高)

在 DeFi 领域,DEX 是最重要的组成部分。根据 Duneanalytics 的统计,过去 7 天的 DEX 交易量已经超过 40 亿美元。Uniswap 当日的交易量也超过 3 亿美元,这些交易量都是记录在链上的真实交易量,不可做假。

在今年年初的时候 Uniswap 上锁定的资产量才 1500 万美元左右,即便是两个月前的 7 月 25 日也才 8000 多万美元,而仅仅两个多月后,Uniswap 锁定资产量超过 20 亿美元,可见其发展的迅速。

ZeroSwap:基于 ZK-Rollup 的 DEX(两个月时间 Uniswap 的锁定资产量从不到 1 亿飙升至超过 20 亿美元)

DEX 的难题

虽然 DEX 发展迅速,但盛况之下并非没有缺陷。如今的 DEX 交易量往往由投机交易、挖矿等因素驱动,掩盖了一些需要重视的问题。这些问题包括高费用、速度慢、低吞吐量、用户体验差等。参与过挖矿的用户都深有体会,在拥堵的高峰期,挖矿 gas 费用几十美元,甚至上百美元也是常有的事情。

ZeroSwap:基于 ZK-Rollup 的 DEX(拥堵时以太坊上的高额 gas 费用)

由于多数 AMM 模式的 DEX 执行都是在链上完成,每个交易每个操作都需要等待区块确认,这导致交易速度过慢。对于用户来说,swap 本意是兑换,但这种兑换的体验不够理想。

目前大多数的 DEX 都是基于以太坊,以太坊的 TPS 大约不到 20,对于不断增长的交易需求来说,这样级别的吞吐量是明显不够的。

DEX 的 技术出路

目前的 DEX 用户还是相对小众的加密用户,即便如此,也不堪重负。假设,DEX 要跟 CEX 竞争,要对 CEX 形成足够的竞争压力,它还需要解决上述的基础设施滞后的问题。

为了解决这些问题,目前有两个选择,一是离开以太坊,进入其他公链进行构建,正如目前 Serum 在 Solana 上构建 DEX 一样;二是依然留在以太坊上,利用 Layer 2 的技术进行扩展,同时等待以太坊的分片。

在其他公链上构建 DEX 的优势是,费用、速度、吞吐量等问题都可以得到极大缓解;不足之处在于它从头开始,需要较长时间构建,因为 DeFi 上在以太坊上已经有足够多的乐高技术,且形成了一定程度的网络效应,同时在网络安全性上以太坊也更高。

还有第二种方案是依然基于以太坊,但充分利用 Layer 2 技术,以实现对 DEX 现有问题的解决。蓝狐笔记之前也提到过 Layer 2 赛道 《以太坊的 Layer 2 赛道》,其中 Zk-Rollup 在安全性上有它的优势,同时也可以解决费用、吞吐量等问题,适合于 DEX 方面的构建。

ZeroSwap 的 Layer 2 方案

ZeroSwap 是基于 Zk-Rollup 技术的 DEX。ZK-Rollup 是一种 Layer2 的解决方案。ZeroSwap 试图解决上述 DEX 存在的问题,它的核心在于通过应用 Zk-Rollup 技术实现低费用、快速的兑换体验,同时它还具有高级别的安全性。

利用 Zk-Rollup 技术,将 ERC20 代币转移到 Layer 2,所有的代币交易和兑换发生在 layer 2,不过由于它可以通过不断生成的零知识证明保证 layer 1 和 layer 2 状态的一致性,由此可以无须等待区块确认时间,无须缴纳高额 gas 费用,实现更快速度的兑换,同时还拥有 layer 1 级别的安全性,这是接近于 CEX 的代币兑换体验。

具体来说,ZeroSwap 利用了 zkSync 的 Zk-Rollup 技术。zkSync 是 Zk-Rollup 技术的一种实现。首先是用户将签名的交易提交给验证者。验证者将多笔交易执行 rollup 操作,合并为一个区块,并将更新后的合约状态树的根哈希、与之相对应 SNARK 证明发送到链上的合约。验证者也会把交易对应的状态增量发送到链上,由此人们可以重新构建交易后的状态。

由于 SNARK 证明和状态增量都会经过链上合约的验证,可以证明所有交易的合法性以及区块数据的可用性。因此,验证者是无法篡改状态的,也无法挪用 Layer 2 上的资金,因为所有状态的改变都需要对应证明,这是无法伪造的。

此外,在这个过程中,资金并没有托管给第三方,私钥依然由用户掌握。从 zkSync 的 Zk-Rollup 实现可以看出,Zk-Rollup 的核心思想是通过大量交易聚合,以及链上智能合约来解析和验证这些交易,并使用零知识证明技术将这些聚合交易的证明上链,从而实现 layer 2 层面的代币交易。

在这个过程中,大部分计算和存储都发生在链下,链上存储的数据大大减少,资金锁定在智能合约。同时,由于链上存储了 SNARK 证明和交易状态增量,即便是验证者不工作,用户也可以通过链上数据恢复交易,取回锁定的代币。这可以保证代币的安全性,用户依然掌控了私钥,这方面它跟目前 Layer 1 的 DEX 没有什么区别。在保证安全性的前提下,它可以做到的极大地降低交易费用、加快交易速度,实现好几个数量级别的体验提升。

SNARK 验证的 gas 消耗远低于验证大量交易的 Gas 消耗,将完整状态存储在链下的成本也远低于存储在链上。从理论上,Zk-Rollup 可以通过 layer 2 方式实现以太坊的可扩展性,与此同时极大降低交易费用。

目前 ZeroSwap 基于 zkSync 的 ZK-Rollup 进行 layer 2 技术实现,它适合于构建安全的去中心化的兑换协议。它支持基本的代币兑换,包括存入代币、转账和兑换、提取代币。存入代币是指将代币从 Layer 1 转移到 zkSync 的 Layer 2 上;转账和兑换是指在 Layer 2 上进行代币转移和代币的交易,其好处是基本上无须手续费;最后是代币提取,将 Layer 2 上的代币转回至 Layer 1 账户。

ZK-Rollup 的安全性

ZeroSwap 基于 Zk-Rollup 的技术构建了去中心化的 DEX 协议。从表面上看,ZeroSwap 是类似于 Uniswap 的 AMM 模式的 DEX,但从底层技术实现和用户体验看,它们之间又有一定的区别。

它跟当前 Uniswap 的最大区别在于可以极大降低交易费用,极大提高交易速度,可以实现接近于 CEX 的兑换体验,同时还能保证 Layer 1 级别的安全性。考虑到其他的 Layer 2 方案,例如 Optimistic rollups 和 Validium 技术,虽然它们也能极大提高交易速度以及降低交易费,但它们在安全性上做了较大的平衡。

ZeroSwap:基于 ZK-Rollup 的 DEX(六大 layer2 技术的综合比较,Source:Alex Gluchowski)

鉴于 ZK-Rollup 在安全性上的重视,基于 Zk-Rollup 的 DEX 是未来的发展趋势。从 ZeroSwap 的计划看,它预期是在 10 月底上线,鉴于 Uniswap 的 Layer 2 还没有推出,ZeroSwap 有可能成为第一个推出基于 ZK-Rollup 的 AMM 模式的 DEX。

ZeroSwap 的整体框架

从大框架来说,ZeroSwap 系统包括了链上智能合约、链下 ZeroSwap 服务端、零知识证明系统以及前端用户界面。具体如下图:

ZeroSwap:基于 ZK-Rollup 的 DEX(ZeroSwap 的整体框架,Source:ZeroSwap 白皮书)

链上智能合约是部署在以太坊上的一组智能合约。用户的代币会存入其中,它还会记录和验证 Layer 2 状态的更新和对应的证明,它是连接链上和链下的桥梁。ZeroSwap 的 Layer 2 服务端处理链下的交易,一方面它通过接口跟用户发生交互,一方面它监听以太坊链上的交易。

交易请求会放入 ZeroSwap 的内存池,区块提议者对交易进行 Rollup,生成新区块,状态 Keeper 则负责更新 Layer 2 中的代币状态,并将其发送给 Committer。Committer 跟 Prove server 通信,获得对应交易的证明。这些状态和所对应的 SNARK 证明会发送到链上的 ZeroSwap 智能合约。

ZeroSwap 的零知识证明系统两个特点。一是具有分布式架构,其 Prove server 支持多个 Prover,多个 Prover 可以查询 Prove server 的证明任务,在生成证明后返回给 Prove server。二是采用了 PLONK 的零知识证明算法,它可以极大降低零知识证明的使用门槛。

PLONK 的全局信任设置只需要生成一次,电路规模在一定范围内可复用。ZeroSwap 的交易过程会反映到其状态树的变化上。ZeroSwap 的状态树是高度为 34 的默克尔树,用于记录当前系统中所有账户的余额状态。

根节点 Root 的子节点为系统中所有账户节点。账户节点包括普通账户节点和 Pair 账户节点。普通账户节点用于记录账户内所有代币的状态,可以有多个叶子节点,每个叶子节点代表一个类型的代币以及其数量。Pair 账户节点用于记录 ZeroSwap 中某个交易对资金池的状态。它只包含两个叶子节点,每个叶子节点代表该资金池中其中一个代币的余额和类型。

ZeroSwap:基于 ZK-Rollup 的 DEX(ZeroSwap 上的状态树,Source:ZeroSwap 白皮书)

总结来说,ZeroSwap 在技术有自己的特色,例如它采用了 Plonk 证明系统,其 ZK 证明电路可以支持不同大小,其初始可信设置只需一次,且在已有设置上可升级;在 Layer 2 层面实现了 Uniswap 的兑换逻辑,有可能成为首个实现基于 ZK-Rollup 的 AMM 模式的 DEX,如果顺利实现,可以极大降低用户的费用,加快交易速度。

ZeroSwap 的用户操作的背后

跟目前 Layer 1 上的 DEX 相比,基于 Layer 2 的 ZeroSwap 上有哪些操作?这些操作的背后跟 Layer 1 上的 DEX 又有什么不一样?从用户前端操作的角度,ZeroSwap 比 Uniswap 多了存入和提取代币的操作,其他操作基本一致。

从交易者的角度,在 ZeroSwap 上完成交易,需要哪些操作?这些操作的背后是什么?

相对于 Layer 1 上的 DEX 交易来说,Layer 2 上的 DEX 交易需要将代币从 Layer 1 账户上存入到 Layer 2 的账户,之后才能进行代币的兑换或转账。这里会涉及到代币的存入、转账、兑换以及提取操作。

首先是向 Layer 2 账户存入代币。用户将以太坊链上的代币存入 ZeroSwap 的合约,一旦 ZeroSwap 监听到用户在链上将代币转入 ZeroSwap 的合约之后,它会根据交易的详情更新状态树。ZeroSwap 会根据交易找到相应的账户,并根据存入金额更新账户中该代币的余额。如果账户还没有相应代币的叶子节点,首先会创建该代币的叶子节点,然后在更新状态。叶子节点的状态更新会导致根节点哈希的改变。根节点哈希会与存入交易的 SNARK 证明一起发送到链上的 ZeroSwap 合约中。

其次是在 Layer 2 上进行转账和交易。在 ZeroSwap 上进行转账就是把一种代币从一个账户发送到其他账户的过程。转账也由用户在 Layer-2 上发起,ZeroSwap Server 收到转账请求后找到相应的收发账户,更新这两个账户下的代币余额状态。更新后的状态树的根节点哈希和转账相对应的 SNARK 证明一起发送到 ZeroSwap 的智能合约上。

不过,它并不是链上的代币转移,因为代币还在 ZeroSwap 合约中。用户在 Layer 2 上进行交易,它本质上是用自己的代币与 Layer 2 中代币对资金池中的代币进行兑换。用户将其在 ZeroSwap 账户下的某个代币发送到相应的代币对账户,ZeroSwap 则根据 AMM 算法计算出用户可以获得的相应代币的数量,并发送给用户账户。

与此同时,ZeroSwap 将更新后的状态树根节点哈希以及兑换操作所对应的 SNARK 证明发送到 ZeroSwap 合约上。在代币兑换后,跟转账操作一样,链上的代币状态不会发生改变,因为代币还在 ZeroSwap 合约中。

ZeroSwap:基于 ZK-Rollup 的 DEX(ZeroSwap 上兑换操作流程,Source:ZeroSwap 白皮书)

最后跟 Layer 1 上的 DEX 不同,Layer 2 上的 DEX 代币要回到 Layer 1,用户还需要将代币从 Layer 2 账户提取到 Layer 1。当用户从 ZeroSwap 中提取代币时,首先用户在 Layer 2 上发起,之后 ZeroSwap 服务器会收到用户的提币请求,之后更新该用户账户下对应的代币状态,并将更新后的状态树根节点哈希以及提取操作的 SNARK 证明发送到链上的 ZeroSwap 合约。合约进行验证,然后将合约中锁定的相应代币发送到用户在链上的账户。

这一点类似于传统 CEX 的提币操作,不过不同的是,用户可以自由掌控 ZeroSwap DEX 的提币,而 CEX 的提币则会受限于 CEX 机构。在 AMM 模式的 DEX 中,交易者要完成交易,首先要有代币对的流动性池。

那么如果从流动性提供者的角度,在 ZeroSwap 上如何提供流动性,如何移除流动性?其背后是什么原理?

流动性提供者如何添加流动性?

首先由用户在 Layer 2 上发起添加某个代币对流动性的请求,ZeroSwap 服务器收到请求后会找到对应请求人的账户和代币对账户,然后根据 AMM 算法要求将用户账户下的两种代币转入到代币对账户。系统根据当前代币池的资金量,计算出用户可以得到的 LP 代币数量,LP 代币代表了用户在流动性池中权益份额。状态更新后的状态树根节点哈希和对应的添加流动性证明一起发送到 ZeroSwap 合约中。

ZeroSwap:基于 ZK-Rollup 的 DEX(往代币池注入流动性,Source:ZeroSwap 白皮书)

流动性提供者如何移除流动性?

首先由用户在 Layer 2 上发起移除流动性的请求,ZeroSwap 服务器收到用户请求后会找到对应请求人的账户并销毁相应数量的 LP 代币。同时,该代币对账户会根据销毁 LP 的数量按比例将两种代币返回给请求人的账户。状态更新后的状态树根节点哈希和相应的移除流动性操作证明一起发送到 ZeroSwap 合约中。

最后,ZeroSwap 上还有一个提取流动性的操作,它并不是移除流动性,而是将流动性池的 LP 代币从 Layer 2 提取到 Layer 1。从操作过程看,它跟其他代币从 Layer 2 提取回 Layer 1 是一致的。不过不同点在于 LP 代币还有一个“铸造”,需要在 Layer 1 生成 LP 代币,发送到相应账户。

ZeroSwap 什么时候推出?根据 ZeroSwap 发布的计划看,2020 年 10 月 10 日可以在以太坊测试网上使用,支持 Layer 2 交易池的创建、兑换以及流动性的添加和移除;2020 年 10 月 20 日支持多个交易池的组合。2020 年 10 月 30 日正式推出,在以太坊主网上启动,支持类似于 Uniswap 的各种功能。2020 年 12 月 30 日实现 Plonk 证明系统的电路优化,以及证明性能 GPU 优化;2020 年 11 月初开启流动性挖矿。

Layer 2 与 DEX 的发展

DEX 不仅是 DeFi 的重要发展,也是整个加密领域最大的发展之一。在加密领域,CEX 是最大的价值捕获者。如今的 DEX 逐渐演变成为 CEX 的实质对手。

不过,目前的 DEX 在可扩展性、交易费用、交易速度、交易体验等方面依然存在短板,无法达到 CEX 的水平,但随着 Layer 2 解决方案的推出,尤其是 Zk-Rollup 技术的推出,DEX 会逐渐解决其短板。一旦这些技术上的短板得以解决,DEX 有机会走向大规模的人群的采用,进而在实质上真正成为 CEX 的对手。

------
风险警示:蓝狐笔记所有文章都不能作为投资建议或推荐,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。

加入蓝狐笔记的知识星球:https://t.zsxq.com/Iq3VzfM

欢迎加入蓝狐笔记群微信:donnell008