type
status
date
slug
summary
tags
category
icon
password
引言
DEX的存续很大程度上依赖以下因素
- 自动做市底层原理 → 有效的资金利用率
- 经济激励模型 → 留住LP,足够的交易深度
本文将简单介绍一下DEX的发展和自动做市商的底层原理。
作者才疏学浅,如有纰漏请谅解。
目录
- Why DEX?
- 为什么我们需要交易所
- 为什么我们想把交易去中心化?
- DEX的发展
- AMM运行机制:以Uniswap V2为例
- 为什么价格是Y/X?
- 滑点的计算
- 滑点的数值计算
- 衡量流动性
- LP Token
- 无常损失
- 交易费用
1.为什么需要DEX
1.1 为什么我们需要交易所
首先我们需要说明什么是流动性。
流动性是资产能够以一个合理的价格顺利出售的能力。即一个资产在不影响价格情况下买入和卖出的容易程度。
在加密货币市场发展早期,矿机商和矿币持有者需要一个集中的交易平台增加BTC等矿币的流动,促进加密货币市场的发展,吸引更多人参与挖矿。后来以太坊和ERC20标准的出现大大降低了发币成本,用户能够通过购买项目发行的代币的方式对该项目进行投资,帮助项目冷启动。在各种币满天飞的背景下,流动性成为了一个很大的问题。
这时,就需要交易所充当集市,将市场上的资产聚合起来,给代币提供更好的流动性,同时方便了机构和散户的进入。
1.2 为什么我们想把交易去中心化?
2014年,比特币交易平台Mt.Gox声称自己因黑客攻击,被盗8万余枚BTC,随后宣布破产。
诸如Mt.Gox这样的中心化交易所 ”受到黑客攻击“ 或内部人员卷币跑路的情况时有发生。用户在使用中心化服务的同时需要承担该中心化机构的信用风险,而在巨大的利益面前,作恶者不计其数。因此交易者对不依赖任何实体的去中心化交易所的需求一直存在。
1.3 DEX的发展
比特币由于其自身技术上的限制很难在去中心化的平台进行交易,曾经有一些对比特币DEX的探索,但都没有获得理想的结果。
在智能合约出现后,有了一些在链上使用订单簿撮合交易的尝试,比如创建于2017年的EtherDelta,用户可以将资产充值到智能合约中,然后通过挂单告知智能合约,希望以一定数量的某代币换取多少ETH,或者用ETH换多少该代币。当有其他用户愿意与挂单用户进行交易时,智能合约会自动进行撮合,完成交易。EtherDelta采用的链上订单簿机制的缺点也很明显,首先交易的流动性不足,用户难以立即找到交易对手方;其次以太坊主网不佳的性能限制了交易撮合的效率,高延迟导致一笔订单可能同时匹配到多个用户,其中未被匹配到的用户会损失Gas费。
在2016年,Vitalik在一篇Reddit帖子上论述了通过链上自动做市商来实现DEX的构想,在附言中他第一次提到了 X*Y=k 的恒定乘积自动做市商机制。基于该设想,Uniswap V1在2018年11月面世。
2. AMM运行机制:以Uniswap V2为例
Uniswap V2采用恒定乘积自动做市商机制。每一组交易对(Pair)都可以有一个对应的资金池(Liquidity Pool)。流动性提供者(Liquidity Provider,之后简称LP)将交易对提供给资金池,换取相应数量的流动性提供凭证(LP Share),价格由池子中两个代币数量的比值确定。

如上图所示,假如我新发行了一个叫TOK的ERC20代币,我为一个新的流动性池提供了2000个USDT(Y)和100个TOK(X)的初始流动性,此时,TOK以USDT计的价格为
2000 / 100 = 20 USDT 2.1 为什么价格是Y/X ?
市场上可供交易的代币数量的比值反应了两种代币的相对价格
区块链是封闭的系统,不使用预言机无法与外部进行交互,可供交易的代币数量是我们计算价格的唯一信息
这个定价方式恰好适用于恒定乘积的AMM
2.2 滑点的计算:
现在,假定小V想用手上的100 USDT在这个流动性池中换取TOK,按照现在的价格,小V应该得到
100 / 20 = 5 TOK ,事实上是这样吗?根据
XY=K ,在小V交易之前和之后,流动性池中的K值不变,均为2000 * 100 = 200000 。小V在池子中放入100个USDT,此时,Y=2100 USDT ,为了保持K不变,X = K/Y = 95.24 TOK 池子里剩下了95.24个TOK,即吐出来了 100-95.24=4.76 个TOK给小V,这比小V预期的5个TOK少了一点,少了的这部分就成为交易的滑点(Slippage)。(在Uniswap实际交易的时候,用户可以设置交易滑点的最大值,这里的滑点指的是因滑点产生的磨损与当前成交价的比值,在本例中为 0.24/5 = 4.8%)为什么有滑点?因为代币价格由池中的代币数量相除决定,一笔交易不可能让池中的代币同时增加或者减少,必然有一方增加另一方减少,因此每一笔交易都会改变代币价格。试想如果没有滑点会怎样?我们看下面的图:

