去中心化交易所(DEX)介绍

27 minute read Published: 2019-11-28
介绍各种 DEX 的技术路线分类、同一种路线下各种 DEX 的区别与联系

把最近看的一些关于 DEX 的资料总结了一下,在这里不会太详述技术细节,因为短时间不可能把这么多种技术路线的 DEX 都了解清楚。所以这篇的重点在于,DEX 的技术路线分类、同一种路线下各种 DEX 的区别与联系。另外这篇里面包含许多交易上的概念,我会尽量给出一下解释的链接。

中心化交易所的问题

首先要说为什么需要 DEX?这主要就是因为当前占主流的中心化交易存在相当多的问题。主要有几下几点:

DEX 分类及优缺点

什么是去中心化交易所?这个其实并没有共识。目前来说只要它能促进资产交换,又不直接持有用户的资产,也就是在存款的去中心化,就能算是去中心化交易所。就大的技术路线而言,DEX 又有以下几种模式。

基于订单撮合的方式

这种是最为人所知的,因为中心化交易所基本上也是这种。

优点

所谓流动性,主要就是有足够的交易量,能够在不影响价格的情况下轻松入场和出场。流动性缺乏会让价格失真。在加密货币领域,比特币的流动性最好。

缺点

这在中心化交易所里面也体现地很明显。一些上了很多交易对的交易所,存在交易对 5 分钟甚至 10 分钟没有一笔交易的情况。

主要的操纵方式有:

这些操纵在传统交易所里面,是被严厉打击的,都已经被立法监管百来年了。可是在加密货币里面,这些都是常规手段。

自动做市商

做市商 在交易所里面通过算法报价给市场提供流动性,增加市场弹性。这种模式的 DEX,实质就是能自动双向报价(报的价格和购买量相关),只要接受这个报价就能成交。

优点

缺点

所以在传统的金融交易中,由于交易额巨大,所以不会使用自动做市商交易所。

Token 价格变化不大时,流动性提供商最有利可图。如果是趋势行情,就有可能会发生亏损,这对于量较小、波动较大的币种来说更加糟糕。

荷兰式拍卖

荷兰式拍卖 和大众所知的往上加价不同,它是价格从高往低拍卖,在各个价格阶段买家报购买数量,直到卖完。最终每个买家都按最低的那个报价结算。

优点

缺点

传统上用得比较多的是拍卖国债,金融交易上几乎不会这样做,因为交易员不可能一次次的等到拍卖时间结束。

对于这 3 种模式的 DEX,就产品复杂性而言,自动做市商 < 订单撮合 < 荷兰式拍卖。就滑点(slippage,订单中的价格和实际执行时的价格之差。)而言,荷兰式拍卖的滑点较小,自动做市商差点,撮合式滑点最大(它受流动性的影响很大)。

下面将介绍一个个实际的 DEX 项目。先从简单一点的自动做市商开始,然后是订单撮合。

自动做市商

Bancor

Bancor 使用 RalayToken 自动做市商算法。有一篇文章 介绍了这个原理。

RelayToken 在智能合约里面维护了 2 种代币的资金池,且开始时设定了它们之间的汇率,存入一定的两种代币,让两个资金池价值相等。当用户想以 A 代币 x 数量换取 B 代币时,他把 x 数量的 A 存入 A 资金池,根据当前汇率,B 资金池自动吐出来一定的数量的 B 代币到指定地址。这样两个资金池里面币的数量和之前不一样了,所以要重新计算它们的汇率,让两个资金池的价值仍保持一致。这个汇率的变化是可以计算和预期它,就等于购买数量和资金池的比例。

X 的量Y 的量X/Y 汇率
100010100.0
11009122.22
1222.228152.78

如果这个汇率和其它交易所存在套利空间,就可以进行套利。Bancor 使用自动套利机器人来防止 pump and dump。当然这仅限于加入 Bancor 网络中的 Token,因为套利机器人是个合约,只要存在套利空间,它就会不断地进行小额套利交易。

Uniswap

Uniswap 根据做市资金池的金额和买入卖出量,通过一个价格曲线,自动计算每一笔买卖的价格。Uniswap 的流动性和价格幅度取决于做市资金池的规模,规模越大价格浮动越小。另外任何人都能为某个交易对提供流动资金池,并且通过交易活动赚取一定的费用。

这篇文章 对其中的原理过程介绍地较清楚。

Uniswap 基于 Constant Product Market Maker 模型(基于 Vitalic 在 reddit 发布的帖子,论文地址)。乘积不变做市商算法,\(x*y=k\),x 和 y 分别代表两种币的资金池数量,给定一个委托单数量,就能自动算出汇率。

