Uniswap v3 中的真实储备和虚拟储备

本文深入探讨了 Uniswap v3 中的两种储备类型:真实储备和虚拟储备。真实储备代表一个 segment 中存在的实际代币数量,而虚拟储备代表如果 segment 是无限曲线的一部分,它将拥有的代币数量。文章详细解释了这两种储备的定义、计算方法以及它们在 Uniswap v3 交易中的作用,并解释了Uniswap v3如何通过虚拟储备,使用与Uniswap v2 相同的数学公式计算交易价格。

跳转到主要内容 跳转到页脚

Uniswap v3 中的真实储备金和虚拟储备金

Uniswap v3 使用两种类型的储备金:真实储备金和虚拟储备金。

真实储备金代表一个分段中存在的代币的实际数量。

每个分段都有一对真实储备金:代币 X 的真实储备金,表示为 xr,以及代币 Y 的真实储备金,表示为 yr。其中一个代币的储备金可能为零,但不能同时为零——否则,该分段中就没有流动性。

虚拟储备金代表如果一个分段是无限曲线的一部分,它将拥有的代币数量——换句话说,如果该分段延伸到无限远,就像 Uniswap v2 一样。

在本章中,我们将首先更详细地研究真实储备金,然后再讨论虚拟储备金。

真实储备金

让我们考虑下面的图示,它显示了一个单独的分段。当前价格用红色光线表示。该分段在代币 X 中有 xr 真实储备金,在代币 Y 中有 yr 真实储备金,如图所示。

真实储备金的描述

代币 X 的真实储备金是价格的 x 坐标与上限 tick 的 x 坐标之间的距离。代币 Y 也是如此,但现在是到下限 tick 的 y 距离。

之所以这样定义,是因为我们处理的是曲线段。如果曲线是无限的,则值 xr 和 yr 将分别等于 x 和 y。

Uniswap v3 中使用的分段中的储备金与 Uniswap v2 中使用的无限曲线中的储备金之间的一个重要区别是,在分段中,代币可以完全耗尽。

想象一下,通过交换,价格移动到下图所示的位置。在这种情况下,所有代币 X 将从该分段中移除,真实储备金将仅由代币 Y 组成。

仅包含代币 Y 的 Uniswap V3 分段

另一种可能性是价格一直移动到下限 tick,如下图所示。在这种情况下,该分段的真实储备金将完全由代币 X 组成,并且该分段的代币 Y 将完全耗尽。

仅包含代币 X 的 Uniswap V3 分段

在 Uniswap v2 中,这种耗尽是不可能的,因为曲线是无限的,因此没有可以到达的“边界”。

一个真实场景中的池由多个分段组成。考虑下图所示的场景:在这种情况下,价格可能低于蓝色分段,进入紫色分段。

一个活跃和非活跃分段的真实储备金

蓝色分段不再有代币 Y 可供出售——其真实储备金仅包含代币 X——而紫色分段则有。只要当前价格保持在分段的边界内,该分段就持有两种代币,并且可以在其中进行交换。

只要价格继续低于下限 tick,蓝色分段中代币 X 的数量就保持为 xr。

可以看出,分段的真实储备金取决于当前价格。规则如下:

  1. 如果当前价格大于或等于该分段的上限 tick,则真实储备金将完全以代币 Y 存在。
  2. 如果当前价格小于或等于该分段的下限 tick,则真实储备金将完全以代币 X 存在。
  3. 如果当前价格介于下限 tick 和上限 tick 之间,则代币 X 和 Y 都将有真实储备金。

每个分段都有其真实储备金

每个分段都存在真实储备金——也就是说,每个分段都有一对值 xr 和 yr,其中一个可以为零,但不能同时为零。如果两者都为零,则没有流动性,我们可以忽略该分段。

考虑下图所示的插图,它显示了三个分段——灰色、紫色和橙色(未显示其他可能的分段)。当前价格用红色光线表示。每个分段都有其真实储备金的数量。

  • 灰色分段有 xr 真实储备金(代币 X)并且没有真实储备金(代币 Y)。
  • 紫色分段有 xr 真实储备金(代币 X)和 yr 真实储备金(代币 Y)。
  • 橙色分段有 yr 真实储备金(代币 Y)并且没有真实储备金(代币 X)。

三个分段及其真实储备金

如果当前价格不在具有流动性的分段内,则该分段必然只包含一种资产。价格的任何变化,只要不进入该分段,就不会影响该分段中的真实储备金。

