05.Uniswap V2 无常损失

Uniswap V2 无常损失深度解析

核心摘要 (Key Takeaways)

  • 无常损失 (Impermanent Loss) 是指在去中心化交易所(DEX)中提供流动性(LP)的资产价值,与仅仅持有这些资产(HODL)相比所产生的价值差异。
  • 其核心特征可以总结为一句口诀:“涨价少赚钱,降价多亏钱”。无论市场朝哪个方向波动,只要价格发生变化,LP的资产价值增长总会慢于或亏损总会多于单纯持有者。
  • 手续费的核心作用之一是弥补无常损失。DEX 通过向 LP 支付交易手续费,不仅是为了激励用户提供流动性,更是为了补偿他们在价格波动中可能遭受的无常损失。
  • 无常损失的大小可以通过一个数学公式量化,它只与资产的相对价格变化率有关,而与流动性池的大小或具体的资产价格无关。
  • 在 Uniswap V2 中,价格波动越大,无常损失就越严重。而在 Uniswap V3 中,由于流动性被集中在特定价格区间,无常损失的问题会更加显著

1. 什么是无常损失 (Impermanent Loss)?

1.1 核心定义

无常损失 (Impermanent Loss, 简称 IL) 是指当您作为流动性提供者 (LP) 将资金存入一个流动性池后,由于池中代币的相对价格发生变化,导致您撤出资金时的总价值低于您从一开始就选择单纯持有 (HODL) 这些代币的价值。

  • “无常”的含义:这种损失是“浮亏”。如果池内代币的相对价格能恢复到您存入时的初始价格,那么这个损失就会消失(不考虑已赚取的手续费)。
  • “损失”的相对性:它是一种机会成本的损失。即使您的 LP 头寸总价值在上涨,但因为存在无常损失,您赚取的收益会少于单纯持有资产所能获得的收益。

1.2 产生原因与手续费的角色

无常损失的根本原因在于自动做市商 (AMM) 的核心机制,即 恒定乘积公式 X×Y=KX \times Y = K

  1. 机制:当池中一种资产(如 ETH)价格上涨时,套利者会用另一种资产(如 DAI)来购买池中相对“便宜”的 ETH,直到池中价格与外部市场价持平。这个过程导致 LP 手中价格上涨的资产数量减少,而价格稳定的资产数量增多。
  2. 手续费的角色
    • 激励流动性:吸引用户将闲置资产放入池中,增加交易深度,减小用户的滑点
    • 弥补无常损失:这是手续费更深层次的功能。LP 承担了价格波动的风险,交易手续费就是对这种风险的补偿。理想情况下,赚取的手续费应该能够覆盖甚至超过无常损失。

2. 案例分析:无常损失的直观理解

2.1 场景设定

  • 交易对: DAI / ETH
  • 初始流动性: 一位 LP 提供了 100 DAI1 ETH
  • 初始状态 (T0):
    • 池中资产: 100 DAI, 1 ETH
    • 恒定乘积 K: 100×1=100100 \times 1 = 100
    • 初始 ETH 价格: PETH=100 DAI1 ETH=100 DAIP_{ETH} = \frac{100 \text{ DAI}}{1 \text{ ETH}} = 100 \text{ DAI}
    • LP 初始资产总价值: 100 DAI + 1 ETH = 100 DAI + 100 DAI = 200 DAI

2.2 案例一:资产价格上涨

假设市场交易导致 ETH 价格上涨。

  • 价格变化后状态 (T1):
    • 池中资产变为: 120 DAI0.83 ETH (恒定乘积 120×0.83100120 \times 0.83 \approx 100)
    • 当前 ETH 价格: PETH=120 DAI0.83 ETH144.58 DAIP_{ETH} = \frac{120 \text{ DAI}}{0.83 \text{ ETH}} \approx 144.58 \text{ DAI}
  • 价值对比:
    • 作为 LP 的价值 (VLPV_{LP}):
      • 120DAI+(0.83ETH×144.58 DAI/ETH)120+120=240 DAI120 DAI + (0.83 ETH \times 144.58 \text{ DAI/ETH}) \approx 120 + 120 = \textbf{240 DAI}
      • LP 的资产从 200 DAI 增值到 240 DAI,赚了 40 DAI
    • 如果当初选择 HODL (VHODLV_{HODL}):
      • 100DAI+(1ETH×144.58 DAI/ETH)=244.58 DAI100 DAI + (1 ETH \times 144.58 \text{ DAI/ETH}) = \textbf{244.58 DAI}
      • 单纯持有资产会从 200 DAI 增值到 244.58 DAI。
  • 无常损失计算:
    • VHODLVLP=244.58240=4.58 DAIV_{HODL} - V_{LP} = 244.58 - 240 = \textbf{4.58 DAI}
    • 结论: ETH 价格上涨,LP 虽然赚钱了,但比单纯持有资产少赚了 4.58 DAI。这就是无常损失。