如果某个委托单是用 x 去买 y,则 y 池子里面的数目会减少,x 池子里面的数目会增多。关键是它的报价汇率不是线性的,买 y 的数目增加一倍,需要的 x 不止一倍。购买的数量占池子的比例越大,溢价就会越大,一般不会下单超过池子的 2%。所以反过来说,池子越大,处理大的订单也越容易。

x 的量y 的量乘积 K
10001010000
1111.11910000
1250810000

下单可以指定一个汇率上限,表示接受的最差汇率。如果矿工抢先操纵池子金额,进而操纵汇率让他有利可图,也不会超过设定的最差汇率。

如果 Uniswap 根据公式给的报价汇率和中心化交易所的有差额,那就说明存在套利空间。做市商不能只往交易对的某个单边池子里面冲钱,那样的话会让 Uniswap 的汇率和中心化交易所的汇率产生大的偏差,马上会被别人套利走直到套利空间消失,这会让做市商自己白白产生了亏损。所以必须往两边池子里面冲钱,冲的比例要符合自己认为的交易对的汇率。

每次有做市商往池子里面冲币之后,智能合约会重新计算每个做市商在池子里面占的资金比例,会发放一种不能交易的 Token 来表示这个比例。一旦交易对的汇率发生单边突破,那做市商是可能会产生亏损的,比如,一个 DAI/ETH 的池子共有 1000000DAI/1000ETH,某个做市商充了 10000DAI/100ETH,占有 10%。一旦 ETH 价格突破到 150DAI,那池子在这个过程中会发生充 DAI 提 ETH,变成 122400DAI/817ETH,这时占 10%,只有 12240DAI/81.7ETH,只值 $24500,比 HODL 要亏损 $500。所以即使 Uniswap 会收 0.3% 的手续费,并且全存到池子里面分给所有做市商,也很难确定做市商会不会有亏损。做市商喜欢的是汇率小范围的来回震荡的行情。

在 Uniswap 里面进行 ERC20 到 ERC20 的交易时,不需要有真正的资金池,只要它们分别和 ETH 有资金池就行了。

Uniswap 不适合委托单很大的交易员,适合那些金额较小的的交易员,不想费精力盯盘,不想每次计算下单价格的人,它只需要往池子里面冲币即可。Uniswap 同样适合机器和机器之间进行数额较小的交易,这种交易 Uniswap 的池子很满足很好的流动性。

Uniswap 和 Bancor 的算法很像,但 Uniswap 不需要上币费,所有手续费都分给做市商,gas 费用也大大降低。

Kyber

Kyber 的背后是多个做市商,它们根据其它交易所的市场价格和订单深度信息为 Kyber 的用户提供报价,报价都是有时效性的,过期作废。有一点很重要:Kyber 的做市商需要在其它交易所上通过订单撮合买卖套利。也就是说,Kyber 依然要依赖订单撮合类型的交易模式支持其流动性。对于用户,Kyber 会选择一个最优的报价汇率给用户。另外 Kyber 也会把 Uniswap 作为一个做市商来源。

另外 Kyber 一个有意思的点在于它里面的各个角色各司其职,如下图。

订单撮合模式

路印有篇博客 把订单撮合模式的 DEX 总结为 3 个阶段,值得参考。

在一开始做 DEX 时,尤其是那时候以太坊号称「世界计算机」,大家的思路就是把中心化交易系统的主要模块都被搬到了以太坊的智能合约里,包括订单本(Order Book),撮合引擎(Match Engine),清结算 子系统(Settlement Subsystem),账号子系统(Account Subsystem),以及充值提现子系统(Deposit & Withdrawal)。

以太坊上的 OasisDex 就是这种技术的代表,用户充值、挂单、吃单、结算及提现全部在链上完成,只能交易 ERC20 代币。

这种方案的缺点是交易速度大大受限,而且手续费有很贵,因为很显然的,几乎以往在中心化交易所上面的所有操作都需要改为创建一个以太坊交易去和智能合约交互。

之后为了提高 TPS,就想尽量把一些模块从智能合约里面去掉,放到链外的中心化系统中去运行,从而提高吞吐量并降低成本。从智能合约中移除的子系统包括:订单本,撮合引擎。另外账号子系统和充值提现子系统就不用了,直接用以太坊地址。留在智能合约中的就只有清结算子系统了,这个子系统的主要逻辑是验证订单和撮合的正确性,计算成交量,更新成交记录,并进行资产在链上的原子互换。

