多维度解析头部 AMM:Uniswap V3、Curve V2 与 Balancer V2
本文来源于链闻,作者为Ricky Li、Siddharth Lalwani、 Hongxu Yan,就职于 Altonomy Ventures。
自动做市商机制(AMM),以其常数级别的时间空间占用的优势,被许多去中心化交易所(DEX)采用,迄今为止已有许多此类项目大获成功。说到其中佼佼者,必须要提到 Uniswap、Balancer 和 Curve,它们都在近期推出了新的版本, 以针对流动性提供者所关注的各种问题和风险。 本文将会从多个方面对这三个协议的最新版本做出比较。
定价模型和不变式
参与到自动做市商机制中的人群,包括两种不同的角色:流动性提供者(LP)和交易者。流动性提供者向机枪池存入资金,而交易者用一种货币从池中换取另一种代币。AMM 协议需要解决的第一个问题就是如何定价,以一个二币池为例,即如何用代币 2(t2) 的数量表示代币 1(t1) 的价格。
假设池中两种货币的数量分别为 R1 和 R2,在一笔交易中一个交易者想用Δ2 数量的 t2 来买Δ1 数量的 t1。我们可以用一个交易函数ψ来描述一个 AMM 协议,其必须满足在交易前后函数值不变,不变式表示为:
根据这个等式,我们就可以由Δ1 推出Δ2 (或反之)。而这笔交易同时也会影响价格,因为池中的代币总量在交易之后改变了。实际上,因为机枪池的交易价格和外部参考市场的价格有差距,所以套利者会不断交易知道价差回归,AMM 正是利用这种机制来矫正池内的交易价格。每次交易的平均价格定义为:
当 dΔ1->0 时,我们可以计算得到边际价格。 三种协议的边际价格总结如下表
Table 1 边际价格
Uniswap V3
Uniswap 的交易函数定义如下:
由此可得不变式为:
推导出Δ2 的表达式为:
边际价格为:
当 Δ1->0 时,
在新版本 V3 中,由于在不同价格区间的流动性密度不同,需要对每个同一流动性密度的小区间单独计算。当跨过区间边界时,需要的下一个区间做类似计算。
Balancer V2
Balancer 的交易函数定义如下:
由此可得不变式为:
推导出Δ2 的表达式为:
边际价格为:
当 Δ1->0 时,
权重ω1,ω2 也代表两种代币总市值的占比,如果指定ω1=ω2=1/2,那么该池就等价于 Uniswap 的池子。
特别的,Balancer 允许至多 8 种代币的混合池,当代币种类大于两种时,其交易函数扩展为:
其他推导步骤也可类似地拓展到多币的情形,推导步骤在此略过。
Curve V2
Curve 协议的交易函数是恒定和函数和恒定积函数的线性组合:
类似的,我们可以推导出边际价格,当 Δ1->0 时,
价格影响和滑点
根据上一步得出的边际价格公式,我们可以通过比较单次交易前后边际价格的变化,来定义这次交易的价格影响。比较三种协议的价格影响,我们能得出以下结论:假定交易同等数量的代币 1,设定ω1 越高的 Balancer 池,其价格影响越大,如果ω1>1/2,那么价格影响大于相同交易在 Uniswap 池中的影响,反之亦然。而在平衡点附近(即价格偏移不严重) Curve V2 的价格影响最小。
在下面的例子中,我们比较四个不同池子的单次交易价格影响,假设初始池中代币总量 R1=R2=10000:
- 一个 Uniswap V3 池,初始价格为 1
- 一个 Balancer V2 池,ω1=0.4,ω2=0.6,初始价格为 0.666
- 一个 Balancer V2 池,ω1=0.6,ω2=0.4,初始价格为 1.5
- 一个 Curve V2 池,α=1,β=3,初始价格为 1
四个池子的价格影响曲线如下图所示:
Figure 1 价格影响曲线
明显的,对于交易相同数量 Δ1 的代币 1,对价格的影响排序如下:Balancer V2 w1=0.6 > Uniswap V3 > Balancer V2 w1=0.4 > Curve V2。
对于 Curve 来说,因为其在一定范围内价格影响最小,所以最适合稳定币的交易对。根据以往 AMM 协议的经验,价格影响曲线的形状往往和流动性提供者的收益相关。距上图所示,因为 Curve 的价格影响曲线最平缓,导致滑点较低,从而使交易者在这个区间中更频繁地(或更大量)交易,最终流动性提供者赚取了更多的交易手续费。
无常损失
Table 2 无常损失
对于 Uniswap V3 来说,来自单一提供者的流动性是被放置在某一封闭区间上的,当一种代币的价格下降时,LP 对该种代币的风险敞口逐渐增大,直到价格来到区间边界。此时,该 LP 只有对该种代币的风险敞口,对另一种代币的敞口为 0,若价格继续往同方向移动,则敞口维持不变。
对于 Balancer V2 和 Curve V2 来说,流动性是对整个价格区间提供的,所以敞口会在整个区间上逐渐变化,不会到达最大 / 最小值。
Figure 2 Balancer 池在不同权重配置下的相对价格变化对无常损失影响
对于 Balancer 协议来说,代币 1 的权重ω1 越小,相同价格波动下的无常损失越小,这是符合直觉的,因为 LP 持有代币 1 的量变小了。
出金与入金
对于想要参与这三种协议的流动性提供者来说,它们对于出金和入金的规则比较起来并没有绝对的优劣,不过根据个人的资产类别和风险偏好,每个协议都有更适合的情形:
Table 3 出金与入金
对于 Uniswap V3 来说,入金时存入两种代币的配比由两点因素决定(1)区间的两个边界 (2)当前交易价格。 简单来说,如果当前交易价格等于两个边界价格的几何平均数的话,LP 需存入 50:50 等量的两种代币。若当前价格更偏向一侧,那么 LP 需要存入的代币中,更便宜的那种代币占据更高的比重。若当前价格在区间之外,LP 只需提供更便宜的一种代币即可。
具体计算方法如下:
当出金时,两种代币的本金提取量可做类似计算。已赚取的手续费部分,以交易发生时的代币类型收取并提取。
对于 Balancer V2,LP 入金时总是需要提供池中所有种类的代币,其配比决定与该池的权重设置
对于 Curve,当入金时,LP 可以按任意比例存入代币,或仅存入单一种类的代币。但是,若存入比例和当前池内的代币总量比例不符合,LP 将承受一定程度的损失(或奖励)。因为当 LP 获取 LP 代币时,获得的量由以下公式计算:
其中 D 是在平衡点时池内代币总量,在流动性增加前其值为 D0,在流动性增加后其值变为 D1。但是,(假设投入相同数量的代币)当池内代币比例离平衡点越远,D 值会相对越小,导致 LP 得到的 LP 代币量较少,即产生了损失。相反的,若投入的代币使得池内代币比例趋向于回归平衡点,那么 LP 将得到更多的 LP 代币,即获得了奖励。
流动性聚集
就流动性聚集来说,Uniswap V3 给予了 LP 最大程度的灵活性,LP 们可以根据自己的意愿聚合出任意形式的流动性分布曲线。相较之下,Balancer 和 Curve 以更多的固定参数设定代替了这种灵活性。
Table 4 流动性聚集方式
Uniswap V3 允许每个 LP 设置任意的流动性范围,以期望总体流动性聚集在一个最活跃的区间。但是,理论上,根据每个 LP 的自主决定,流动性可以被塑造成任意分布。
举例来说,一个和 Uniswap V2 等效的流动性分布入下图所示:
Figure 3 流动性分布 Uniswap V2
这表示,若所有的 LP 都将流动性区间设置为最大可能区间,那么 Uniswap V3 池将会同 V2 等效。
以下是一个和 Curve 近似的流动性分布,所有的流动性都聚集在平衡点附近的一个狭小区间内
Figure 4 流动性分布 Curve
然而,上图仅仅是 Curve V3 的近似,其实际要更复杂。随着市场条件变化,最活跃价格区间偏离原平衡点太多时,Curve V3 会根据内置 Orcale 来重新调整平衡点和价格曲线。
以下是一个等效于 Balancer V2 的流动性分布,其聚集于更大权重的代币价格更低的一侧
Figure 5 流动性分布 Balancer V2
然而,以上都不是实际观察到的 Uniswap V3 池常见流动性分布,常见的分布更类似于以下:
Figure 6 实际观察到的流动性分布 Uniswap V3
交易费用
Table 5 交易费用
Uniswap V3
每个交易对有三个费用梯度的池子供 LP 选择:0.05%,0.3%,1%。直观上看,LP 更偏向于高费用池,但当高费用池的交易活跃度远低于低费用池时,LP 就不得不参与低费用池。交易者更偏向低费用池,但当低费用池的流动性过于稀薄而滑点过高时,交易者就会被迫从高费用池中交易。
根据实际观察,对于稳定币交易对来说,0.05% 费用的池子最活跃。对于其他交易对,当市场波动率高时,高费用池变得更活跃,当波动率低时,低费用池更活跃。
Balancer V2
Balancer 协议收取两种费用:(1)交易手续费,以交易额的一定百分比对交易者收取 (2)出金费用,当 LP 从协议中出金时按提取额度收取
交易手续费可设置为 0.05% 到 1% 之间,由池子创建者设置初始值,并由协议根据多因子来动态调整,因子包括:波动率,交易额,无常损失,流动性总量,流动性挖矿奖励,等等。
出金手续费可由协议设置,但迄今为止未采用。
Curve V2
费用可设置为 0.04% 到 0.4% 之间,可根据目前池内代币比例做动态调整,当前比例距离平衡点越远,费用率越低:
结论
通过多方面的比较,可以看出每个协议都采取的不同的方法来契合 LP 和交易者们的多方面不同需要。
Uniswap V3 给予了 LP 最大的灵活性,几乎所有参数都可以由 LP 自主决定,而团队并没有额外加入更多辅助特性,以保持协议的简单化。而 LP 则需要管理自己的各种风险。
Curve 历史上曾专注于稳定币交易对,此新版本 V2 致力于扩展所涵盖代币的种类。不同于稳定币,非稳定币交易对的市场中价可能会偏移到新的活跃区间,所以此协议可根据内置 Oracle 的喂价调整流动性聚集范围,而无需 LP 自己重部署流动性区间。此种设计对个人投资者更加友好,但限制了开发更复杂的定制化做市策略的可能性。
Balancer V2 在同一流动性池中容纳了多于两种的代币,并且赋予不同的权重,这满足了一部分 LP 差别对待不同种代币风险敞口的需求。通过增加一侧风险波动的方式,来降低另一侧的风险。
引用文献
[1] G. Angeris, A. Evans, T. Chitra; When does the tail wag the dog? Curvature and market making, 2020.
[2] Hayden Adams, Noah Zinsmeister, Moody Salem, River Keefer, and Dan Robinson. Uniswap v3 Core. (2021).
[3] Michael Egorov, Curve Finance (Swiss Stake GmbH). Automatic market-making with dynamic peg (2021)
[4] Fernando Martinelli, Nikolai Mushegian. Balancer Whitepaper (2019)