这是一个饮料售卖机,同时也是一个恒定和做市商。饮料的价格一直不变,机器里的总资产是一定的,因为每一笔交易机器中吐出来的饮料和塞进去的硬币都为P元。但是这个机器没有反应供给需求的变化对价格的影响,突降天灾人类没自然饮用水喝了,这个笨蛋售卖机还是卖P元。而且,总有一天会饮料会卖完。
滑点的存在很好的反映了价格随需求变化而变化的道理。在池子中某一个代币被交易殆尽时,理论上它的价格能达到无穷大,因此理论上,K不变时,流动性池的代币是消耗不完的
2.3 滑点的数值计算:

交易开始前状态为点B();交易结束后状态为A()
因此当和等比例放大(流动性增加)时,滑点会减小。
跳出数理思维,当流动性增加时,一笔相同的交易对代币价格产生的影响变小了是符合常识的,同样的交易在流动性极小的池子里能把代币价格砸穿。

2.4 衡量流动性:
Uniswap使用几何平均数来衡量流动性。如果使用xy来衡量流动性的话,将很难使k与xy保持接近线性的关系
2.5 LP Token:
从之前的内容中我们可以看出,为池子提供流动性是一件堪称伟大的事情,流动性越好滑点越低,大家越爱用。LP这么伟大,我们当然得好好供着,首先系统在LP提供流动性的同时会返给LP一定数量流动性提供凭证(LP Token),LP可以通过销毁这个凭证,随时把放到流动性池的钱取出来。
这里注意,LP提供的流动性是按照占流动性池的比例算的,比如系统本来有1个ETH和2000个DAI,你只能按照ETH:DAI=1:2000提供流动性,即你必须同时给X个ETH和2000X个DAI。而当你撤出流动性时,池子里的价格已经变成了2:1000,这时你把钱从池子里提出来,你获得的就是Y个ETH和500Y个DAI。
所以LP Token按照什么模式分发呢?
现在我们假设池子中已经有了个X代币,个Y代币,已经铸造了个LP Token,现在小V作为LP存入了个X和个Y进去,分发给小V的LP Token是,现在我们来计算:
这样,就保证了每一个LP持有的LP Token份额跟他贡献的流动性份额相同。
2.6 无常损失:
这里又有一个问题:LP充进去1个ETH和2000个DAI,但是因为池子里价格的变化,回来到你手里的一般都不是1个ETH和2000个DAI,考虑不去提供流动性(即一直拿住现货)的机会成本,LP是赚了还是亏了呢?
你看本小节标题,无常损失,显然是亏了啊!
我们先看实际的例子:
假如我是池子里唯一一个LP,初始注入了1个ETH和4000个USDC,系统给我个LP Token,我现在从池子里能拿回:
1 ETH+4000 USDC=8000$现在一堆交易者一顿交易之后,池子里剩下0.8个ETH和5000个USDC,此时ETH的价格是6250 USDC,我用这个LP Token换回了0.8 ETH+5000 USDC=10000$ ;另一个人也有1个ETH和4000个USDC,但他没有去做LP,此时他这1个ETH和4000个USDC的价格是1 ETH+4000 USDC=6250+4000=10250$ 。人家辛辛苦苦做LP,结果反倒比啥也没干的人比少了250$利润。
如果ETH没涨而是跌了呢?LP也是一样的亏,比如如果池子里最后剩下1.2个ETH和3333个USDC,经过计算最后的无常损失是112$
现在我们用公式演算一下:
首先我们令提取流动性时的价格为,注入流动性时的价格为;;我们要计算的是相比持有这两个币的现货(),做LP()到底赚(负数为亏损)了多少,即
这是的函数图像:

可以看出,只有在m=1(即注入和提取流动性两个时刻价格相等)的时候,做LP是没有无常损失的
LP们不是傻子,DEX项目方为了留住LP需要给他们一些奖励,这就引出了下一个话题:手续费。
2.7 交易费用:
为了奖励LP和项目方自己,Uniswap V2规定,每笔交易会收你0.3%的手续费,具体收费流程是怎样的?还是看个具体例子。
池子里有8000个USDC和2个ETH,小V现在用1000个USDC换ETH,理论上能换到0.2222个ETH,但是他要交0.3%的手续费,所以他的1000个USDC就变成了997个,最终换出来0.2216个ETH。
因为手续费的存在,我们前面计算的应该改为:
手续费收的3 USDC去哪里了呢?在交易完成之后,池子里剩下(9000 USDC,1.78ETH),这时再把这3 USDC丢进去,池子变成(9003 USDC,1.78ETH)。显然流动性()变大了一点。
流动性变大意味着每一份LP Token对应的钱变多了一点(每次交易都单边增加了0.3%),此时池子里累计的手续费都将是给LP的奖励。但是项目方也要赚钱,项目方通过分一小部分LP Token来奖励自己(这一小部分增发的LP Token部分稀释了LP Token的价值)。
假设池子里累积的交易费的倍给了项目方(Uniswap V2中),项目方得到了个LP Token,池子里原本有个LP Token;包含交易费时,池子中流动性为,排除池子中累积的交易费,流动性为

项目方得到的的LP Token占比(左)=流动性增量分出给项目方(右):
本系列的下一篇文章,我们将讲到Uniswap V3的改进以及其它DEX在自动做市机制上的创新。
参考资料
- Author:Norrent Yu
- URL:http://blog.transnature.top/post/mechanism-of-auto-market-maker
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts