接着上一片的curve V1的钻研(https://segmentfault.com/a/11...),始终把curve V2的整顿利落到了当初。真的好难好难~~
背景
在Uniswap v3中,流动性提供者可能定义他们违心交易的价格来定义区间流动性。这很弱小,因为它容许AMM在人们可能想要交易的价格范畴内领有更多可用资金。以前,大宗交易可能会使AMM与市场重大脱节,以至于交易者可能会缩小交易量。Uniswap v3办法须要LP十分踊跃的治理。 curve v2提议将大致相同的零碎自动化。 基本上,它依据Curve上的交易确定一个外部价格挂钩,并将流动性集中在这个挂钩上。钉子能够挪动,但只有在挪动不会导致流动性提供者产生太大的损失时才会这样做。
简介
CurveV2采纳的根本理念与UniswapV3十分类似--围绕 "均衡点"汇集流动性。两者都不依附内部预测器来达到 "均衡点",而是依附传统的AMM零碎外部的交易博弈,直到零碎平衡,curve v2和uniswap v3一样,都非常重视任何内部危险。尽管不依赖于内部因素,但这两种模式,特地是Curve V2,为通向广泛替换路线上的一系列挑战提供了十分优越的解决方案,如极低的无常损失、集中流动性、进步资本效率、低滑点、动静费用等。这当然是因为其 "反常 "的数学模型。
该数学模型最外围的局部是其发明了一种全新的曲线模式。从上图的视觉效果来看,两条虚线是恒定的产品曲线(xy=k和curve v1),蓝线是驰名的curve V1稳固的硬币兑换曲线,而曲线V2结构的黄色曲线有两个基本特征--
(1) 它处于xy=1和curve V1曲线之间。
(2) curv1的尾部特色具备显著的xy=1曲线拟合。
所以,curve V2能够解决什么问题?
(a) 它继承了curve V1在 "平衡点 "左近区域的超低滑动性和汇集流动性方面的劣势。
(b) 通过在xy=1曲线和curve v1之间,以及在曲线的两头和尾部进行拟合,它取得了xy=1曲线对流动性变动快速反应的劣势,防止了池子里的流动性耗尽,对市场的疾速变动作出了灵便的反馈。
公式推导
在我上一篇Curve V1的数学模型(https://segmentfault.com/a/11...)中,拟合后的曲线的表达式是如下所示。
$$ An^n\sum{x_i} + D = ADn^n + \frac{D^{n+1}}{n^n\prod{x_i}} $$
Curve V2的数学模型和Curve V1相似:
$$K D^{N-1} \sum x_{i}+\prod x_{i}=K D^{N}+\left(\frac{D}{N}\right)^{N}$$
其中,和curve V1一样,Curve V2也有一个杠杠率$K$。这个\(K\)是用来和曲线xy=1拟合的。
$$K_{0}=\frac{\prod x_{i} N^{N}}{D^{N}}, \quad K=A K_{0} \frac{\gamma^{2}}{\left(\gamma+1-K_{0}\right)^{2}}$$
下面这个看起来比拟难了解。看下图可能就不难理解了。\( K_{stableswap} \) 是curve v1的常量,咱们能够看到curve V2中\( k_{0} \) 是\( K_{stableswap} \)当A=1的时候的非凡状况。所以, \( K_{curveSwap} = K_{StableSwap} \frac{\gamma^{2}}{\left(\gamma+1-K_{0}\right)^{2}} \)。艰深的解释就是,CurveSwap 就是 stableswap 算法中 w / decaying A。
当K0趋于1时,即当曲线状态靠近 "平衡点 "范畴时(对照图1了解),整个Curve V2的表达方式将进化为Curve V1的表达方式,从而使赎回曲线具备Curve V1的良好个性。
Gamma
公式中引入的最简单的变量是gamma,它来自图1中的两条恒积曲线。上常量积曲线和curve v1的表达式独特形成了V2常量积曲线的 "平衡点 "区域,而下常量积曲线是上常量积曲线的参数化还原,即
$$x \cdot y=\left(\frac{D}{N}\right)^{N}$$
咱们把常量乘以一个gamma值:
$$x \cdot y=\gamma \cdot\left(\frac{D}{N}\right)^{N}$$
gamma是一个十分小的正小数,在曲线形态上会比下面的曲线更缩进原点。CurveV2须要引入这样一条gamma曲线,使V2曲线在中段和尾段解脱curve v1的毛病(流动性枯竭和对汇率变动的快速反应),也就是说,使曲线在后半段有更大的弧度。随着坐标变动一直向横轴和纵轴的远方挪动,它们越是向无穷大收敛,V2的曲线形态就越合乎上面的常积曲线。也就是说,K0收敛到gamma,CurveV2的表达式就会缩小。
$$A \gamma^{3} D^{N-1} \sum x_{i}+\prod x_{i}=A \gamma^{3} D^{N}+\left(\frac{D}{N}\right)^{N}$$
很显著,这是一条新的曲线,它偏差于上面的恒定产品曲线。在这里,咱们只能从混合曲线的根本结构原理登程,反向解释曲线V2表达式的形成,即通过别离向 "均衡 "范畴和程度方向和垂直方向的远端凑近,使表达式别离还原为curve V1和恒积曲线。曲线,从而达到curve V2整合Uniswap和curve V1的目标,使这种简单的混合曲线可能反对广泛的可兑换性,具备更好的集中流动性和滑移性的劣势,同时保留Uniswap的流动性爱护和应答市场汇率忽然变动的劣势。
Internal Oracle
CurveV2提出了MarketPrice更新机制,这是一种更新市场的市场价格的机制。更新机制包含:
i)指数挪动平均线(EMA)价格
ii)估算利润 (Quantification of a repegging loss)
iii)从新定价算法(取决于i和ii)(Algorithm for repegging)
概括地说,零碎通过经典的外部预言机机制EMA一直捕获零碎内的汇率变动序列,而后在每次交易和做市口头后,依据priceoracle不断更新一个名为利润测量\( X_{cp} \)的变量:
$$X_{c d}=\left(\prod \frac{D}{N p_{i}}\right)^{\frac{1}{N}}$$
报价:
$$VirtualPrice=X_{CD} / lpsupply$$
监听OldPrice的价格变动,
$$profit = profit * NewVirtualPrice / OldVirtualPrice $$
这个变量能够解释为每次价格偏离原平衡点的幅度,能够直观地了解为,如果汇率变动不大,零碎公式仍以原平衡点为根底,如果汇率变动太大,导致坐标点在曲线上显著偏移,那么零碎就应该重建公式,用新的 "平衡点 "基数代替 变量Xcp用来量化扭转公式和平衡点的伎俩。
Adjust
当满足以下条件的时候,调整新的锚定/均衡价格点:
$$(VirtualPrice - 1) > (profit - 1)/2 + allowedExtraProfit $$
咱们能够基于新旧的oracle价格计算出scale值,当scale大于某个阈值的时候,就会更新价格。
$$\frac{p_{i}}{p_{i, p r e v}}=1+\frac{s}{\sqrt{\sum\left(\frac{p_{j}^{*}}{p_{j, p r e v}}-1\right)^{2}}}\left(\frac{p_{i}^{*}}{p_{i, p r e v}}-1\right)$$
如上所述,当Xcp冲破阈值时,零碎会依据此时更新的oracleprice更新price_scale,从而定位新公式的新平衡点地位,随后更新新的D值,失去新的表达式。
总结
Curve V2做出了两个翻新:新的curve曲线和repegging机制。这个新曲线不仅动态简单,而且具备动静个性,能够依据EMA和Xcp对系统的偏移做出主动反馈,使池子里的流动性在以后汇率范畴内失去最大水平的汇集,大大提高了动静资本效率,这是能够超过Uni V3的。
不愧是宇宙第一难defi协定。