在DeFi领域,DEX是最重要的组成部分。根据Duneanalytics的统计,过去7天的DEX交易量已经超过40亿美元。Uniswap当日的交易量也超过3亿美元,这些交易量都是记录在链上的真实交易量,不可做假。
在今年年初的时候Uniswap上锁定的资产量才1500万美元左右,即便是两个月前的7月25日也才8000多万美元,而仅仅两个多月后,Uniswap锁定资产量超过20亿美元,可见其发展的迅速。
两个月时间Uniswap的锁定资产量从不到1亿飙升至超过20亿美元
虽然DEX发展迅速,但盛况之下并非没有缺陷。如今的DEX交易量往往由投机交易、挖矿等因素驱动,掩盖了一些需要重视的问题。这些问题包括高费用、速度慢、低吞吐量、用户体验差等。参与过挖矿的用户都深有体会,在拥堵的高峰期,挖矿gas费用几十美元,甚至上百美元也是常有的事情。
拥堵时以太坊上的高额gas费用
由于多数AMM模式的DEX执行都是在链上完成,每个交易每个操作都需要等待区块确认,这导致交易速度过慢。对于用户来说,swap本意是兑换,但这种兑换的体验不够理想。
目前大多数的DEX都是基于以太坊,以太坊的TPS大约不到20,对于不断增长的交易需求来说,这样级别的吞吐量是明显不够的。
目前的DEX用户还是相对小众的加密用户,即便如此,也不堪重负。假设,DEX要跟CEX竞争,要对CEX形成足够的竞争压力,它还需要解决上述的基础设施滞后的问题。
为了解决这些问题,目前有两个选择,一是离开以太坊,进入其他公链进行构建,正如目前Serum在Solana上构建DEX一样;二是依然留在以太坊上,利用Layer 2的技术进行扩展,同时等待以太坊的分片。
在其他公链上构建DEX的优势是,费用、速度、吞吐量等问题都可以得到极大缓解;不足之处在于它从头开始,需要较长时间构建,因为DeFi上在以太坊上已经有足够多的乐高技术,且形成了一定程度的网络效应,同时在网络安全性上以太坊也更高。
还有第二种方案是依然基于以太坊,但充分利用Layer 2技术,以实现对DEX现有问题的解决。蓝狐笔记之前也提到过Layer 2赛道《以太坊的Layer 2赛道》,其中Zk-Rollup在安全性上有它的优势,同时也可以解决费用、吞吐量等问题,适合于DEX方面的构建。
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账户。
ZeroSwap基于Zk-Rollup的技术构建了去中心化的DEX协议。从表面上看,ZeroSwap是类似于Uniswap的AMM模式的DEX,但从底层技术实现和用户体验看,它们之间又有一定的区别。
它跟当前Uniswap的最大区别在于可以极大降低交易费用,极大提高交易速度,可以实现接近于CEX的兑换体验,同时还能保证Layer 1级别的安全性。考虑到其他的Layer 2方案,例如Optimistic rollups和Validium技术,虽然它们也能极大提高交易速度以及降低交易费,但它们在安全性上做了较大的平衡。
六大layer2技术的综合比较,Source:Alex Gluchowski
鉴于ZK-Rollup在安全性上的重视,基于Zk-Rollup的DEX是未来的发展趋势。从ZeroSwap的计划看,它预期是在10月底上线,鉴于Uniswap的Layer 2 还没有推出,ZeroSwap有可能成为第一个推出基于ZK-Rollup的AMM模式的DEX。
从大框架来说,ZeroSwap系统包括了链上智能合约、链下ZeroSwap 服务端、零知识证明系统以及前端用户界面。具体如下图:
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上的状态树,Source:ZeroSwap白皮书
总结来说,ZeroSwap在技术有自己的特色,例如它采用了Plonk证明系统,其ZK证明电路可以支持不同大小,其初始可信设置只需一次,且在已有设置上可升级;在Layer 2层面实现了Uniswap的兑换逻辑,有可能成为首个实现基于ZK-Rollup的AMM模式的DEX,如果顺利实现,可以极大降低用户的费用,加快交易速度。
跟目前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上兑换操作流程,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合约中。
往代币池注入流动性,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月初开启流动性挖矿。
DEX不仅是DeFi的重要发展,也是整个加密领域最大的发展之一。在加密领域,CEX是最大的价值捕获者。如今的DEX逐渐演变成为CEX的实质对手。
不过,目前的DEX在可扩展性、交易费用、交易速度、交易体验等方面依然存在短板,无法达到CEX的水平,但随着Layer 2解决方案的推出,尤其是Zk-Rollup技术的推出,DEX会逐渐解决其短板。一旦这些技术上的短板得以解决,DEX有机会走向大规模的人群的采用,进而在实质上真正成为CEX的对手。