当价格在分段内移动时,代币 X 和 Y 通过交换进行交换。因此,当价格在分段内时,每个分段都像 Uniswap v2 一样运作,但当价格在其外部时,它就会变为非活动状态。

但是,只有当分段实际上是无限曲线时,Unsiwap v2 的数学才有效。为了将每个分段视为无限曲线——从而像 Uniswap v2 一样运作——我们引入了虚拟储备金的概念。

虚拟储备金

虚拟储备金是如果一个分段是无限曲线的一部分而不是仅仅是一个分段,它将拥有的储备金。为了说明这一点,让我们绘制一条无限曲线,并在分段外部的部分使用虚线。

Uniswap V3 分段的虚拟储备金

虚拟储备金就像我们在 Uniswap v2 中一样——在这种情况下,它们将是池的储备金。储备金也是当前价格接触曲线的点 (x, y)。

下图显示了该分段的虚拟 (x, y) 和真实储备金 (xr, yr)。

一个分段的真实和虚拟储备金

下面的动画显示,随着曲线段的增长,该分段的真实储备金接近虚拟储备金。如果曲线延伸到无限远——就像在 Uniswap v2 中一样——虚拟和真实储备金将变为相同。

为什么我们在 Uniswap v2 中不需要虚拟和真实储备金?

在 Uniswap v2 中,由于只有一条无限价格曲线——而不是多个曲线段——真实储备金和虚拟储备金是相同的。因此,坐标 (x, y) 既表示虚拟储备金又表示真实储备金。我们不需要区分它们,只需将它们称为储备金即可。

分段中的交换以与 Uniswap v2 相同的方式发生

即使虚拟储备金不代表一个分段(或对于池)的实际代币数量,它们也很重要,因为在一个分段内,我们希望使用与 Uniswap v2 相同的数学。换句话说,我们希望每个分段的行为都好像我们在无限曲线上一样——这正是虚拟储备金所提供的。只要交易不会导致价格移出该分段,我们就可以进行这种简化。

考虑下图所示的 Uniswap v2 中的交换。在左侧,池包含 x 个代币 X 和 y 个代币 Y,因此价格为 y/x,流动性为 xy。

在交换之后(在右侧),价格变为 y′/x′;代币 X 的储备金变为 x′,代币 Y 的储备金变为 y′。因此,(x−x′) 个代币 X 离开池,(y′−y) 个代币 Y 进入池。

使用 Uniswap V2 数学建模的价格变化

现在让我们考虑相同的交换,但这次是在 Uniswap v3 中,如下图所示。我们不再有无限的曲线——只有分段,如图所示的三个分段:灰色、紫色和橙色。假设交换发生在紫色分段中,该分段具有与上述示例相同的流动性。

请注意,一切都以相同的方式发生,就好像紫色分段是一条无限曲线!价格从 y/x 变为 y′/x′;(x−x′) 个代币 X 离开池,(y−y′) 个代币 Y 进入池。

本地 Uniswap V2 曲线

在一个流动性 xy 的分段内,交换的发生方式与我们在具有恒定流动性 xy 的无限曲线上完全相同,就像在 Uniswap v2 中一样。 仅有的两个区别是:

  1. 当价格达到该分段的边界时,该分段中将不再发生交换——它们必须在下一个分段中发生。
  2. 该分段的 x 和 y 值不代表该分段中的实际代币数量——它们是该分段的虚拟储备金。

除此之外,我们将继续使用与 Uniswap v2 中相同的定义。代币的价格定义为 p=y/x,流动性遵循恒定乘积公式 k=xy。

唯一的区别是我们用 L2 替换 k 并将流动性定义为 L2=xy。原因将在后面的章节中变得清楚。

Uniswap v3 中的价格和流动性

在 Uniswap v3 中,我们将价格定义为虚拟储备金之间的比率,

p=y/x

其中价格始终是代币 X 的价格。

一个分段的流动性 L 由公式定义

L2=xy

用于真实和虚拟储备金的交互式工具

下面是一个交互式工具,你可以在其中查看给定分段的真实储备金 (xr, yr) 和虚拟储备金 (x, y)。滑动价格以查看储备金如何随着价格的移动而变化。你还可以通过更改下面的 k1–k4 来调整分段的流动性。

Uniswap V3 中的真实储备金和虚拟储备金

Uniswap V3 中的真实储备金和虚拟储备金

移动价格滑块以查看真实和虚拟储备金如何变化

价格 (p):1.000

真实储备金

真实储备金 (X):0.00

真实储备金 (Y):1.76

虚拟储备金

虚拟储备金 (X):6.00

