-

精读Uniswap V3手艺白皮书,我们发现了什么?

来源: 数字货币 时间:2021-04-08 20:00:48
导读: uniswap V3版本核心思想是流动性集中


剖析:矿工收入创历史新高,重回囤币模式

矿工们又回到了囤币模式,自2月初以来,比特币供应量增加了5000枚。

原问题:《uniswap - V3手艺白皮书导读》

泉源:星想法

作者:Star Li

uniswap V3一宣布就引发普遍关注。相对V2来说,逻辑和代码都庞大一些。V3的焦点是通过盘口区间提供流动性(集中式流动性),解决LP提供流动性时的资金行使率的问题。什么是资金行使率?V3若何推导区间流动性的盘算公式?若何明晰流动性?若何盘算swap用度?本文先从V3手艺白皮书详细剖析最先。

先给出一些uniswap官方有关V3的资料:

  • V3官方先容

https://uniswap.org/blog/uniswap-v3/

  • 手艺白皮书

https://uniswap.org/whitepaper-v3.pdf

智能合约代码

https://github.com/Uniswap/uniswap-v3-core

https://github.com/Uniswap/uniswap-v3-periphery

推荐先认真查看手艺白皮书,再看智能合约代码,最后再对照官方先容。明晰了手艺白皮书,代码异常容易明晰。在手艺白皮书的第一章总结了uniswap V3的手艺特点,最焦点的观点是"Concentrated Liquidity" (集中式流动性)。

1资金行使率

先看看uniswap V2的资金行使率:

上图为资金池中的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提及。

2虚拟资金池(Virtual Reserves)

uniswap的生意接纳的乘积牢固模子(x*y=k)。所谓的虚拟资金池(Virtual Reserves),是指还在乘积牢固曲线上,只提供某个区间流动性的资金池:

图中的墨绿色的曲线就是虚拟资金池知足的乘积牢固曲线。事实上需要的资金的曲线如图中的橘黄色。橘黄色的曲线公式如下图:

你可以想象成虚拟资金曲线在x/y轴举行平移,使得a/b点和x/y轴重合。也就是用一定量的资金就能到达“虚拟”的生意曲线的效果。

若何盘算在某个区间提供虚拟资金池,先要从深入明晰流动性最先。

3流动性(Liquidity - L)

乘积牢固的生意模子,知足资金池中的两种代币金额知足:x*y = K。若是设定K=L^2的话,x*y = L^2。L就是我们说的流动性。由乘积牢固的生意模子得出如下的公式:

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

通过公式6.6,在流动性稳固的情形下(不添加删除流动性),流动性可以看成是单元“价钱颠簸”的y资金量的转变。”价钱颠簸“打上引号是由于事实上是sqrt(P)的转变。

这个是uniswap V3焦点公式(6.7),用相对值(资金和价钱相对值)来盘算流动性。所谓的流动性,就是单元“价钱转变”的资金量。在一定的生意量的情形下,若是流动性好,价钱转变就小,流动性不够的话,价钱颠簸就大。

稀奇注重的是,一个区间上的流动性和V2的普适的流动性差异。一个区间上的流动性,重点在“区间上”。差异区间的流动性没有可比性。V2的流动性和区间上的流动性的区别如下图:

V2的流动性是“普适”的,在所有价钱点上流动性相同。V3的流动性是由一系列差异区间上的流动性组成。相对来说,在当前价钱左右的流动性对照高。流动性提供者LP只有提供了可供生意的流动性才气获取生意费。为了获取更多的生意费,为了提高资金的行使率,流动性提供者会将资金提供在合理的价钱颠簸局限内。也就是说,在某个区间swap生意发生的手续费,只有该区间流动性提供者才气获取手续费。为了盘算每个区间获取的手续费,引入了Tick的观点和盘算方式。

4Tick

在区间上提供流动性,带来许多庞大的情形:区间和区间的重叠笼罩。由于差异区间的流动性没有可比性,某个生意费并不能混入到流动资金中,等删除流动性时刻一并提取。为领会决这个问题,uniswap V3引入了Tick的观点。生意用度实时结算并单独纪录,并不混入流动资金中。虽然整个区间和区间的流动性没有可比性,然则,在详细的某个价钱点上(一个价钱片上),流动性是可对照的。uniswap V3将整个价钱局限(负无限到正无限)分成一个个的Tick(价钱点):

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

每个Tick也有一个唯一的序号。区间(Position)可以由两个Tick示意。逻辑上生意手续费可以一个个的Tick盘算,并在每一个Tick上凭证流动性的占比举行生意分配。先看看一个Tick局限的swap的盘算。

5Tick内的SWAP

假设有一个很小的量的y,需要swap为x。通过6.13的公式,可以盘算出由于y的转变导致的价钱转变。

再行使6.15的公式可以算出换取的x的量。

