接着上一片的 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 协定。