交易#
如果说借贷是历史悠久的金融活动,那么交易也同样如此。现代社会早已摆脱物 - 物交换的交易方式。现今的绝大多数交易都是以法定货币的形式完成的,即商品 - 信用(即货币)的交换方式。这意味着交易的一侧使用的是以数字方式表示的 “信用”,至于它的表现形式是电子、纸币还是硬币都是无关紧要的。当交易的两侧都是以电子形式表示时,借助于互联网,交易可以瞬间完成,典型的例子就是以电子支付的方式购买游戏道具。
加密货币本身就是运行在互联网上的以电子形式表示的资产,显然具有极强的交易属性。那么去中心化的交易功能显然就是一个极其重要的基础设施。
早期的 DEX 产品在设计上和 CEX 并没有太大的不同,例如 IDEX,它实现了链上的订单簿功能,用户可以通过发送以太坊交易的方式挂单买卖代币。
真正属于区块链特有的交易方式出现在 Uniswap 上。交易不再以买卖挂单的方式进行,而是以固定算法的方式确定交易价格。以下通过几个典型的 DEX 协议和一个交易聚合协议来勾勒当前 DEX 的主要功能。
Uniswap#
2016 年 10 月,Buterin 在 reddit 上发布了一篇帖子,讨论了一种在预测市场上实现 “链上自动做市商” 的方式。这篇帖子的目标是要讨论链上交易的一个问题:缺乏深度。除了一些主流的代币在中心化交易所上有较好的交易深度,在去中心化交易所上,例如 Maker、Idex,交易对缺乏深度,买卖差价通常超过 10%。
帖子里提出了一种通过固定函数来计算价格的方法。首先需要建立流动性池,其中包含一定数量的 A 代币和 B 代币,数量分别是 x 和 y。x 和 y 的乘积为 k,交易是通过将其中一种代币注入池子并提取一定数量的另一个代币来完成的。交易之后,池子的两种代币的数量的乘积仍然为 k。例子如下:
- 一个 ETH 和 DAI 的流动性池,其中包含 10ETH 和 30000DAI,他们的乘积为 300000。
2. 交易者想卖出 1ETH。他向池子中发送 1ETH。
3. 池子中的两种代币数量乘积需要保持为 300000,而当前池子里有 11ETH,则池子中需要保留的 DAI 的数量为 300000/11=27272.7
4. 交易员得到的 DAI 的数量为 30000-27272.7=2727.3DAI。至此交易完成。
这就是 Uniswap 的交易方式的原型。
Uniswap 的创始人 Hayden Adams 毕业后成为了一名西门子的机械工程师,后来被解雇了。正当他陷入低谷时,他的好友推荐他尝试开发以太坊智能合约。经过一段时间的学习,他准备开始做真正的项目,目标就是上述帖子中描述的 DEX。故事的结尾是,Uniswap 成为了 DeFi 的标志性项目,在 DeFi 协议中市值排名最高。
回到机制本身。在 CEX 中,做市商需要一个机器人来进行买卖的挂单来提供流动性。IDEX 延续了这样的交易方式,但是对于一些低市值代币,通常持币者没有动力进行挂单,导致价差特别大。而通过 x*y=k 的做市方式来说,并不存在价差,它的当前价格就是目前池子中两种代币数量的比例,按上述例子就是 1ETH=3000DAI。当然,实际交易价格会低于此价格,因为充入的代币使得此代币的相对数量变多,价格降低。由于交易使得代币价格下降的变动叫做 “滑点(slippage)”,这里的滑点是 1-2727.3/3000=9.1%,也就是交易者得到的价格比当前价格低 9.1%。滑点显然和池子中代币的数量负相关,例如代币数量翻 100 倍,那么交易员的交易损失会远远低于 9.1%。
对流动性池的操作有 2 种,一种是上述提到的交易,另一种是给池子提供流动性。给池子提供流动性必须按照流动性池当前的两种代币的比例充入,例如池子中有 10ETH 和 30000DAI,那么你可以给流动性池注入 1ETH+3000DAI、5ETH+15000DAI 等等。这种用户被叫做 “流动性提供者(Liquidity Provider,以下简称 LP)”,注入后会返回数量的 LP token,作为该 LP 对这个池子的一部分的所有权。当然 LP token 也是可以自由流通的。既然给流动性池提供流动性可以降低交易者的损失,那么流动性提供者自己获得的好处是什么?
这里就得提到 “无常损失(Impermanent Loss)” 的概念,它指的是一种机会成本。这里的问题是,对于流动性提供者来说,当他提供流动性且池子内的代币的比例发生变动时,他的损失是多少?
假设一个 LP 给池子注入 1ETH+3000DAI,ETH 下跌至 750DAI,按照 k 不变的原则,此 LP 在池子中拥有 2ETH+1500DAI。假设他没有提供流动性,那么按照现在的 ETH 价格,他拥有 1*750+3000=3750DAI。现实是他提供了流动性,那么现在持有的资产是 2*750+1500=3000DAI。所谓的无偿损失就是和他没有提供流动性相比损失金额的比例,也就是 (3000-3750)/3750=-20%。如果以 ETH 计价,损失也是 - 20%。事实上,价格往任何方向偏移,LP 都是承担损失的。
所以 LP 没有动机来提供流动性。因此在设计中,每一笔交易的 0.3% 作为手续费补偿 LP,以此来抵消 LP 的无常损失,并且交易所不收取手续费。
这一类由 LP 提供流动性且以固定函数进行代币交易的机制被称作恒定函数做市商(CFMM,Constant Function Market Maker),以 Uniswap 为代表。IDEX 解决了低市值代币在还没上 CEX 的情况下就能交易的问题,但没有很好地解决流动性问题。Uniswap 给流动性问题提供了一种有效的解决方案,它使得代币持有人无须像专业的 CEX 做市商那样需要开发交易机器人,只需要一次操作即可开始赚取交易手续费。对于尚未在 CEX 交易的代币,我们看到交易活跃时会有大量资金来提供流动性,因为活跃的交易会带来大量的手续费。再结合各类项目的流动性挖矿活动,Uniswap 为各类项目提供了一种脱离 CEX 获得大量流动性的方式,使得它们不再依赖于 CEX,由此削弱了 CEX 的权力并且大大提升了区块链的实用价值。已经有不少项目在脱离 CEX 的情况下获得了成功。
这种方式的明显缺点就在于,无法实现限价单功能,只能以当前价格进行交易。对于想抄底和止盈的交易员来说,必须开发链上机器人,需要有较高的技术要求。同时稳定币兑换也会有较大的滑点,削弱了在 Uniswap 上兑换稳定币的动力。Uniswap V3 版本做出了一些改进,将类限价单、稳定币互换等功能整合到流动池中。