Norrent’s web3 footprint
Home
Archive
Categories
Norrent Yu
Article
7
Category
5
Tags
9
Home
Archive
Categories
DeFi
DEX概览(1):AMM原理
Post on: Oct 19, 2024
Last edited: Oct 21, 2024
Views
DEX
DeFi
type
status
date
slug
summary
tags
category
icon
password

引言

DEX的存续很大程度上依赖以下因素
  1. 自动做市底层原理 → 有效的资金利用率
  1. 经济激励模型 → 留住LP,足够的交易深度
本文将简单介绍一下DEX的发展和自动做市商的底层原理。
作者才疏学浅,如有纰漏请谅解。

目录

  1. Why DEX?
    1. 为什么我们需要交易所
    2. 为什么我们想把交易去中心化?
    3. DEX的发展
  1. AMM运行机制:以Uniswap V2为例
    1. 为什么价格是Y/X?
    2. 滑点的计算
    3. 滑点的数值计算
    4. 衡量流动性
    5. LP Token
    6. 无常损失
    7. 交易费用

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),价格由池子中两个代币数量的比值确定。
notion image
如上图所示,假如我新发行了一个叫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%)
为什么有滑点?因为代币价格由池中的代币数量相除决定,一笔交易不可能让池中的代币同时增加或者减少,必然有一方增加另一方减少,因此每一笔交易都会改变代币价格。试想如果没有滑点会怎样?我们看下面的图:
notion image
这是一个饮料售卖机,同时也是一个恒定和做市商。饮料的价格一直不变,机器里的总资产是一定的,因为每一笔交易机器中吐出来的饮料和塞进去的硬币都为P元。但是这个机器没有反应供给需求的变化对价格的影响,突降天灾人类没自然饮用水喝了,这个笨蛋售卖机还是卖P元。而且,总有一天会饮料会卖完。
滑点的存在很好的反映了价格随需求变化而变化的道理。在池子中某一个代币被交易殆尽时,理论上它的价格能达到无穷大,因此理论上,K不变时,流动性池的代币是消耗不完的

2.3 滑点的数值计算:

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

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$利润。
notion image
如果ETH没涨而是跌了呢?LP也是一样的亏,比如如果池子里最后剩下1.2个ETH和3333个USDC,经过计算最后的无常损失是112$
现在我们用公式演算一下:
首先我们令提取流动性时的价格为,注入流动性时的价格为;;我们要计算的是相比持有这两个币的现货(),做LP()到底赚(负数为亏损)了多少,即
这是的函数图像:
notion image
可以看出,只有在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;包含交易费时,池子中流动性为,排除池子中累积的交易费,流动性为
notion image
项目方得到的的LP Token占比(左)=流动性增量分出给项目方(右):
本系列的下一篇文章,我们将讲到Uniswap V3的改进以及其它DEX在自动做市机制上的创新。

参考资料

https://uniswap.org/whitepaper.pdf
https://mirror.xyz/0xkookoo.eth/4hE7VtS6RAGifgKtc3_mutRLKvUhMCPtedlk_zZFOKc
https://foresightnews.pro/article/detail/25296
https://www.reddit.com/r/ethereum/comments/55m04x/lets_run_onchain_decentralized_exchanges_the_way/
  • 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
DEX概览(2):AMM机制上的优化
MEV
读书笔记:创新者的窘境meme KOL合订本:@Michael_Liu93
Loading...
Catalog
0%
引言目录1.为什么需要DEX1.1 为什么我们需要交易所1.2 为什么我们想把交易去中心化?1.3 DEX的发展2. AMM运行机制:以Uniswap V2为例2.1 为什么价格是Y/X ?2.2 滑点的计算:2.3 滑点的数值计算:2.4 衡量流动性:2.5 LP Token:2.6 无常损失:2.7 交易费用:参考资料
Norrent Yu
Norrent Yu
Norrent’s web3 footprint
Article
7
Category
5
Tags
9
Latest posts
meme KOL合订本:@Michael_Liu93
meme KOL合订本:@Michael_Liu93
Nov 17, 2024
Crypto Data Analysis (1): Txs, Traces, Logs
Crypto Data Analysis (1): Txs, Traces, Logs
Oct 24, 2024
无处不在的洗米
无处不在的洗米
Oct 21, 2024
读书笔记:创新者的窘境
读书笔记:创新者的窘境
Oct 21, 2024
MEV
MEV
Oct 21, 2024
DEX概览(1):AMM原理
DEX概览(1):AMM原理
Oct 21, 2024
Catalog
0%
引言目录1.为什么需要DEX1.1 为什么我们需要交易所1.2 为什么我们想把交易去中心化?1.3 DEX的发展2. AMM运行机制:以Uniswap V2为例2.1 为什么价格是Y/X ?2.2 滑点的计算:2.3 滑点的数值计算:2.4 衡量流动性:2.5 LP Token:2.6 无常损失:2.7 交易费用:参考资料
2024-2025 Norrent Yu.

Norrent’s web3 footprint | Norrent’s web3 footprint

Powered by NotionNext 4.7.3.