uniswap V3针对同样的生意对设置了差其余生意费:0.05%,0.3%以及1% (还可以添加其他费率)。若是是从Y换取X,则在换取之前先扣除手续费再举行上述的交流。

在统一生意池中只支持一种费率。也就是说,在一个生意池中支持差其余价钱区间,然则都是同样的费率。若是需要添加同样生意对的差异生意费的生意池,必须确立新的生意池。

接下来,深入解说一下 添加/删除流动性以及生意用度的盘算逻辑。

6添加/删除流动性

V3的添加/删除流动性是当前价钱情形下在某个区间添加或者删除流动性。所有的流动性添加/删除流动性接纳如下的公式:

注重,价钱转变并不是指区间的巨细,而是在某个区间上提供流动性,相对当前价钱,“需要响应资金转变”对应的价钱转变。

分为三种情形,想要添加的流动性区间和当前价钱的关系。

  • 当前价钱处于流动性价钱区间 (il <= ic < iu)

由于价钱在区间局限内,若是价钱滑动到il,则需要提供y资金。若是价钱滑动到iu,则需要提供响应的x资金。以是,对于delta_Y来说的,价钱转变为sqrt(P) - sqrt(p(il));对于delta_X来说,价钱转变为1/sqrt(P) - 1/sqrt(p(iu))。

  • 当前价钱低于流动性价钱区间

由于当前价钱远低于il,纵然从当前价钱向iu滑动,也只需要x的资金,不需要y的资金。以是,在这种情形下,delta_Y = 0。由于从il滑向iu需要整个区间的x的资金,对于delta_X来说,价钱转变为1/sqrt(il) - 1/sqrt(p(iu))。

  • 当前价钱高于流动性价钱区间

和第一种情形类似,不重复剖析了。

7Swap生意用度

uniswap最庞大的逻辑是盘算生意用度并分配。在添加和删除流动性之前需要将响应的生意用度提取。

  • Tick上的总流动性

在某个Tick上可以存在多个区间。在盘算生意用度时,需要平摊这些用度给所有在这个Tick上多个区间的总的流动性。在每个区间的界线的Tick上纪录下delta_L(所有以这个Tick为界线的区间的流动性总和)。

存在一个全局状态:liquidity,保留当前价钱对应Tick的流动性总和。当价钱颠簸,穿过某个Tick时,会举行流动性的增添或者削减(取决于价钱颠簸偏向)。举例来说,价钱从左到右穿过区间,当穿过区间的第一个Tick时,流动性需要增添,穿出最后一个Tick时,流动性需要削减,中央的Tick都没有流动性的增添和削减(delta_L为0)。

  • 区间(Position)上的生意用度率

盘算一个区间上的生意用度率,接纳总的用度率减去区间外的用度率的方式。在一个区间的界线Tick上纪录feeGrowthOutside。所谓的feeGrowthOutside,就是“另外”一个偏向上总的用度率。另外的一个偏向是相对穿过当前Tick的偏向而言。当价钱从左到右穿过一个Tick,feeGrowthOutside指的是Tick左边所有区间的用度率。简朴的说,就是价钱要去偏向的相反偏向所有区间的用度率。feeGrowthOutside用fo示意。由于fo是一个Tick的两个偏向的总的用度率,两个偏向的用度率的总和一定是即是fg(全局的用度率)。以是当穿过一个Tick时,这个Tick上的fo要举行翻转:

当一个区间确立时,区间界线上Tick的fo需要初始化:

若是当前的价钱大于Tick的价钱时,由于纵然当前价钱在设置的区间内,然则之前用度也不会分到,以是,可以简朴的设想为所有的用度发生在Tick价钱之下,也就是fo=fg。若是Tick的价钱大于当前价钱,价钱还没有穿过Tick,由于假设了之前所有发生的用度发生在Tick价钱之下,Tick之上是没有用度的,以是fo=0。在明晰了这些逻辑的基础上,在swap的历程中,随着价钱的颠簸,一个区间上,跨越最高Tick的用度率以及低于最低Tick的用度率可以用如下的方式盘算:

以低于最低Tick的用度率的盘算为例,若是ic>=i (当前的价钱是高于最低Tick的),低于Tick的所有的用度率就是fo(界说云云)。若是ic

获取的用度率的基础上,用用度率乘以区间的流动性可以盘算出该区间收取的用度。

总结:

uniswap V3版本焦点头脑是流动性集中。流动性提供者可以在某个区间提供流动性,提高资金使用率。在某个区间获取的生意费,由所有在该区间的流动性提供者均分。uniswap V3设计了区间粒度-Tick,而且推导了流动性添加/删除以及用度盘算的历程。在之基础上,uniswap V3也更新了价钱预言机的实现。

加入新手交流群:每天早盘分析、币种行情分析

添加助理微信,一对一专业指导:JQ66630

加入新手交流群:每天早盘分析、币种行情分析,添加助理微信

一对一专业指导:JQ66630