作者:比原链研究院

前言——Uniswap V3(如下简称 Uni V3)放出了许多 feature,但是其最为实质的迭代仍然是对 AMM 数学曲线的再思考。在曩昔的两年中,咱们也躬身入局 AMM 领域,认为 AMM 最底子的曲线形状现已定型,后续的立异应该会在 AMM 底子曲线形状的根底上完成“战略化”,所以咱们发明了 MOV 超导 V2。而现在咱们看到了 V3,突然有一种“久别重逢”的感觉,在寻找这种感觉之余,咱们也期望为大家出现 AMM 最为深入的思考旅程。由于 AMM 的时代将会比幻想得更为恢宏壮阔。

让咱们直切正题,Uniswap V3 最耀眼的立异——在 AMM 上完成会集流动性

V3 给出了一个虚拟储藏金(virtual reserves)的概念,举例讲解:

在传统 V2 中,Alice 一次性将 500,000 DAI 和 333.33 ETH 注入储藏池,总价值 $1m,供给全区间(0,\infty)的流动性,但实际上 ETH 的价格动摇范围在很长一段时刻内是有局部范围的,这种为全区间忘我供给流动性的行为大大浪费了本钱使用功率。

(注:在一个逐步走向成熟化的金融市场中,无套利原理和提高本钱使用功率永远是两大中心诉求,也是后续 DeFi 产品向前驱 DeFi 建议挑战的起点。)

所谓的会集流动性就是让 LP 自主选择动摇范围,只为该范围供给局部流动性,例如 Bob 认为未来一段时刻内 ETH 的价格区间在(1000,2250),并且假如未来真的是在这个区间动摇,Bob 期望自己取得的收益能够跟百万富豪 Alice 一样多,所以 Bob 一开端只需求投入 91,751 DAI 和 61.17 ETH,总价值 $183,500,远远小于 Alice 实际投入的资金。咱们对照下图来解说其间的道理。

详解Uniswap V3中,AMM的数学原理

其间,X 是 ETH,Y 是 DAI,点 a 对应价格 1000,点 b 对应价格 2250,点 c 是当时市场价格 1500,x_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgreal}是 Bob 投入的 61.17 ETH,y_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgreal}是 91751 DAI。

在数学完成上——

假定图中曲线表达式为 xy=D,其间 D 就是咱们要确认的值,即这条“虚拟的”曲线。

存在如下客观事实:

详解Uniswap V3中,AMM的数学原理

详解Uniswap V3中,AMM的数学原理

进一步,由于

详解Uniswap V3中,AMM的数学原理

详解Uniswap V3中,AMM的数学原理

解方程得

详解Uniswap V3中,AMM的数学原理

最后咱们发现

详解Uniswap V3中,AMM的数学原理

即 Bob 所取得的虚拟曲线(D 值)几乎跟 Alice 一样。

上述核算进程是一种反证法,实际上用户 Bob 会向体系算法提出自己的需求输入,包含猜测价格区间范围、当时价格点、终究想要取得的一个 virtual reserves 规模(即虚拟曲线 D 值)。有了虚拟曲线表达式的确认,能够轻松算出 a、b、c 三个确认的点坐标,从而便算出 x_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgreal}=61.17 以及 y_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgreal}=91751。

一起,也能够看到,一旦未来价格越出了区间,Bob 其间一种财物将完全消失。

详解Uniswap V3中,AMM的数学原理

虚拟储藏金(virtual reserve)是 Uni V3 完成会集流动性的根底原理,也是 Uni V3 将多样化的仓位区间统一成一条(大的全区间的虚拟)曲线的巧妙之处。但是看似简略的原理背后缺需求杂乱的工程完成和算法模型的支撑,尤其是解决手续费(fee)的核算核算和 LP 的参加/退出核算。

关于 AMM 来说,最杂乱的莫过于 LP 的存取行为和收益核算,在以 V2 为代表的经典 AMM 模型中,会经过一种“份额模式”从始至终为 LP 确认下各自可提取的数量份额(也包含手续费)。但在 V3 中,将会对 LP 可提取份额以及所获 fee 份额进行一种“非常核算风格”的核算方法。

在详细完成上,Uni V3 将价格全区间以 ticks 的模式均匀分段,变成离散的空间:

详解Uniswap V3中,AMM的数学原理

怎么依据当时价格,判断所在 ticks——

详解Uniswap V3中,AMM的数学原理

大局状态中有 feeGrowthGlobal0(f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg},0) 和 feeGrowthGlobal1 (f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg},1)—f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg},用来从大局视点核算总的手续费收益。例如,当在一个 tick 内产生了一笔买卖,体系会核算出该笔买卖产生的手续费:

详解Uniswap V3中,AMM的数学原理

其间 y_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgin}为该笔买卖的输入数量,其余部分是手续费的份额。体系会不断累计出每个 tick 内产生的一切手续费总和。

再引进一个“稍微低一个级其他”大局状态变量 feeGrowthOutside\https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg0,1\}—f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgo},用于核算在给定区间(range,由许多接连的 ticks 组成的空间)内的手续费总和。咱们想查询某个价格 range(即在下界 tick i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl}和上界 tick i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu}之间)产生了多少累计手续费,总公式为:

详解Uniswap V3中,AMM的数学原理

其间,

详解Uniswap V3中,AMM的数学原理

f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpga}变量是对一切高于 i tick 的区间的 fee 核算,f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgb}是对一切低于 i tick 的区间的 fee 核算,因此在上述总公式中,咱们从大局总累计手续费 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg}中减去一切低于下界 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl}的累计手续费,再减去一切高于上界 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu}的累计手续费,就是 (i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl},i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu}) 之间的累计手续费。

