本文详细介绍了Uniswap v3如何通过提供定制的流动性在特定价格范围内实现资本效率。文中还探讨了如何使用Uniswap v3模拟其他自动化市场制造商(AMMs)的流动性曲线,并分析了这些AMMs的流动性特征。未来的工作将致力于改进这些模拟方法并提高效率。
Uniswap v3 (论文) 允许流动性提供者在选定的价格区间提供自定义数量的流动性。对于可以手动调整其风险敞口的流动性提供者来说,这解锁了巨大的资本效率提升。
但这一特性也极大地扩展了 自动化 流动性提供的设计空间。任何静态的 AMM 都可以通过在 Uniswap v3 上涉及多个位置的自定流动性提供策略来逼近。
我们可以将任何 AMM 提供的流动性可视化为“tick 空间”中的曲线。将此方法应用于现有的 AMM,如 Curve、Balancer 和对数市场评分规则(LMSR),显示了这些 AMM 如何在不同价格区间集中其流动性,揭示了与每个 AMM 相对应的独特“流动性指纹”。
后续工作将探讨如何在 Uniswap v3 中有效准确地实现这种策略。
本文假设你熟悉定义为交易函数的两个资产之间的自动化做市商(见 论文),即其储备 $X$ 和 $Y$ 之间的关系。我们只考虑双资产池。
为方便比较,假设这些公式中的常量以 $s$ 表示,其中 $s$ 是在 $x=y$ 时的 $X$ 数量。你可以大致将 $s$ 视为流动性提供者在该池中的“股份”数量。例如,Uniswap v2 使用的恒定乘积公式(忽略费用)可以用公式 $ x \cdot y = s^2$ 描述,其中 $s$ 大致对应于流动性代币的总供应。
我们用 $P$ 表示资产 $X$ 相对于资产 $Y$ 的价格。 $P$ 相当于储备曲线的负导数,$ -\frac{dy}{dx}$。 (有关将 AMM 理解为导数更多的背景信息,请参见 YieldSpace 论文)。
在 Uniswap v3 中,任何人都可以创建一个位置以提供一定数量的流动性— $L$
—在两个 ticks 之间的价格区间内。Tick 指数($t_i$ )在价格上是对数的,并指定该位置提供流动性的上下限价格。
如 Uniswap v3 白皮书 所示,这是描述单个 Uniswap v3 位置的储备关系的交易函数,当其流动性在范围内时:
$$(x + x{offset}) \cdot (y + y{offset}) = L^2$$
$$ x{offset} = \frac{L}{\sqrt{p{upper}}}$$
$$ y{offset} = L \cdot \sqrt{p{lower}}$$
如果一个策略涉及在多个位置提供流动性,那么这些以总储备量定义的定义将不再适用。
因此,找到一个 局部 流动性定义是有帮助的,这描述了流动性在其常规意义上的意义:当有人与此池进行交易时,池对价格冲击的抵抗力。
如附录 A 所示,实际上 $L$ 也可以被定义为$y$ (即 $Y$ 代币的储备)对于 $\sqrt{P}$(即 $Y$ 代币的价格的平方根)变化的变化率:
$$ L = \frac{dy}{d\sqrt{P}}$$
流动性提供者如何使用 Uniswap v3 来模拟自定义曲线?一种直观的方法是创建许多不同的位置,并在每个位置提供自定义数量的流动性:
这些“切片”越狭窄,就越能准确地模拟目标曲线。在本文中,我们将 tick 空间视为可无限细分,并想象流动性提供者被允许在任何 tick 处提供任何任意函数 $L(t_i)$ 以提供该数量的流动性。
绘制$L(t_i)$ 函数显示了这些其他 AMM 的“流动性指纹”。(为了方便定义 ticks 的函数,我们将 $t_i$ 定义为 $\ln(P)$ ,仿佛我们的 tick 大小为 $e$ 。)附录 B 显示了从给定的不变量推导出该 $L(t_i)$ 函数的步骤。
Uniswap v2 中储备的行为可以用以下方程描述:
$$ x \cdot y = s^2$$
该储备曲线的流动性指纹为一条平坦的线:
$$L = s$$
要在 Uniswap v3 中模拟此曲线,我们只需创建一个流动性为 $s$ 的单一位置,并将 tick 边界设置为 $t{min}$ 和 $t{max}$。
Curve 使用的公式在 StableSwap 白皮书 中有所描述。该论文首先以常数放大因子 $x$ 来描述其不变性,$X$ 。它们的公式可写为:
$$2 \chi s (x + y) + xy = 4 \chi s^2 + s^2$$
这条储备曲线(以 Uniswap v2 进行比较)如下所示:
事实证明,使用常数 $X$ ,使用此公式提供的流动性 正好等同于 由单个 Uniswap v3 位置提供的流动性,如果我们设定 $L = s \cdot (2\chi + 1$)$),并将上下限价格设置为
${\left(\frac{2\chi + 1}{2\chi}\right)}^2$ 和 ${\left(\frac{2\chi}{2\chi + 1}\right)}^2$ 。这意味着我们可以用 Uniswap v3 中的一个位置模拟该公式:
Curve 实际上使用的是非恒定的 $X$ ,它被定义(使用我们的术语)为 $\frac{Axy}{s^2}$ ,其中 A 是一个常数放大因子。这导致了一个更复杂的方程,更难用封闭形式的流动性函数表示。在后续工作中,我将展示如何以数值方式近似这一曲线和其他曲线。
双资产 Balancer 池中的储备可以通过此不变性描述,其中 $w_x$ 是 $X$ 资产的权重, $w_y$ 是 $Y$ 资产的权重(或 $1 - w_x$):
$$x^{w_x} \cdot y^{w_y} = s$$
在流动性空间中,这对应于指数函数:
$$L(t_i) = s \cdot (2 {w_x}^{w_y} {w_y}^{w_x}) \cdot e^{(w_x - \frac{1}{2}) t_i} $$
直观来看,当资产 $X$ 的权重较低时,池中的更多流动性被保留用于更低的资产 $X$ 价格。这是很有道理的,因为在任何给定时间,保留用于更低价格的流动性实际上是对资产 $X$ 的买单,因此它目前持有的是资产 $Y$ 。
对数市场评分规则 (LMSR) 是最早和最广泛研究的自动化做市商之一。双资产案例最为人所知的是其在二元预测市场中的应用(即 YES 和 NO 股票之间),其中两个资产的价格(以现金计算)相加等于 1。
通常,LMSR 以每个资产(YES 和 NO)与现金之间做市的规则进行描述。我们也可以更改为描述一个资产与另外一个资产之间做市的规则。如果这样做,如 这里 所解释的,储备可以用这个不变性来描述:
$$ 2^{-\frac{x}{s}} + 2^{-\frac{y}{s}} = 1$$
该公式的储备曲线如下所示:
当转换为 tick 空间时,该曲线的流动性指纹的形状为——没错——双曲正割函数:
$$ L(t_i) = \frac{s}{\ln(2)} \cdot \operatorname{sech}{\left(\frac{t_i}{2}\right)}$$
正如你所看到的,LMSR 的流动性更集中于 tick 0(价格为 1)。在预测市场中,当 YES 和 NO 股票相等时,这意味着概率为 50%。因此,LMSR 更集中于支持概率约为 50% 的流动性,而不是支持更极端的概率。
附录 B 展示了如何计算这个流动性指纹。
本文展示了如何使用 Uniswap v3 模拟多个流行的 AMM,并展示了在流动性空间中绘制曲线如何提供它们独特的 “流动性指纹” 的见解。然而,在 Uniswap v3 可以被用来模拟大多数这些 AMM 之前,有几个限制需要克服:
未来的工作将展示一些利用数值逼近解决这些问题的技术,以及一些智能合约技巧,使自定义流动性提供更加节省 gás。
我们可以证明,在 Uniswap v3 中,导数 $\frac{dy}{d\sqrt{P}}$ 等于$L$ 。
我们从交易函数开始(当该位置在范围内时):
$$ (x + x{offset})\cdot (y + y{offset}) = L^2$$
求解 $x$ (以便稍后使用):
$$ x = \frac{L^2}{y + y{offset}} - x{offset}$$
求解$y$:
$$ y = \frac{L^2}{x + x{offset}} - y{offset}$$
将 $P$ 作为 $x$ 的函数,取 $-\frac{dy}{dx}$:
$$P = \frac{L^2}{\left(x + x_{offset}\right)^2}$$
而是求解 $\sqrt{P}$:
$$ \sqrt{P} = \frac{L}{x + x_{offset}}$$
代入 $x$ 并简化:
$$\sqrt{P} = \frac{y + y_{offset}}{L}$$
求解 $Y$ :
$$ y = L * \sqrt{P} - y_{offset}$$
取导数:
$$ \frac{dy}{d\sqrt{P}} = L$$
本附录演示了如何从定义为交易函数的 AMM 公式推导出流动性曲线在 tick 空间中的形式。我们将使用 LMSR 作为示例。
如附录 A 所示,流动性可以定义为关于 $y$ 的变化率 $\sqrt{P}$。由于 $P$ 只是关于 $x$ 的 $y$ 的导数的 -1 倍,我们知道流动性可以计算为:
$$ L = \frac{dy}{d\sqrt{-\frac{dy}{dx}}}$$
我们从定义为不变的 AMM 开始:
$$ 2^{-\frac{x}{s}} + 2^{-\frac{y}{s}} = 1$$
求解 $y$ :
$$ y = -s \log_2{(1-2^{-\frac{x}{s}})}$$
取导数并将其取反以获得价格(以资产 $X$ 相对于资产 $Y$ 的价格)作为$x$ 的函数:
$$ P_x(x) = -\frac{dy}{dx} = \frac{1}{2^{\frac{x}{s}}-1}$$
接下来,我们需要找到该价格的公式,但要作为$y$ 的函数而不是 $x$ 。由于该曲线(像本文描述的其他曲线一样)在$x$ 和 $y$ 之间对称,我们可以简单地用 $y$ 替换 $x$ 并取倒数来得到以 $y$ 为函数的价格:
$$ P_y(y) = 2^{\frac{y}{s}} - 1$$
接下来,我们对其进行倒换以找到 $y$ 作为 $P$ 的函数,然后将其重写为 $\sqrt{P}$的函数。
$$ y_{\sqrt{P}}(\sqrt{P}) = s \log_2{(\sqrt{P}^2+1)}$$
然后我们对 $\sqrt{P}$ 取导数:
$$ L(\sqrt{P}) = \frac{dy}{d\sqrt{P}} = \frac{2s}{\ln(2)} \cdot \frac{1}{\sqrt{P}+\frac{1}{\sqrt{P}}}$$
最后,我们将其转换为 tick 空间,通过将其重写为 tick 指数 $ t_i$ ($ln(P)$):
$$ L(t_i) = \frac{1}{\ln(2)} \cdot \frac{2}{e^{\frac{t_i}{2}}+e^{-\frac{t_i}{2}}} = \frac{s}{\ln(2)} \cdot \operatorname{sech}{\left(\frac{t_i}{2}\right)}$$
- 原文链接: paradigm.xyz/2021/06/uni...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!