这篇文章深入探讨了去中心化交易所 Balancer 的无常损失(Impermanent Loss)概念,详细推导了其公式,提供了多种情况的证明。 涵盖了理论背景、公式推导及具体案例分析,对流动性提供者面临的机会成本进行了详细解释,适合对DeFi和流动性挖掘感兴趣的读者。
学习关于 Balancer 中无常损失公式的内容。这篇 DeFi LP 指南说明了无常损失如何影响 DeFi 中的流动性提供者。
备注:本文公式渲染有 bug,请查看原文。
去中心化交易所,特别是自动做市商(AMMs),在 DeFi 生态系统中扮演着至关重要的角色。由于其重要性,必须审视与这些产品相关的风险。为了比较主要 DEX 之间的预期无常损失,我们发现尚未有关于 Balancer 的无常损失公式的明确证明。因此,这篇博客旨在通过推导 Fernando Martinelli 的页面 中概述的公式来填补这一空白,该页面提供了良好的直觉。
快速概述,Balancer 是一个去中心化交易所,允许用户在一个无信任的环境中交易基于以太坊的代币。它使用智能合约使用户能够交易 ERC-20 代币,为任何序列的代币创建流动性池。该平台使用独特的算法根据执行的交易自动调整代币价格。
“无常损失”(IL)一词用于流动性池的上下文中。当流动性提供者(LPs)将他们的代币贡献到一个池中以促进交易时,他们可能面临一个机会成本。IL 指的是池的价值中,若 LPs 只是将代币保留在池外,其价值会更高的那部分。换句话说,IL 是一种间接持有代币的机会成本的衡量。这种成本是由于池中代币的相对价值随着时间波动,导致 LPs 投资的总价值减少。
为了简化,假设没有存款或取款,以便我们保持一个恒定值函数 KKK。注意,根据 Balancer 白皮书,输入代币相对于输出代币的现货价格(SP)或边际替代率(MRS)被证明是:
$$ SP{in→out(t)}= \frac { x{in}(t)/ω{in} } { x{out}(t)/ω_{out}}. $$
其中 x_in(t) 代表在时间 t 的输入代币的储备,ω_in 是池中相应的权重,xout(t) 是在时间 t 被购买的输出代币的储备,ωout 表示相应的权重。
重要的是强调,任何 Balancer 池中每种代币的权重严格在零和一之间,并且所有代币的权重总和为一。
为了简单起见,让我们将任何代币的价格表示为其当前美元值的每个代币,从而使我们能够将任何第 i 种代币的价格定义为时间的函数,如下所示:
$$ t↦pi(t) [\$ /Token_i]. $$
当交易者想要购买代币 i 时,他们可以直接使用可接受的货币通过交易所购买,或可以先购买代币 j ,然后使用它通过池获得代币 i 。为此,依据我们对现货价格的定义,且如 Balancer 白皮书所述,代币 i 的价格可以表达为:
$$ pi=p_jSp_j→i $$
由于之前的价格关系,以下属性对任何两个代币 i 和 j 在任何 Balancer 流动性池内都成立:
$$ p_i(t)x_i/ω_i=p_j(t)xj/ωj. $$
📝
作为一个例子,考虑一个 LP 将 BTC、ETH 和 BAL 作为流动性添加到 Balancer 池中,权重分别是 50% 、30% 和 20%。在时间 t=t0 时,BTC、ETH 和 BAL 的初始价格分别是 pBTC(t0)=50000
、pETH(t0)=3000
和 pBAL(t0)=20
,单位为 $/Token。在时间 t>t0
时,假设价格发生变化,目前 BTC、ETH 和 BAL 的价格分别为 pBTC(t)=55000
、pETH(t)=2500
和 pBAL(t)=25
。如果我们考虑以下价格比率:
$$ ΔBTC=pBTC(t)/pBTC(t0)=1.1,ΔETH=pETH(t)/pETH(t0)≈0.833andΔBAL=pBAL(t)/pBAL(t0)=1.25. $$
通过将这些输入放入 Balancer 协议联合创始人 Fernando Martinelli 在他的 Medium 页面 提供的公式,我们可以说,如果这个 LP 选择在这个假设的 Balancer 池中提供流动性,他在时间 t>t0
面临的 IL 将是:
$$ IL=ΔBTC0.5⋅ΔETH0.3⋅ΔBAL0.20.5ΔBTC+0.3ΔETH+0.2ΔBAL−1≈−1.1%. $$
因此,特别是,这个流动性提供者将承受大约 1.1% 的无常损失或机会成本,基于其初始资本。
在这个框架下,我们想要展示,如果我们考虑一个包含多个代币的流动性池,无常损失 IL 可以表示为
$$ IL=∏i∈IΔiω_i∑i∈IΔiω_i−1, $$
其中 ω_i 和 Δi 分别表示代币 i 在池中的权重和相关的未来与初始价格比率。
读者需要知道,这个证明可以通过考虑一般情况直接完成,即由多个 ERC 代币组成的流动性池。然而,由于这个公式的复杂性,从每一步所需的理由构建出安全的直观非常有利,而这正是仅由两种代币构成的流动性池情况下提供的证明的原因。
在这种设置中,考虑最简单的情况,即有两种代币 x 和 y。LP 通过提供两种代币的资产形成池储备,分别表示为在瞬时 t 的 x(t) 和 y(t)。通过定义 ϕx,ϕy∈[0,1]
作为 LP 提供的池储备的分数,池中代币 x 和 y 的总量可以表示为 x/ϕx
和 y/ϕy
。注意,实际上,LP 不需要按照池中代币的确切比例来提供代币。
让我们操作没有存款或取款的情况,因此我们可以假设 Balancer 池函数 K^
是常数,yielding
$$ K^=(x(t)ϕx)ωx(y(t)ϕy)ωy. $$
其中 ωx 和 ωy 表示在此特定池中代币 x 和 y 的权重,即价值比例。请回忆一下,因为这是一个 Balancer 加权池,正如前面所述,我们知道 0<ωx,ωy<1
并且 ωx+ωy=1
.
此外,定义 K=ϕxyωxyϕyxωyx
为与 LP 相关的池不变量,得到
$$ K=x(t)ωxy(t)ωy. $$
因为 x(t) 和 y(t) 分别表示池中的代币数量,我们自然有 x(t),y(t)>0
时对所有 t≥t0
。
如之前所提到的,条件 x(t)px(t)/ωx=y(t)py(t)/ωy
始终成立,其中分别表示代币 x 和 y 在任何 t≥t0
时的价格(以每个代币美元计算)。
该属性使我们能得到
$$ px(t)=y(t)x(t)ωxωypy(t)⟺py(t)=x(t)y(t)ωyωxpx(t). $$
从上述方程中,如果我们用表达式替换 y(t)
,将其从 K 中分离出来,得到的结果是:
$$ px(t)=K1ωyx(t)−(1+ωyωx)ωxωypy(t)⟺x(t)=(K1ωyωxωypy(t)px(t))11+ωxωy⟺x(t)=(K1ωyωxωypy(t)px(t))ωy, as ωx+ωy=1⟹ωxωy=1ωy−1⟺x(t)=K(ωxωypy(t)px(t))ωy. $$
类似的,我们可以推导出 y(t) 的表达式,结果为
$$ y(t)=K(ωyωxpx(t)py(t))ωx. $$
因此,对于 t≥t0
,LP 投资的价值(以美元计),即 V_{invest}(t)
将给出
$$ V_{invest}(t)=x(t)px(t)+y(t)py(t)=K(ωxωypy(t)px(t))ωypx(t)+K(ωyωxpx(t)py(t))ωxpy(t)=K[ωxωyωy−ωypx(t)1−ωypy(t)ωy+ωx−ωxωy1−ωypx(t)ωxpy(t)1−ωx]=Kωx−ωxωy−ωypx(t)ωxpy(t)ωy(ωx+ωy)=Kωx−ωxωy−ωypx(t)ωxpy(t)ωy. $$
如果 LP 保持其代币不变,资产数量将保持不变,我们可以推导出在 t>t0
时的价值(将表示为 V_{hold}(t)
)。请注意,我们可以通过将 LP 的初始(和恒定)储备数量替换为池的关系来代替,这样在初始瞬间,根据定义没有价格变化 - 这在以后直接比较表达式时将非常有用。由此可得:
$$ V_{hold}(t)=x(t0)px(t)+y(t0)py(t)=K(ωxωypy(t0)px(t0))ωypx(t)+K(ωyωxpx(t0)py(t0))ωxpy(t). $$
继续进行得到的表达式变为:
$$ V_{hold}(t)=K(ωx1−ωxωy−ωy)px(t)px(t0)px(t0)ωxpy(t0)ωy+K(ωy−ωxωy1−ωypy(t)py(t0))px(t0)py(t0)ωxpy(t0)ωy=Kωx−ωxωy−ωy(px(t0)ωxpy(t0)ωy(ωxΔx+ωyΔy)). $$
考虑到简化方案的以下记法:
$$ Δx(t0,t)=px(t)/px(t0), 和 Δy(t0,t)=py(t)/py(t0), $$
得到的最终结果为:
$$ V_{hold}(t)=Kωx−ωxωy−ωy(px(t0)ωxpy(t0)ωy(ωxΔx+ωyΔy)). $$
结合 V_{invest}(t)
和 V_{hold}(t)
的表达式,并考虑无常损失(IL)的定义,我们得出在到期时间 t>t0
时,LP 将承受的无常损失 IL
给出如下:
$$
\begin{align*} \mathrm{IL} &= \dfrac{V_\mathrm{invest}(t) - V_\mathrm{hold}(t)}{V_\mathrm{hold}(t)} \\ &=\dfrac{K\,\omega_\mathrm{x}^{-\omega_\mathrm{x}}\,\omega_\mathrm{y}^{-\omega_\mathrm{y}}\,p_\mathrm{x}(t)^{\omega_\mathrm{x}}\,p_\mathrm{y}(t)^{\omega_\mathrm{y}}}{K\,\omega_\mathrm{x}^{-\omega_\mathrm{x}}\,\omega_\mathrm{y}^{-\omega_\mathrm{y}}\,p_\mathrm{x}(t_0)^{\omega_\mathrm{x}}\,p_\mathrm{y}(t_0)^{\omega_\mathrm{y}}\left(\omega_\mathrm{x}\Delta_\mathrm{x} + \omega_\mathrm{y}\Delta_\mathrm{y}\right)}-1\\ &=\dfrac{p_\mathrm{x}(t)^{\omega_\mathrm{x}}\,p_\mathrm{y}(t)^{\omega_\mathrm{y}}}{p_\mathrm{x}(t_0)^{\omega_\mathrm{x}}\,p_\mathrm{y}(t_0)^{\omega_\mathrm{y}}\left(\omega_\mathrm{x}\Delta_\mathrm{x} + \omega_\mathrm{y}\Delta_\mathrm{y}\right)}-1\\ &=\dfrac{\Delta_\mathrm{x}(t_0,t)^{\omega_\mathrm{x}} \Delta_\mathrm{y}(t_0,t)^{\omega_\mathrm{y}}}{\omega_\mathrm{x} \Delta_\mathrm{x}(t_0,t) + \omega_\mathrm{y}\Delta_\mathrm{y}(t_0,t)} - 1 \, . \ end{align*}
$$
现在我们通过证明结果在最简单的情况下成立,即一个由两个 ERC 代币组成的流动性池,来建立我们的直觉,让我们证明当考虑一个由 ≥2 代币组成的池时这个结果依然成立。
在多代币 Balancer 加权池中,当前代币 i 的储备记作 x_i(t),对于任意 i∈I,其中 I 是池中代币的索引集。
例如,可以有: I={BTC,ETH,BAL}。
请注意,即使对于一个有多个代币的流动性池,我们仍然可以断言我们迄今为止所使用的基本前提依然成立,即对于每个 i,j∈I, $$ x_i(t)ω_ipi(t)=xj(t)ωjp_j(t)⟺xj(t)=x_i(t)ωjω_ipi(t)pj(t).\begin{equation} \frac{x_\mathrm{i}(t)}{\omega_\mathrm{i}}\, p_\mathrm{i}(t)= \frac{x_\mathrm{j}(t)}{\omega_j}\, p_\mathrm{j}(t) \iff x_\mathrm{j}(t) = x_\mathrm{i}(t) \frac{\omega_\mathrm{j}}{\omega_\mathrm{i}}\frac{p_\mathrm{i}(t)}{p\\mathrm{j}(t)}. \end{equation} $$
类似于 2 代币的情况,我们可以从与 LP 背后代币数量相关的恒等式中单独抽出 x_i(t),得出 $$ x_i(t)=K1ω_i∏j∈I∖{i}xj(t)−ωj/ωi.\begin{equation}x_\mathrm{i}(t) = K^{\frac{1}{\omega_\mathrm{i}}} \displaystyle \prod_{\mathrm{j} \in I \setminus \{\mathrm{i}\}} x_\mathrm{j}(t)^{-\omega_\mathrm{j}/\omega\\mathrm{i}}. \end{equation} $$
重要的是强调这些权重加在一起等于 1,这导致
∑s∈I∖{i}ωs=1−ωifor eachi∈I.\begin{equation*} \sum_{\mathrm{s} \in I \setminus \{\mathrm{i}\}} \omega_\mathrm{s} = 1-\omega\\mathrm{i} \quad \text{for each}\quad \mathrm{i} \in I.\end{equation*}s∈I∖{i}∑ωs=1−ω_i对于每个i∈I.
通过将代币 j 的储备在方程 (2) 中替换为其对应的表达,得到
x_i(t)=K1ω_i∏j∈I∖{i}(x_i(t)ωjω_ipi(t)p_j(t))−ωj/ω_i⟺x_i(t)=K1ω_i(x_i(t)pi(t)ω_i)− ∑s∈I∖{i}ωs/ω_i∏j∈I∖{i}p_j(t)ωj/ω_iωj−ωj/ω_i⟺x_i(t)1+ ∑s∈I∖{i}ωs/ω_i=K1ω_i(pi(t)ω_i)1−1ω_i∏j∈I∖{i}p_j(t)ωj/ω_iωj−ωj/ω_i⟺x_i(t)1ω_i=K1ω_ipi(t)1−1ω_iω_i−1+1ω_i∏j∈I∖{i}p_j(t)ωj/ω_iωj−ωj/ω_i⟺x_i(t)=Kω_ipi(t)∏j∈Ipj(t)ωjωj−ωj,fort≥t0.\begin{align*} & x_\mathrm{i}(t) = K^{\frac{1}{\omega_\mathrm{i}}}\displaystyle \prod_{\mathrm{j} \in I \setminus \{\mathrm{i}\}} \left(x_\mathrm{i}(t)\frac{\omega_\mathrm{j}}{\omega_\mathrm{i}}\frac{p_\mathrm{i}(t)}{p_\mathrm{j}(t)} \right)^{-\omega_\mathrm{j}/\omega_\mathrm{i}} \\ \iff& x_\mathrm{i}(t) = K^{\frac{1}{\omega_\mathrm{i}}}\left( \frac{x_\mathrm{i}(t)\, p_\mathrm{i}(t)}{\omega_\mathrm{i}}\right)^{ -\!\!\!\sum\limits_{\mathrm{s} \in I\setminus \{ \mathrm{i}\}} \omega_s/\omega_\mathrm{i}} \displaystyle \prod_{\mathrm{j} \in I\setminus \{\mathrm{i}\}}p_\mathrm{j}(t)^{\omega_\mathrm{j}/\omega_\mathrm{i}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}/\omega_\mathrm{i}} \\ \iff& x_\mathrm{i}(t)^{1+ \!\!\!\sum\limits_{\mathrm{s} \in I\setminus \{ \mathrm{i}\}} \omega_\mathrm{s}/\omega_\mathrm{i}} = K^{\frac{1}{\omega_\mathrm{i}}} \left( \frac{p_\mathrm{i}(t)}{\omega_\mathrm{i}}\right)^{1- \frac{1}{\omega_\mathrm{i}}} \displaystyle \prod_{\mathrm{j} \in I\setminus \{\mathrm{i}\}}p_\mathrm{j}(t)^{\omega_\mathrm{j}/\omega_\mathrm{i}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}/\omega_\mathrm{i}} \\ \iff& x_\mathrm{i}(t)^{\frac{1}{\omega_\mathrm{i}}} = K^{\frac{1}{\omega_\mathrm{i}}} p_\mathrm{i}(t)^{1-\frac{1}{\omega_\mathrm{i}}}\omega_\mathrm{i}^{-1+\frac{1}{\omega_\mathrm{i}}} \displaystyle \prod_{\mathrm{j} \in I\setminus \{\mathrm{i}\}}p_\mathrm{j}(t)^{\omega_\mathrm{j}/\omega_\mathrm{i}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}/\omega_\mathrm{i}} \\ \iff& x_\mathrm{i}(t) = K \, \frac{\omega_\mathrm{i}}{p_\mathrm{i}(t)} \displaystyle \prod_{\mathrm{j} \in I}p_\mathrm{j}(t)^{\omega_\mathrm{j}}\, \omega_\mathrm{j}^{-\omega\\mathrm{j}},\quad \text{for} \quad t\geq t_0. \end{align*}⟺⟺⟺⟺x_i(t)=Kω_i1j∈I∖{i}∏(x_i(t)ω_iωjp_j(t)pi(t))−ωj/ω_ix_i(t)=Kω_i1(ω_ix_i(t)pi(t))−s∈I∖{i}∑ωs/ω_ij∈I∖{i}∏p_j(t)ωj/ω_iωj−ωj/ω_ix_i(t)1+s∈I∖{i}∑ωs/ω_i=Kω_i1(ω_ipi(t))1−ω_i1j∈I∖{i}∏p_j(t)ωj/ω_iωj−ωj/ω_ix_i(t)ω_i1=Kω_i1pi(t)1−ω_i1ω_i−1+ω_i1j∈I∖{i}∏p_j(t)ωj/ω_iωj−ωj/ω_ix_i(t)=Kpi(t)ω_ij∈I∏p_j(t)ωjωj−ωj,fort≥t0.
因此,流动性池在时间 t>t0 的美元价值比例是
V_{invest}(t)=∑i∈Ipi(t)x_i(t)=K∑i∈I(pi(t)ω_ipi(t)∏j∈Ip_j(t)ωjωj−ωj)=K(∑i∈Iω_i)∏j∈Ip_j(t)ωjωj−ωj=K∏j∈Ipj(t)ωjωj−ωj.\begin{align*} V_\mathrm{invest}(t) &= \sum_{\mathrm{i} \in I} p_\mathrm{i}(t) x_\mathrm{i}(t) \\ &=K\sum_{\mathrm{i} \in I}\left( p_\mathrm{i}(t)\frac{\omega_\mathrm{i}}{p_\mathrm{i}(t)} \displaystyle \prod_{\mathrm{j} \in I}p_\mathrm{j}(t)^{\omega_\mathrm{j}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}}\right) \\ &=K\left( \sum_{\mathrm{i} \in I}\omega_\mathrm{i}\right) \displaystyle \prod_{\mathrm{j} \in I} p_\mathrm{j}(t)^{\omega_\mathrm{j}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}} \\ &=K\prod_{\mathrm{j} \in I} p_\mathrm{j}(t)^{\omega_\mathrm{j}} \omega_\mathrm{j}^{-\omega_\mathrm{j}} \, . \end{align*}V{invest}(t)=i∈I∑pi(t)x_i(t)=Ki∈I∑pi(t)pi(t)ω_ij∈I∏p_j(t)ωjωj−ωj=K(i∈I∑ω_i)j∈I∏p_j(t)ωjωj−ωj=Kj∈I∏p_j(t)ωjωj−ωj.
再次说明,如果流动性提供者将其代币保留而不是将其提供给这个池,那么每个代币的数量从时间 t=t0 开始将保持不变,即 x_i(t)=x_i(t0),对于 t≥t0。因此,美元的持有价值为
V_{hold}(t)=∑i∈Ipi(t)x_i(t0)=K∑i∈I(pi(t)ω_ipi(t0)∏j∈Ip_j(t0)ωjωj−ωj)=K∑i∈I(ω_ipi(t)pi(t0))∏j∈Iωj−ωjpj(t0)ωj.\begin{align*} V_{\mathrm{hold}}(t) &= \sum_{\mathrm{i} \in I} p_\mathrm{i}(t) \,x_\mathrm{i}(t_0) \\ &= K\sum_{\mathrm{i} \in I} \left(p_\mathrm{i}(t) \frac{\omega_\mathrm{i}}{p_\mathrm{i}(t_0)} \displaystyle \prod_{\mathrm{j} \in I} p_\mathrm{j}(t_0)^{\omega_\mathrm{j}}\, \omega_\mathrm{j}^{-\omega_\mathrm{j}} \right) \\ &=K\sum_{\mathrm{i} \in I} \left( \omega_\mathrm{i} \frac{p_\mathrm{i}(t)}{p_\mathrm{i}(t_0)} \right)\displaystyle \prod_{\mathrm{j} \in I}\omega_\mathrm{j}^{-\omega_\mathrm{j}}p_\mathrm{j}(t_0)^{\omega_\mathrm{j}} \, . \end{align*}V{hold}(t)=i∈I∑pi(t)x_i(t0)=Ki∈I∑pi(t)pi(t0)ω_ij∈I∏p_j(t0)ωjωj−ωj=Ki∈I∑(ω_ipi(t0)pi(t))j∈I∏ωj−ωjp_j(t0)ωj.
牢记暂时损失的定义,我们可以得出结论,流动性提供者会在时间 t≥t0 时面临暂时损失,其计算如下:
IL(t)=V{invest}(t)−V{hold}(t)V_{hold}(t)=K∏j∈Ip_j(t)ωjωj−ωjK∑i∈I(ω_ipi(t)pi(t0))∏j∈Iωj−ωjp_j(t0)ωj−1=∏j∈I(p_j(t)p_j(t0))ωj∑i∈Iω_ipi(t)pi(t0)−1=∏j∈IΔj(t0,t)ωj∑i∈IωiΔi(t0,t)−1,\begin{align*} \mathrm{IL}(t) &= \dfrac{V_\mathrm{invest}(t) - V_\mathrm{hold}(t)}{V_\mathrm{hold}(t)} \\ &=\dfrac{K\displaystyle\prod_{\mathrm{j} \in I} p_\mathrm{j}(t)^{\omega_\mathrm{j}} \omega_\mathrm{j}^{-\omega_\mathrm{j}}}{K\displaystyle\sum_{\mathrm{i} \in I} \left( \omega_\mathrm{i} \frac{p_\mathrm{i}(t)}{p_\mathrm{i}(t_0)} \right)\displaystyle \prod_{\mathrm{j} \in I}\omega_\mathrm{j}^{-\omega_\mathrm{j}}p_\mathrm{j}(t_0)^{\omega_\mathrm{j}} } - 1 \\ &=\dfrac{\displaystyle \prod_{\mathrm{j} \in I} \left( \frac{p_\mathrm{j}(t)}{p_\mathrm{j}(t_0)}\right)^{\omega_\mathrm{j}}}{\displaystyle\sum_{\mathrm{i} \in I}\omega_\mathrm{i}\frac{p_\mathrm{i}(t)}{p_\mathrm{i}(t_0)}} - 1 \\ &=\dfrac{\displaystyle \prod_{\mathrm{j} \in I}\Delta_\mathrm{j}(t_0,t)^{\omega_\mathrm{j}}}{\displaystyle\sum_{\mathrm{i} \in I}\omega_\mathrm{i}\Delta_\mathrm{i}(t_0,t)} - 1 \, , \end{align*}IL(t)=V{hold}(t)V{invest}(t)−V{hold}(t)=Ki∈I∑(ω_ipi(t0)pi(t))j∈I∏ωj−ωjp_j(t0)ωjKj∈I∏p_j(t)ωjωj−ωj−1=i∈I∑ω_ipi(t0)pi(t)j∈I∏(p_j(t0)p_j(t))ωj−1=i∈I∑ω_iΔi(t0,t)j∈I∏Δj(t0,t)ωj−1,
我们考虑 Δi(t0,t)=pi(t)/pi(t0)对于每个 i∈I。 $$
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!