深化了解 Uniswap V3 原理:从技能白皮书开端

深化了解 Uniswap V3 原理:从技能白皮书开端

Uniswap V3 中心思维是流动性会集,流动性供给者能够在某个区间供给流动性,进步资金使用率。…以太坊,技能,DeFi,Uniswap,AMM,项?发展 以太坊 技能 DeFi Uniswap AMM 项?发展星主意 图标 Logo星主意区块链作者,团队,专栏,大众号,头条· ·阅览约 8 分钟

Uniswap V3 中心思维是流动性会集,流动性供给者能够在某个区间供给流动性,进步资金使用率。

原文标题:《Uniswap – V3 技能白皮书导读》
撰文: Star Li

Uniswap V3 一发布就引发广泛重视。相对 V2 来说,逻辑和代码都杂乱一些。V3 的中心是经过盘口区间供给流动性(会集式流动性),处理 LP 供给流动性时的资金利用率的问题。什么是资金利用率?V3 怎么推导区间流动性的核算公式?怎么了解流动性?怎么核算 swap 费用?本文先从 V3 技能白皮书详细分析开端。

先给出一些 Uniswap 官方有关 V3 的材料:

V3 官方介绍

技能白皮书

智能合约代码

引荐先仔细检查技能白皮书,再看智能合约代码,最终再对照官方介绍。了解了技能白皮书,代码十分简略了解。在技能白皮书的第一章总结了 Uniswap V3 的技能特色,最中心的概念是 「Concentrated Liquidity」(会集式流动性)。

资金利用率

先看看 Uniswap V2 的资金利用率:

深化了解 Uniswap V3 原理:从技能白皮书开端

上图为资金池中的 x/y 的量改变曲线。资金池中的当时价格在 c 点,而且假定会在 a 价格点和 b 价格点之间动摇。从 c 点向 a 点滑动,耗费最大 y_real,从 c 点向 b 点滑动,耗费最大为 x_real。也便是说,当时价格 c 点,在 a 点和 b 点之间震动的话,最大只需求耗费 x_real 和 y_real。理论上只需供给 x_real 和 y_real 就足够了。而事实上,如上图所示,在价格 c 点,别离供给了大于 x_real 和 y_real 的 x 和 y。显着能够看出,x-x_real 和 y-y_real 的资金在这种状况下是永久用不上的,也就称为搁置资金。

在这种状况下,资金利用率为 x_real/x 或许 y_real/y。假如价格动摇十分小的话,资金利用率是十分低的。Uniswap V3 便是测验处理资金利用率低的问题。主意比较简略,一切资金能够只增加到某个区间,只增加到有或许价格动摇到的区间规模。怎么在某个区间增加流动性并供给 swap 功用是 Uniswap V3 的要点。先从 Virtual Reserves 说起。

虚拟资金池(Virtual Reserves)

Uniswap 的买卖选用的乘积固定模型 (x*y=k)。所谓的虚拟资金池 (Virtual Reserves),是指还在乘积固定曲线上,只供给某个区间流动性的资金池:

深化了解 Uniswap V3 原理:从技能白皮书开端

图中的墨绿色的曲线便是虚拟资金池满意的乘积固定曲线。事实上需求的资金的曲线如图中的橘黄色。橘黄色的曲线公式如下图:

深化了解 Uniswap V3 原理:从技能白皮书开端

你能够幻想成虚拟资金曲线在 x/y 轴进行平移,使得 a/b 点和 x/y 轴重合。也便是用必定量的资金就能到达「虚拟」的买卖曲线的作用。

怎么核算在某个区间供给虚拟资金池,先要从深化了解流动性开端。

流动性(Liquidity – L)

乘积固定的买卖模型,满意资金池中的两种代币金额满意:xy = K。假如设定 K=L^2 的话,xy = L^2。L 便是咱们说的流动性。由乘积固定的买卖模型得出如下的公式:

深化了解 Uniswap V3 原理:从技能白皮书开端

在已知 L 和 sqrt(P) 的状况下,也能推导出资金需求量 x 和 y。

深化了解 Uniswap V3 原理:从技能白皮书开端

经过公式 6.6,在流动性不变的状况下(不增加删去流动性),流动性能够看成是单位「价格动摇」的 y 资金量的改变。「价格动摇」打上引号是由于事实上是 sqrt(P) 的改变。