这种方案的 DEX 很难称得上是去中心化。想改进这一点,目前的一个方向是使用零知识证明,来保证链下的交易撮合是真实的,同时零知识证明如果行得通的化,那可能会是一种通用的链下扩容方案。目前有 StarkDex 在往这个方向上面做。

总之,目前大部分在运营的订单撮合模式 DEX,都基本上是链下撮合。下面介绍一个比较流行的方案。

IDEX

目前占据以太坊去中心化交易所 50%。用户充值资产到智能合约中。用户在交易所进行挂单、吃单操作都通过链下的服务器完成,交易撮合过程与中心化交易所的体验基本一致;未成交的挂单,不会造成 Gas 费用损失,节省了无效订单上链的成本。链下账本将撮合成功的结果与链上账本及时同步,最终实现交易上链。

  1. 挂单者(maker)和吃单者(taker)都往 IDEX 的智能合约里面充币

  2. IDEX 数据库实时获取智能合约里面每个用户的地址和 Token 余额

  3. 挂单者创建一个挂单(ask),并且对相关的交易数据签名,提交到 IDEX 链下的服务器

  4. IDEX 确认挂单者的账户里面是否有充足的余额,签名的数据是否正确

  5. 如果步骤 4 检查通过,这个挂单就提交更新到了委托账本(orderbook)

  6. 吃单者创建一个对手单(bid),交易价格和目标挂单一样,数目少于等于目标挂单的数目,对数据签名后提交给 IDEX 服务器

  7. IDEX 确认吃单者账户里面的余额够不够,检查签名数据是否正确

  8. 如果步骤 7 检查通过,交易就会达成,委托账本更新

  9. IDEX 更新交易达成之后两个用户的余额,会创建一个更新 ETH 链上智能合约里面余额的交易添加到任务队列,广播出去

  10. 一旦 ETH 交易被挖,就会上链

  11. 更新智能合约里面的余额数据

  12. 一旦智能合约里面的余额数据更新,用户可以随时从智能合约里面提币到自己的地址

体验优势

在链上的 DEX 会有这个问题,挂单者首先提交挂单,理论上如果这比交易数额较大,足以拉升价格,矿工可以抢先打包一笔自己的买单,先以较低的价格买到,然后转手再卖给挂单者,以达到无风险套利的目的。这个目前还无法确定是否在现实中发生过。

缺点

正因为 IDEX 和中心化交易所太像了,所以仍然面对政策监管的合规风险。同样流动性还不如目前的中心化交易所。

另外对 IDEX 的一个批评是,它可以冻结用户的钱包,一些人认为去中心化交易所不应该有这样做的能力,Charlie Lee 认为 DEX 绝对不能丢失或者冻结用户的资金。

其它小众方案

Gnosis

Gnosis 开发 DutchX 协议,是基于荷兰式拍卖 的交易模式。DutchX 保证特定时间内一定会成交,但不保证交易具体价格;订单撮合模式保证价格,但不保证一定成交或者成交时间。

FaireDex 是和 GutchX 协议交互的交易平台,目前来看价格只跟中心化交易所差 1% 到 2%。

Airswap(p2p 模式)

通过 Airswap,接收者和制造者在未指定所需汇率的情况下发布其「交易意向」。当找到令牌对匹配项时,将协商推向各方并由 p2p 协议执行。如果双方之间未达成协议,则他们可以查询「oracle 协议」以获取公平价格建议。

整个过程与两个钱包的相互转账类似,平台不会控制用户的资产,交易过程安全、透明。该模式的主要问题是灵活性较差:一对一的互换只能让双方按照约定的价格和数量成交;如果一方需要交易更多,无法靠一次交易实现,需要寻找更多合适的交易对手进行多次交易。

附录网站

https://dex.ag/,比较各 Dex 的手续费的网站。

https://dex.watch/,各大 DEX 交易量查看。

https://defiprime.com/exchanges,各大 DEX 地址和分析。

https://etherscan.io/stat/dextracker?range=30,Etherscan 排名。

参考

谈谈去中心化交易所技术和趋势

[去中心化交易所的运作机制](https://medium.com/dex-top/ 去中心化交易所的运作机制 -52ef710a4b76)

9 Best DEX That You Can Use To Trade

How IDEX works

a comparsion of denctralized exchange designs

the world of decentralised exchanges on the etherum network: an overview

什么是去中心化交易所?

Kyber vs 0x

DEX 的缺陷

0x、IDEX、AMP

一些 DEX 的交易活跃度分析