虚拟储备金 (Y):6.00

k1:16

k2:36

k3:32

k4:16

计算分段的真实储备金

在本章的第一部分,我们看到了分段的真实储备金的可视化表示。现在,我们需要一个公式来定量计算真实储备金。

在 Uniswap v2 中,储备金仅取决于价格和流动性。在 Uniswap v3 中,情况并非如此。让我们看下面的插图。左侧和右侧的两个分段都具有相同的流动性,并且我们考虑的是相同的价格,但显然,左侧的真实储备金大于右侧的真实储备金。

用 L 平方表示的流动性

在 Uniswap v3 中,一个分段的真实储备金取决于该分段的流动性、当前价格以及该分段的边界——其上限和下限 tick。我们将把导出分段真实储备金的公式推迟到下一章。

接下来,我们将展示如何根据流动性和价格计算虚拟储备金。在我们可以解释如何计算真实储备金之前,此步骤是必要的。

从价格和流动性推导虚拟储备金

我们现在将学习如何根据当前价格和流动性计算虚拟储备金。

推导虚拟储备金 x

我们从定义 L2=xy 和 p=y/x 开始,其中 x 和 y 是虚拟储备金,p 是价格,L 是流动性。

首先,让我们将 L2 除以 p,以根据 L 和 p 推导出 x:

L2p=xyp
divide both sides of L2=xy by p
L2p=xyy/x
substitute p on the right hand side to y/x
=(xy)(xy)
cancel y
L2p=x2
simplify
L2p=x2
square root both sides
Lp=x
simplify

推导虚拟储备金 y

通过将 L2 乘以 p,我们可以找到储备金 y,如下所示:

L2p=(xy⏟L2)(yx⏟p)
L2p=y2
Lp=y
square root on both sides

虚拟储备金的公式

我们推导出了我们需要的两个公式:从 L 和 p 计算出的虚拟储备金:

x=L/p
y=Lp

为什么我们在定义流动性时使用 L2 而不是 L

如果我们已将流动性定义为 xy=L 而不是 xy=L2,则以上 x 和 y 的等式将取决于 L 而不是 L。这可以在下面的推导中看到,我们在其中使用了 xy=L 而不是 xy=L2。

Lp=xyp
Lp=xyy/x
Lp=(xy)(xy)
Lp=x2
Lp=x2
Lp=x

Uniswap v3 使用 xy=L2 而不是 xy=L,以避免链上计算平方根的昂贵操作。

跟踪平方根价格而不是价格背后的动机

使用 L2 允许我们避免采用 L 的平方根来计算 x 和 y,如果我们对 p 执行相同的操作,那将是很方便的。也就是说,如果我们能够从 L 和 p 计算 x 和 y,而不是从 L 和 p 计算,那将是很方便的。

不幸的是,这是不可能的,因为我们不想更改价格的定义方式——我们想保留与 v2 相同的公式。因此,必须使用公式 x=L/p 和 y=Lp 计算虚拟储备金。

这给我们留下了两个选择:要么在协议中跟踪 p 并在链上获取其平方根以计算储备金,要么直接跟踪 p 的平方根。第二种选择效率更高。

因此,协议不是跟踪价格 p,而是将值 p 跟踪为变量 sqrtPriceX96,从而避免了计算价格平方根的需要。

总结

  • Uniswap v3 有两种类型的储备金:虚拟储备金和真实储备金。
  • 真实储备金是按分段定义的,并指示该分段中包含的代币数量。一个分段可以包含代币 X、代币 Y 或两者的真实储备金。
  • 一个分段中的代币数量取决于当前价格。如果当前价格大于或等于上限 tick,则真实储备金将仅以代币 Y 存在。如果它小于或等于下限 tick,则真实储备金将仅以代币 X 存在。如果它介于上限和下限 tick 之间,则真实储备金将以两种代币存在。
  • 虚拟储备金是如果一个分段是无限曲线,它将拥有的代币数量——就像在 Uniswap v2 中一样。使用虚拟储备金,我们可以在 Uniswap v3 的每个分段上使用与 Uniswap v2 相同的数学。
  • Uniswap v3 使用公式 L2=xy 而不是 L=xy,以避免必须在链上计算 L 的平方根。
  • 作为 L 和 p 的函数的虚拟储备金由 x=L/p 和 y=Lp 给出。

reCAPTCHA

Recaptcha 需要验证。

隐私 - 条款

reCAPTCHA 保护

隐私 - 条款

  • 原文链接: rareskills.io/post/unisw...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/