深化了解 Uniswap V3 原理:从技能白皮书开端

这个是 Uniswap V3 中心公式(6.7),用相对值(资金和价格相对值)来核算流动性。所谓的流动性,便是单位「价格改变」的资金量。在必定的买卖量的状况下,假如流动性好,价格改变就小,流动性不行的话,价格动摇就大。

深化了解 Uniswap V3 原理:从技能白皮书开端

特别留意的是,一个区间上的流动性和 V2 的普适的流动性不同。一个区间上的流动性,要点在「区间上」。不同区间的流动性没有可比性。V2 的流动性和区间上的流动性的差异如下图:

深化了解 Uniswap V3 原理:从技能白皮书开端

V2 的流动性是「普适」的,在一切价格点上流动性相同。V3 的流动性是由一系列不同区间上的流动性组成。相对来说,在当时价格左右的流动性比较高。流动性供给者 LP 只要供给了可供买卖的流动性才干获取买卖费。为了获取更多的买卖费,为了进步资金的利用率,流动性供给者会将资金供给在合理的价格动摇规模内。也便是说,在某个区间 swap 买卖产生的手续费,只要该区间流动性供给者才干获取手续费。为了核算每个区间获取的手续费,引入了 Tick 的概念和核算办法。

Tick

在区间上供给流动性,带来许多杂乱的状况:区间和区间的堆叠掩盖。由于不同区间的流动性没有可比性,某个买卖费并不能混入到流动资金中,等删去流动性时分同时提取。为了处理这个问题,Uniswap V3 引入了 Tick 的概念。买卖费用实时结算并独自记载,并不混入流动资金中。尽管整个区间和区间的流动性没有可比性,可是,在详细的某个价格点上(一个价格片上),流动性是可比较的。Uniswap V3 将整个价格规模 (负无量到正无量) 分红一个个的 Tick (价格点):

深化了解 Uniswap V3 原理:从技能白皮书开端

后一个价格点的价格是前一个价格点价格基础上起浮万分之一。

深化了解 Uniswap V3 原理:从技能白皮书开端

每个 Tick 也有一个仅有的序号。区间(Position)能够由两个 Tick 表明。逻辑上买卖手续费能够一个个的 Tick 核算,并在每一个 Tick 上依据流动性的占比进行买卖分配。先看看一个 Tick 规模的 swap 的核算。

Tick 内的 SWAP

假定有一个很小的量的 y,需求 swap 为 x。经过 6.13 的公式,能够核算出由于 y 的改变导致的价格改变。

深化了解 Uniswap V3 原理:从技能白皮书开端

再利用 6.15 的公式能够算出交流的 x 的量。

深化了解 Uniswap V3 原理:从技能白皮书开端

Uniswap V3 针对相同的买卖对设置了不同的买卖费:0.05%,0.3% 以及 1% (还能够增加其他费率)。假如是从 Y 交流 X,则在交流之前先扣除手续费再进行上述的交流。

在同一买卖池中只支撑一种费率。也便是说,在一个买卖池中支撑不同的价格区间,可是都是相同的费率。假如需求增加相同买卖对的不同买卖费的买卖池,有必要创立新的买卖池。

接下来,深化解说一下 增加 / 删去流动性以及买卖费用的核算逻辑。

增加 / 删去流动性

V3 的增加 / 删去流动性是当时价格状况下在某个区间增加或许删去流动性。一切的流动性增加 / 删去流动性选用如下的公式:

深化了解 Uniswap V3 原理:从技能白皮书开端

留意,价格改变并不是指区间的巨细,而是在某个区间上供给流动性,相对当时价格,「需求相应资金改变」对应的价格改变。

分为三种状况,想要增加的流动性区间和当时价格的联系。

当时价格处于流动性价格区间 (il <= ic < iu)

深化了解 Uniswap V3 原理:从技能白皮书开端

由于价格在区间规模内,假如价格滑动到 il,则需求供给 y 资金。假如价格滑动到 iu,则需求供给相应的 x 资金。所以,关于 delta_Y 来说的,价格改变为 sqrt(P) – sqrt(p(il));关于 delta_X 来说,价格改变为 1/sqrt(P) – 1/sqrt(p(iu))。