2.3 案例二:资产价格下跌

假设市场交易导致 ETH 价格下跌。

  • 价格变化后状态 (T1):
    • 池中资产变为: 80 DAI1.25 ETH (恒定乘积 80×1.25=10080 \times 1.25 = 100)
    • 当前 ETH 价格: PETH=80 DAI1.25 ETH=64 DAIP_{ETH} = \frac{80 \text{ DAI}}{1.25 \text{ ETH}} = 64 \text{ DAI}
  • 价值对比:
    • 作为 LP 的价值 (VLPV_{LP}):
      • 80DAI+(1.25ETH×64 DAI/ETH)=80+80=160 DAI80 DAI + (1.25 ETH \times 64 \text{ DAI/ETH}) = 80 + 80 = \textbf{160 DAI}
      • LP 的资产从 200 DAI 贬值到 160 DAI,亏了 40 DAI
    • 如果当初选择 HODL (VHODLV_{HODL}):
      • 100DAI+(1ETH×64 DAI/ETH)=164 DAI100 DAI + (1 ETH \times 64 \text{ DAI/ETH}) = \textbf{164 DAI}
      • 单纯持有资产会从 200 DAI 贬值到 164 DAI,只亏了 36 DAI
  • 无常损失计算:
    • VHODLVLP=164160=4 DAIV_{HODL} - V_{LP} = 164 - 160 = \textbf{4 DAI}
    • 结论: ETH 价格下跌,LP 亏钱了,而且比单纯持有资产多亏了 4 DAI。这也是无常损失。

2.4 案例总结

通过以上两个案例,我们可以清晰地看到无常损失的本质:

涨价少赚钱,降价多亏钱

这是作为 LP 必须理解和接受的核心风险。


3. 无常损失的数学量化与公式推导

为了精确衡量无常损失,我们可以将其抽象为一个数学模型。

3.1 基础模型与变量定义

  • 资产:池中有两种资产,Token X (如 ETH) 和 Token Y (如 DAI)。
  • 数量:池中 Token X 的数量为 XX,Token Y 的数量为 YY
  • 价格 (PP):Token X 以 Token Y 计价的价格,P=Y/XP = Y/X
  • 流动性 (LL):一个代表池子深度的常量,定义为 L=K=XYL = \sqrt{K} = \sqrt{XY}

通过联立 P=Y/XP = Y/XL=XYL = \sqrt{XY},我们可以推导出用流动性 LL 和价格 PP 来表示资产数量的公式:

Y=LP Y = L\sqrt{P}

X=L/P X = L/\sqrt{P}

这个转换非常关键,因为它让我们能够只通过价格 PP 的变化来分析池内资产的变化。

3.2 公式推导流程

无常损失被定义为 LP 资产价值与 HODL 资产价值的比率,再减 1。我们的目标是推导出这个值与价格变化之间的关系。

第一步:定义不同时间点的价值

我们设初始时间为 T0,当前时间为 T1

  • T1 时刻,LP 的资产价值 (VLPV_{LP}) 是池中当前资产 X1X_1Y1Y_1 以当前价格 P1P_1 计算的总价值: VLP=Y1+X1P1 V_{LP} = Y_1 + X_1 \cdot P_1
  • T1 时刻,HODL 的资产价值 (VHODLV_{HODL}) 是初始资产 X0X_0Y0Y_0 以当前价格 P1P_1 计算的总价值: VHODL=Y0+X0P1 V_{HODL} = Y_0 + X_0 \cdot P_1

第二步:用流动性 LL 和价格 PP 表示价值

