# DeFi概念介绍(三)——无常损失和滑点

By [berwinYes](https://paragraph.com/@coolberwin) · 2022-08-09

---

上篇文章我们讲了AMM的原理，并在最后提到了无常损失这个概念。今天这篇文章就来详细介绍无常损失和滑点这两个概念。

无常损失
====

当你成为一个做交易流动池添加者(又称做市商、矿工)时，相当于是和所有交易者做一个对手盘，如果所有交易者的盈亏加在一起还是盈利状态，那这部分的利润就来自于每个做市商的无常损失。

同时无常损失不是永久性的，价格经历短暂下跌后又重新恢复，收益也会修正。

那么如何计算无常损失呢？

还是先列出AMM的核心公式：

    K = A * B
    

假设以BNB和BUSD为例：

*   Cbnb - 池中当前BNB 的数量 为上式中的A
    
*   Cbusd - 池中当前BUSD 的数量 为上式中的B
    
*   Pbnb - bnb当前价格
    
*   Pbusd - busd当前价格 恒定为1u 可省略
    

当K恒定时，我们可以得到任何时刻池中的BNB和BUSD数量

![](https://storage.googleapis.com/papyrus_images/c0c8468421a1d665f2f8d7f62cddc4bfbefc5ce6e636618226aa646106b64fc5.png)

#### 真实场景

假如，我们在 **1 BNB = 500 BUSD 的时候，组了一组 LP** 。我们拿出了 20 个 BNB 和 10000 个 BUSD 进行 LP 流动性提供代币兑换。此时我们得到了这几个变量：

![](https://storage.googleapis.com/papyrus_images/615b90d1999b161ca17b82a3709005d7759a587baf86aa4ef37657fe1587013e.png)

并且，我们保证此时的 K 也是后续所有情况下的常数 K，即组完 LP 代币后即时生效的常数。

#### 情况1：BNB上涨

过了 10 天，BNB的价格在外部的交易所中开始上涨。中心化交易所的BNB价格从500涨到了550美元。**当前价格为 1 BNB = 550 BUSD** 。于是其他市场参与者（称为套利者）就开始工作了。套利者注意到CEX和DEX之间的价格差异，并将其视为套利机会，俗称搬砖。

当搬砖结束后，DEX中的BNB与BUSD的价格也到达了：1 BNB = 550 BUSD

![](https://storage.googleapis.com/papyrus_images/9484ece2aa3aa476578369e03a713403f9b89cee4323c70c1df1bb19ce7f3625.png)

我们可以得到此时的LP池中BNB和BUSD数量：

![](https://storage.googleapis.com/papyrus_images/55bebfe49980b84a0422942add3a2ad552d1628376a0923094fefe923025c752.png)

这意味着：在 BNB 涨价到 550 BUSD 时，我们发现等值的 LP Token 兑换**只能换回 19.069 个 BNB 和 10488.09 个 BUSD**。如果我们来换算成 BUSD 作为单位来对比一下前后收益：

价格变化前我的总投入为：

    20BNB*500 + 10000BUSD = 20000U
    

不进行LP挖矿，当BNB 涨价到 550 BUSD时，同数量BNB、BUSD情况

    20BNB*550 + 10000BUSD = 21000U
    

进行LP挖矿，当BNB 涨价到 550 BUSD时，根据AMM推导，拿回资产的总价值

    19.069BNB*550 + 10488.09BUSD = 20976.04U 
    

根据计算，发现在BNB上涨时，组 LP Token 比持有亏损 21000−20976.04=23.96 U。损失比例为 23.96/20000 = 0.11%.

#### 情况2：BNB下跌

我们看完了BNB上涨时的情况，再来看一下BNB下跌时的情况

![](https://storage.googleapis.com/papyrus_images/4df480faed97fff4d7005c59661346d1a8c5dc4d8c6fe512204aa699d0f596be.png)

    LP挖矿价值： 21.082BNB*450 + 9486.83BUSD = 18973.73U 
    持有价值：20BNB*450 + 10000BUSD = 19000U
    

根据计算，发现在BNB上涨时，组 LP Token 比持有亏损 19000−18973.73=26.27 U。损失比例为 26.27/20000 = 0.13%.

#### 结论

**经过以上分析，无论是BNB上涨还是下跌，组LP都比持有代币出现亏损，这就是所说的无偿损失。其中0.12% 和 0.13%分别为 BNB相对BUSD涨幅10%、BNB相对BUSD跌幅10%后，无偿损失的比率值。**

在 [Uniswap: A Good Deal for Liquidity Providers?](https://pintail.medium.com/uniswap-a-good-deal-for-liquidity-providers-104c0b6816f2)这篇论文中，给出了一张代币增长率和无偿损失的关系图：

![横坐标为tokenA对比TokenB的涨幅程度，纵坐标为无偿损失比例值](https://storage.googleapis.com/papyrus_images/0dfd28d75767faba730ab4d63637b5b845da7e387616c5f1bd01f5ee34d8e479.png)

横坐标为tokenA对比TokenB的涨幅程度，纵坐标为无偿损失比例值

这里推荐大家两个 [无常损失计算工具](https://www.btcfans.com/zh-cn/tools/impermanent_loss) | [无常损失计算器2](https://observablehq.com/@andy0130tw/impermanent-loss-calculator)

![](https://storage.googleapis.com/papyrus_images/458b5d53964c1c888af19d325f2d25c5ef642be205bcd7cb61770279996bb8b4.png)

### 既然亏钱，为什么要进行流动性挖矿(组LP池)？

项目方已经想到了这个问题，也给出了解决方案，让矿工们获利

1.  **用 BNB 和 BUSD 换取 BNB-BUSD LP 代币**：相当于你为 BNB 和 BUSD 流动池增加了代币。并且你获得了 BNB ⇄ BUSD 这个交易中的对应代币份额的抽成奖励占比；
    
    1.  这里就体现了 DEX 通过换取流动性证明，从而完成了一种激励模式；
        
    2.  PancakeSwap 在文档中提到，**其 0.2% 的交易手续费当中，有 0.17% 的比例是提供给 LP 持有者的抽成奖励的**。剩下的 0.03% 是平台的利润。具体规则可以查看[官方文档](https://docs.pancakeswap.finance/products/pancakeswap-exchange/trade)。
        
2.  **BNB-BUSD 代币挖矿**：当我们拿到 BNB-BUSD LP Token 之后，我们可以继续放在 PancakeSwap 的 Farms 中进行挖矿（其年化 APR 如以下截图所示）。
    

![](https://storage.googleapis.com/papyrus_images/23bbd842a6c2dcfb4bb7388a30db2b04a2adaa6f3f8682795ba9bc0a356cf684.png)

#### LP 代币说明

其实 LP Token 也是一种代币，它也拥有自己的合约地址。比如 Pancakeswap 上的 BNB-BUSD LP 代币合约地址 `0x58F876857a02D6762E0101bb5C46A8c1ED44Dc16` 。是代币肯定就有一个方式来计算数量，这里 Pancakeswap 和 Uniswap 的计算方式一样，采用以下公式：

![](https://storage.googleapis.com/papyrus_images/ca5323aee123647808c938cc2dcb62a845456f9cb85f9b33b5892f18225b04ae.png)

所以，当我们用 20 个 BNB 和 10000 个 BUSD 兑换 LP 代币的时候，我们会获得大约 447.21 个 LP Token。

有些土矿是支持单币挖矿的，这样则可能不会出现无常损失，还可能有得赚。就拿上面的例子BNB/BUSD例子，如果你只存入10000BUSD，匹配到存20个BNB的组成LP，当BNB涨到550时，你将得到10488.09BUSD，是盈利的，亏损的部分被单BNB挖矿的人承担。下图给出了不同情况下的收益率。

![](https://storage.googleapis.com/papyrus_images/d9fab81067f96e1fc141d20285911042533ad65844b0ed175ac36f7efa4506a2.png)

![](https://storage.googleapis.com/papyrus_images/f609217709f3c89fae475fb3d0fa817a053a447af9485df0bcce6567746d6c37.png)

滑点(Slippage)
============

基于之前AMM的介绍，我们都知道DEX的交易模式并非订单簿的一次性成交，AMM的核心公式X\*Y=K，实际的交易中因扣除手续费，实际的K值并非恒定，但幅度非常小，为了方便计算滑点，我们这里暂且不计手续费的影响。

### 滑点定义

什么是滑点，滑点一般指预设成交价位与真实成交价位的偏差。恒定乘积AMM中同样存在滑点，一旦发生交易，池中资产的储备发生变化，资产实际的交易执行价就会发生变化，产生滑点。**交易额越大，滑点越大，交易者的损失就越大**。

[滑点有2种定义](https://docs.google.com/presentation/d/1BGv7POJLa16M2sO77DTR5doKjAECbpqXMYuaUax0nYQ/edit#slide=id.g123d4319d47_0_359)。本文采用第二种定义方法，反映交易者成交后的损失。

1.  （成交平均价格-初始价格）/ 初始价格 uniswap V3
    
2.  （成交后价格-初始价格）/ 初始价格 uniswap V1/V2
    
    这里使用第二种。
    

### 滑点产生推导：

为了简化推导，依旧使用BNB和BUSD对，利用BUSD购买BNB。y代表BNB在LP池中数量，x代表BUSD数量。

![](https://storage.googleapis.com/papyrus_images/112a7c128b3315916174370903415a9f0949f64f36b5a05a82616aacf51f8dd1.png)

![](https://storage.googleapis.com/papyrus_images/a6550908c3e7f51e4ac02eeecd355c1f324888e63a90ed9c0d03299f9e4781da.png)

其中 NewPriceBNB = dx/dy ,可以在图中看出真实BNB价格是此时的斜率。

![](https://storage.googleapis.com/papyrus_images/dab5caeca853101fe152c7857aafb5841863138fac244503c07347fc1f09bf5f.png)

最终带入得到

![](https://storage.googleapis.com/papyrus_images/4be03f1463e923f71505f648cb11d312ef8eb2b9a467cdee29bc7a307fbd6ad5.png)

#### 真实例子

假设当前BNB/BUSD池中有 20 个 BNB 和 10000 个 BUSD 进行 LP 流动性提供代币兑换。

此时可计算得到此时的比率为 **1 BNB = 500 BUSD 。**

此时我们想用250BUSD兑换0.5BNB,理论上可行，但是实际上却不行。

根据核心公式

    K = X*Y
    
    20*10000 = (10000+250)*(20-dy)
    => dy = 0.487
    

这就是说 此时只能用 250BUSD 换的 0.487个BNB。此时的BNB价格为

    PBNB = 250/0.487 = 513BUSD
    

    根据公式：
    slippage = dx/x = 250/10000 = 2.5%
    根据推导：
    slippage = (513-500)/500 = 0.026 = 2.5%  
    

交易量dx越大，产生的滑点就越大，偏离实际价位就越大，而池中的资金储备越多、交易深度越大，则能尽量减少滑点的溢价，使用户的交易损耗降低。

### 利用滑点估算TVL(池子深度)：

一般池子内的锁仓量（TVL）也就是池子深度代表了项目的热度及安全性，是非常重要的数字指标，深度越小，项目越危险，实际兑换过程中，根据滑点可以迅速计算出池子TVL，作为我们投资的辅助依据。

在DEX进行交易时，有一个参数为PriceImpact

![](https://storage.googleapis.com/papyrus_images/24bc9649b63ddb6c2a0823830152d214b14b21611ebd5e9a9d3eb7eeb50a8fb2.png)

![](https://storage.googleapis.com/papyrus_images/2597df5a76fbb768e97f66022092690a1c76ff28e361a643b207bb334ab25619.png)

带入公式：

    x = 3/9.32% -3 = 29.21U
    

poocoin结果验证基本一致:

![](https://storage.googleapis.com/papyrus_images/38a6aa577993cfaa6b8583bf2b89a876093fbb3e134cf7c3cdd41f6a52d490e2.png)

故TVL 锁仓29u 。

写在最后
====

希望通过这篇博客，让大家能更深入的弄清楚AMM中最重要的两个概念，希望帮助每个人对DeFi有更加深入了解。

这里是berwin的Mirror，创作不易，希望看完顺手关注我的Twitter，感激不尽。

[https://twitter.com/coolberwin\_eth](https://twitter.com/coolberwin_eth)

参考资料：

[https://www.desgard.com/2021/04/25/defi-lp-math.html](https://www.desgard.com/2021/04/25/defi-lp-math.html)

[https://zhuanlan.zhihu.com/p/375371767](https://zhuanlan.zhihu.com/p/375371767)

[https://www.jinse.com/news/blockchain/1054106.html](https://www.jinse.com/news/blockchain/1054106.html)

[https://docs.google.com/presentation/d/1BGv7POJLa16M2sO77DTR5doKjAECbpqXMYuaUax0nYQ/edit#slide=id.g123d4319d47\_0\_359](https://docs.google.com/presentation/d/1BGv7POJLa16M2sO77DTR5doKjAECbpqXMYuaUax0nYQ/edit#slide=id.g123d4319d47_0_359)

---

*Originally published on [berwinYes](https://paragraph.com/@coolberwin/defi)*
