DEX 发展中,算法的迭代和做市形式的变化是一个主线。从恒定价格和恒定乘积做市到各种集中流动性算法,DEX 的底层做市算法效率越来越高。大浪淘沙下,采用集中流动性方案的 DEX 表现位居市场前列,Uni V 3 ,Curve V 2 ,DODO 是其中的佼佼者。三者分别采用了不同的方式实现了流动性的集中,提高了 LP 的资金效率,并在市场上取得了巨大成功。本文将从多个维度剖析底层做市算法,深入比较三家交易所底层算法的数据表现,对比三家交易所的整体市场表现。
有效率,才有经济。——本杰明
恒定乘积做市公式:x*y=k,被视为 DeFi 领域的突破性创新。它开创了资金池模式的交易形式实现了链上交易,但恒定乘积的 AMM 做市曲线也有无法避免的效率问题。
Uniswap(Uni) 早期版本采用了恒定乘积做市公式。从图中可以看出,其流动性均匀地分布在曲线上,代币价格的理论波动范围在 0 到无穷,而市场上代币价格变动范围集中在一个小的区间内。因此,价格波动外的流动性并没有真正提供到市场上,这就造成了效率损失。这种情况下,滑点、市场深度、无常损失都会受到负面影响。
集中流动性就是以某种方式改变做市曲线上的流动性分布,将流动性集中在市场交易最频繁的区间,提高做市资金的效率。广义上讲,任何调控做市曲线,以改变资金池流动性分布的尝试都可以称之为集中流动性。Uni V 3 ,Curve V 2 ,DODO 都是典型的集中流动性的 DEX,但底层算法的明显差异也使各自有了不同的差异点。集中流动性的解决方案不单一,本质都是在尽可能改进资金利用效率,满足代币交易的市场需求和做市需求。
Uni V 3 ,Curve V 2 ,DODO —— 三种集中流动性的做市曲线
Uni V 3 提出的范围挂单(Range Order)允许用户在特定的价格区间提供流动性,即把做市资金集中在特定的价格区间,而整个池子的流动性分布就是所有曲线的加和。LP 提供的是杠杆化的流动性,因为 LP 的资金只在其选定的价格区间起作用。若在区间内,做市资金赚取手续费的效率成倍提升;若在区间外,做市资金便失效。
由此可见,Uni V 3 集中流动性的方式是提供了杠杆流动性的机制,通过 LP 的主观行为将流动性集中在市场价格附近,即 LP 会主观预测价格运行的范围。市场价格波动时,LP 将会主动调整自己的做市范围,大量的调整行为会导致整体流动性分布的改变,从统计上看最终将会集中在市场价格附近。整体效率得到了提升,但用户之间的效率改变则取决于用户具体的挂单行为。
USDC / ETH 0.3% Pool 流动性分布(来源:Uniswap 官网)
Uni V 3 的设计目的是提高 LP 资金效率,LP 可以根据自己的判断提供流动性的范围可自由选择,进行定制化做市。这一设计虽然在整体上提高了 LP 的做市效率,但是 LP 们的收益不均衡,且增加额外的决策成本。LP 做市的主动性更强,但这一定程度上与 DEX 惰性做市的初衷相悖。大部分散户并没有预测市场的能力,反而会因为杠杆流动性面临更高的无常损失的风险。这一设计也催生出了 JIT(Just In Time)攻击的现象,做市操作变得更加复杂。
优势
灵活度高,可以自定义做市的价格区间,自己控制资金效率。
市场流动性分布是所有 LP 的范围挂单形成的,是主观形成的,更贴近于市场行为。
资金效率的上限高。
劣势
LP 收益依赖于 LP 对市场的判断能力,增加了 LP 的决策成本,导致 LP 收益不均衡,并且存在 JIT 攻击的情况。
提升效率的同时提升了风险,高杠杆流动性将面临更高的无常损失。
Curve V 2 是 Curve 针对非稳定资产设计的,核心思想跟 Curve 的 StableSwap 没有区别,让我们回顾一下 Curve 提出的StableSwap。
Curve 第一代算法非常简洁,是恒定乘积和恒定价格两种做市曲线的加权求和。这使得曲线在固定价格附近的曲率变小,在固定价格上实现流动性的集中。稳定币的交易中,价格集中在 1 附近,Curve 通过这种方式实现了在 1 附近的流动性集中,从而提升了资金效率。
Curve V 2 针对非稳定资产,也是用恒定乘积和恒定价格两种做市曲线进行加权求和得出新的做市曲线,只不过这个曲线会动态调整。上一代算法只能在固定价格附近集中流动性,而这一代算法会根据内部预言机动态调整这个价格以及集中流动性的程度。Curve V 2 定义了 K 值,这是一个动态调整的参数,这个参数决定了曲线的形状。K 值越大,曲率越小,曲线越接近于恒定价格曲线,流动性越集中。
Curve V 2 会根据内部预言机来计算 D 值,该参数将决定锚定价格,也即流动性集中的价格。Curve V 2 算法通过混合恒定乘积和恒定价格曲线来集中流动性,不断更新两个曲线的权重,内部预言机来决定流动性集中的锚定价格,通过不断更新这个价格,来实现流动性集中在盘口价格附近。
设计分析和优劣势
Curve V 2 的设计是比较简洁的,通过混合恒定乘积和恒定价格曲线来集中流动性,内部预言机决定锚定价格。在 Curve V 2 的这种设计模式下,内部预言机价格的改变是通过用户的交易行为来实现的,当大量的交易行为使得价格发生较大程度偏离时,内部预言机更新价格,流动性分布发生改变。
优势
通过独创的做市曲线降低交易价格附近的滑点,保证市场深度,且做市函数适用于各种代币。
内部预言机动态调整锚定价格,以确保在市场价格附近交易。
动态调整交易手续费,离价格平衡点越远,手续费越高,从而在市场价格附近提供更优的价格。
劣势
内部预言机价格调整依赖于用户交易行为,具有一定的滞后性,无法提前调整流动性分布。
曲线求解无显式形式,需用数值方法求解(牛顿法),计算开销较大,且有一定的误差。
DODO 通过独创的 PMM 算法提供流动性,PMM 算法引入了参考价格,做市商通过自主报价,将流动性集中在市场价格附近。与基于 AMM 的做市算法不同,PMM 算法的价格计算基于外部价格和库存两个因素。当外部价格发生变化时,代币的兑换比例会直接发生变化,用户与池子交易的时候,库存发生变化,价格也会发生变化。因此,PMM 算法决定的代币价格取决于外部价格和用户交易行为,使得 DODO 可以提前调整流动性分布,始终将流动性保持在外部价格附近。
PMM 算法的具体形式如下,其中,参数 i 是外部价格,由做市商报价提供,k 是控制流动性集中程度的参数,k 越小,流动性越集中,B、Q 是代币的库存,该公式描述的是边际价格随着库存变动和外部价格变动的关系。
DODO 提供了灵活的建池方案,参数可以由用户自行设置,非常灵活。
从设计上来看,DODO 实际上参考了 CEX 的流动性分布。外部价格由做市商报价提供,预言机提供的外部价格实际上就是用户在 CEX 交易形成的市场价格。目前 CEX 的流动性依旧主导市场,根据外部价格调整流动性极大提升了做市效率。
优势
通过独创的 PMM 算法做市,引入外部价格,流动性锚定在市场价附近,提供低滑点的交易价格。
资金效率高,在同等资金下可以支持更大的交易量。
流动性分布调整速度快,使得 DODO 的流动性可以快速地跟市场同步。
劣势
依赖于外部价格,有做市商报价偏离的风险,且外部价格代表了市场上的高流动性,并非是 DODO 内部的流动性。
锚定池中 k 值是设定值,没有动态调整机制。
对不同 DEX 的交易池进行对比,由于做市算法各不相同,有很大的难度,比如数据源问题,比较分析问题以及如何确定一个比较的标准。
基于此,本文数据分析进行如下处理:
选取 Uni V 3 以太坊主网的 USDC/WETH 0.05% 池子,Curve 以太坊主网的 USDT/WBTC/WETH 3 crypto 池子,DODO Polygon 上的 USDC/WETH 做市商池子作为样本,这三个样本池均为 WETH 对稳定币的交易对。直接查询智能合约数据,得到底层参数,根据各交易所的做市曲线计算出流动性分布。
流动性数据范围从 2022 年 1 月 1 日,到 2022 年 8 月 16 日,数据间隔为一小时。
交易量和 TVL 数据范围从 2022 年 6 月 16 日,到 2022 年 8 月 16 日。
所有数据采样均同步时间戳,同步区块高度。
所有数据可视化部分,为视觉效果的统一,均进行归一化处理。
出于计算处理的需要,总流动性分布采用 ETH 价格在 100 到 10000 区间内的流动性。
在选定时间跨度内的流动性分布变化, 2% 代表的是在市场价格正负 2% 的价格区间内的流动性占总流动性的比例, 6% , 10% 同理。