利用 3.1 节中的公式,我们将 XXYY 替换掉:

  • 计算 VLPV_{LP}VLP=(LP1)+(L/P1)P1=LP1+LP1=2LP1 V_{LP} = (L\sqrt{P_1}) + (L/\sqrt{P_1}) \cdot P_1 = L\sqrt{P_1} + L\sqrt{P_1} = 2L\sqrt{P_1}
  • 计算 VHODLV_{HODL}VHODL=(LP0)+(L/P0)P1 V_{HODL} = (L\sqrt{P_0}) + (L/\sqrt{P_0}) \cdot P_1

第三步:引入价格变化因子 DD

我们定义价格变化因子 D=P1/P0D = P_1 / P_0,即当前价格是初始价格的 DD 倍。因此 P1=P0DP_1 = P_0 \cdot D。现在我们将 P1P_1 替换掉:

  • 重写 VLPV_{LP}VLP=2LP0D=2LP0D V_{LP} = 2L\sqrt{P_0 \cdot D} = 2L\sqrt{P_0}\sqrt{D}
  • 重写 VHODLV_{HODL}VHODL=LP0+(L/P0)(P0D)=LP0+LP0D=LP0(1+D) V_{HODL} = L\sqrt{P_0} + (L/\sqrt{P_0}) \cdot (P_0 \cdot D) = L\sqrt{P_0} + L\sqrt{P_0} \cdot D = L\sqrt{P_0}(1+D)

第四步:计算无常损失 (IL)

无常损失的公式为:

IL=VLPVHODL1 \text{IL} = \frac{V_{LP}}{V_{HODL}} - 1

将我们推导出的表达式代入:

IL=2LP0DLP0(1+D)1 \text{IL} = \frac{2L\sqrt{P_0}\sqrt{D}}{L\sqrt{P_0}(1+D)} - 1

约去分子分母中的公因子 LP0L\sqrt{P_0},我们得到最终的公式:

IL(D)=2D1+D1 \text{IL}(D) = \frac{2\sqrt{D}}{1+D} - 1

这个结果表明,无常损失的大小只与价格变化的倍数 DD 有关,而与初始流动性 LL 或初始价格 P0P_0 无关。

3.3 最终公式

经过上述推导,我们得到 Uniswap V2 的无常损失计算公式:

IL(D)=2D1+D1 \text{IL}(D) = \frac{2\sqrt{D}}{1+D} - 1

其中 DD 是资产的相对价格变化倍数。例如:

  • 如果价格上涨 50% (变为原来的 1.5 倍),则 D=1.5D=1.5
  • 如果价格下跌 20% (变为原来的 0.8 倍),则 D=0.8D=0.8

4. 无常损失的视觉化呈现与V3展望

4.1 Uniswap V2 无常损失曲线

这一分析和图表源于 Uniswap 团队后续发布的一篇名为 《Losses to Liquidity Providers Due to Price Variation》 的补充文章,而非最初的白皮书。将上述公式绘制成图表,可以直观地看到无常损失与价格变化的关系:

https://docs.uniswap.org/contracts/v2/concepts/advanced-topics/understanding-returns

/posts/202509-uniswap05/20250902022022.png

  • 横坐标:价格变化因子 DD
  • 纵坐标:无常损失的百分比。
  • 曲线特征
    • D=1D=1 时(价格无变化),无常损失为 0。
    • DD 偏离 1 时(无论上涨还是下跌),无常损失都会出现并增加。
    • 价格下跌导致的无常损失增长速度比价格上涨更快。例如,价格腰斩(D=0.5)造成的损失大于价格翻倍(D=2.0)造成的损失。

(注:这是一个根据视频描述生成的示例图,蓝色曲线代表了无常损失的变化趋势)

4.2 Uniswap V3 展望

Uniswap V3 的无常损失问题比 V2 更严重

  • 原因:V3 引入了“集中流动性”机制,允许 LP 将资金集中在特定的价格范围内。这提高了资本效率,但也意味着当价格波动超出这个范围时,LP 的头寸会更快地被完全兑换成价值较低的资产,从而放大了无常损失
  • 曲线对比:如果将 V3 的无常损失曲线与 V2 对比,V3 的曲线会更加陡峭,意味着在相同的价格波动下,V3 的 LP 会经历更大的无常损失。