当时价格低于流动性价格区间

深化了解 Uniswap V3 原理:从技能白皮书开端

由于当时价格远低于 il,即便从当时价格向 iu 滑动,也只需求 x 的资金,不需求 y 的资金。所以,在这种状况下,delta_Y = 0。由于从 il 滑向 iu 需求整个区间的 x 的资金,关于 delta_X 来说,价格改变为 1/sqrt(il) – 1/sqrt(p(iu))。

当时价格高于流动性价格区间

和第一种状况相似,不重复分析了。

Swap 买卖费用

Uniswap 最杂乱的逻辑是核算买卖费用并分配。在增加和删去流动性之前需求将相应的买卖费用提取。

Tick 上的总流动性

在某个 Tick 上能够存在多个区间。在核算买卖费用时,需求平摊这些费用给一切在这个 Tick 上多个区间的总的流动性。在每个区间的鸿沟的 Tick 上记载下 delta_L (一切以这个 Tick 为鸿沟的区间的流动性总和)。

存在一个大局状况:liquidity,保存当时价格对应 Tick 的流动性总和。当价格动摇,穿过某个 Tick 时,会进行流动性的增加或许削减(取决于价格动摇方向)。举例来说,价格从左到右穿过区间,当穿过区间的第一个 Tick 时,流动性需求增加,穿出最终一个 Tick 时,流动性需求削减,中心的 Tick 都没有流动性的增加和削减(delta_L 为 0)。

深化了解 Uniswap V3 原理:从技能白皮书开端

区间(Position)上的买卖费用率

核算一个区间上的买卖费用率,选用总的费用率减去区间外的费用率的办法。 在一个区间的鸿沟 Tick 上记载 feeGrowthOutside。所谓的 feeGrowthOutside,便是「别的」一个方向上总的费用率。别的的一个方向是相对穿过当时 Tick 的方向而言。当价格从左到右穿过一个 Tick,feeGrowthOutside 指的是 Tick 左面一切区间的费用率。简略的说,便是价格要去方向的相反方向一切区间的费用率。feeGrowthOutside 用 fo 表明。由于 fo 是一个 Tick 的两个方向的总的费用率,两个方向的费用率的总和肯定是等于 fg (大局的费用率)。所以当穿过一个 Tick 时,这个 Tick 上的 fo 要进行翻转:

深化了解 Uniswap V3 原理:从技能白皮书开端

当一个区间创立时,区间鸿沟上 Tick 的 fo 需求初始化:

深化了解 Uniswap V3 原理:从技能白皮书开端

假如当时的价格大于 Tick 的价格时,由于即便当时价格在设置的区间内,可是之前费用也不会分到,所以,能够简略的假想为一切的费用产生在 Tick 价格之下,也便是 fo=fg。假如 Tick 的价格大于当时价格,价格还没有穿过 Tick,由于假定了之前一切产生的费用产生在 Tick 价格之下,Tick 之上是没有费用的,所以 fo=0。在了解了这些逻辑的基础上,在 swap 的进程中,跟着价格的动摇,一个区间上,超越最高 Tick 的费用率以及低于最低 Tick 的费用率能够用如下的方法核算:

深化了解 Uniswap V3 原理:从技能白皮书开端

以低于最低 Tick 的费用率的核算为例,假如 ic>=i (当时的价格是高于最低 Tick 的),低于 Tick 的一切的费用率便是 fo (界说如此)。假如 ic

深化了解 Uniswap V3 原理:从技能白皮书开端

获取的费用率的基础上,用费用率乘以区间的流动性能够核算出该区间收取的费用。

总结

Uniswap V3 版别中心思维是流动性会集。流动性供给者能够在某个区间供给流动性,进步资金使用率。在某个区间获取的买卖费,由一切在该区间的流动性供给者均分。Uniswap V3 规划了区间粒度-Tick,而且推导了流动性增加 / 删去以及费用核算的进程。在之基础上,Uniswap V3 也更新了价格预言机的完成。

免责声明:作为区块链信息渠道,本站所发布文章仅代表作者个人观点,与链闻 ChainNews 态度无关。文章内的信息、定见等均仅供参考,并非作为或被视为实践出资主张。

[标签:作者]