f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgo} 能够理解为一个核算单元,用于累积截止到 i tick 的手续费,在它的初始化进程中,咱们约定如下:

详解Uniswap V3中,AMM的数学原理

再来看 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpga}的核算,分红了两段,能够理解为——

  • 假如当时 tick 等于 i 或许高于 i,此刻从大局总手续费 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg} 中减去“累积到 i tick”的手续费 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgo}(i),剩余的就是对一切高于 i tick 的区间的 fee 核算;

  • 但假如当时 tick 还未抵达 i,此刻依据对 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgo} 的初始化定义为 0,则一切高于 i tick 的区间的 fee 核算尚未产生,为 0。

同样关于 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgb}——

  • 假如当时 tick 抵达或许超过了 i,f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgo}(i)表示累计到 i 的手续费,也即对一切低于 i tick 的区间的 fee 核算;

  • 假如当时 tick 还未抵达 i,对一切低于 i tick 的区间的 fee 核算值即为当时的大局变量 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg}(当时总手续费)。

浅显来归纳,体系算法要核算某一个 range 内累计的手续费,

  • 假如当时 tick 现已处于 range 内部,即 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl}\leq i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgc} < i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu},只需求从大局手续费 f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg}减去一切低于 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl}组成的 range 累计的手续费;

  • 假如当时 tick 不处于 range 内部,且低于下界 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl},说明尚未在(i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl},i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu})区间内产生买卖,也就未产生手续费,因此该 range 内累计量为 0;

  • 假如当时 tick 不处于 range 内部,且高于上界 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu},需求从大局总量中分别去除“两头”各自的累计量,即从大局f_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgg}中减去一切低于 i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgl}区间累计量,再减去“从i_https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgu}到当时 tick 区间累计量”。

Uni V3 核算手续费的进程是一种从微观走向微观的思想,它将空间划分红离散的,每一个时刻刻度只会在一个离散空间上产生买卖,从而产生手续费,每一个微观 tick 都在各自记载着自己从最低 tick 到自身这段区间内的累计手续费总和,然后供上述公式不断调用,以核算各种微观结果。

Uni V3 现已改变了传统 AMM 对 LP 行为的设定,也不再基于大局流动性(Global Liquidity)和份额(Share)来为每一个 LP 核算手续费收益。对 V3 来讲,它只关注在每一个 tick 里存在多少“虚拟”流动性,以及这些虚拟流动性产生了多少手续费,算得单位虚拟流动性对应的手续费值;在这个时空之下,咱们再把视角切到详细每一个 LP 上,关于任何 LP,都会存在一个“开仓”(Position)的区间设定,他在自己设定的区间供给了虚拟流动性,可能是一个 tick,也可能是接连多个 tick,从最简略的“一个 tick”视点解说,体系会记住同一时空下每一个 LP 在此 tick 注入的虚拟流动性值,并为他们确认出一个份额(注意这个份额只与最开端注入的虚拟流动性巨细有关,并不触及手续费转流动性,这与 V2 是不同的),以此分得该 tick 内一切手续费累计。

详解Uniswap V3中,AMM的数学原理

在实际情况中, LP 们还会存在杂乱的行为,比方注入/退出的时刻纷杂、选择的 range/tick 纷杂。但 Uni V3 的大道至简之处正是使用大局核算来屏蔽掉单个 LP 视角,只关心 ticks 视角和 Position 视角。在确认好上述所述的一系列大局状态变量的定义后,仔细记载好每一笔 swap 买卖在 ticks 中产生的情况(包含只在一个 tick 内完成该笔 swap 买卖,和需求跨多个 tick 才干完成该笔 swap 买卖),一起只记载每个 tick 内虚拟流动性的巨细,以此为底子去供给 swap 买卖公式以及 swap 后手续费怎么分配给参加该 tick 的一切 LP 们。LP 的杂乱行为体现在空间的不接连性和时刻的不统一性两方面,关于时刻不统一性(即会出现许多 LP 不断参加和退出流动性),Uni V3 还会引进 Position 这一级其他大局变量为每一个身份(address)记载下其对 range/tick 参加/退出(“setPosition”)时手续费的核算(uncollected fee/feeGrowthInside),确保后来的 LP 不会参加到前序 LP 们现已累计的收益分配。

假如总结来讲 ,tick-level 是对空间上产生的核算,确保起点共同的 LP 们 fee 分配,而 Position-level 是对时刻上产生的核算,确保不同起点的 LP 们 fee 累计起点不一样。建议完成者深入 V3 代码,才干真实取得安全核算法。

最后,Uni V3 过于杂乱,但大道至简,即便去仿照,仿照者仍然需求下功夫深入了解其“微积分”思想。这篇文章只选择了 fee 这一个视点出现 Uni V3 的“数学原理”,也是其完成会集流动性的中心逻辑。而在数学之外,咱们有更多惊喜的“哲学意义”发现与大家分享,例如 LP token 的进化、NFT 其实并不只属于艺术领域(更有助于金融)、V3 会存在一个战略博弈、V3 对基金池/组成财物的启示等等,当然也包含与 MOV 超导 V2 的“心有灵犀”——AMM 的实质是接连性的无限网格,Uni V3 是在这个无限网格根底之上再完成了微观无限网格,是“无数网格机器人的叠加”,MOV 超导 V2 则是在无限网格根底之上进行了更为微观的无限网格,是超级网格。请等待下一篇《Uni V3 的自然哲学》。

视野开拓

在我看来,若总阅读量不变,那么,减少2/3的图书品种,一点都没有问题。当然,这只是比喻,不是鼓励新闻出版署管制书号。因为,那样卡下来的,说不定正是民众最需要的读物。你怎么能保证不是劣币驱逐良币呢?-《精英的兴衰》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注