自动做市商(AMMs)是汇集流动性并根据算法向交易员提供流动性的平台。
传统的自动做市商采用的是恒定乘积模型,这导致其存在无常损失。流动性提供者在其中注入资金,其收益可能无法覆盖无常损失。
Uniswap V3的推出,对V2进行了很多方面的改进。虽然依然存在无常损失,甚至在某些情况下,无常损失要比传统的做市模型更大,但是由于其特性,我们可以更灵活的设计做市策略。上线以来,Uniswap V3在短短的几个月里就已经跃居去中心化交易所(DEX)交易量的榜首位置。
在Uniswap v1和v2使用的恒定乘积做市商公式中,只有池中的一小部分资产在给定的价格下可用。这是低效的,尤其是当资产的交易价格一直在某一特定价格附近震荡的时候。传统的AMM要求给定资金池中的所有流动性提供者遵守单一的公式,如果流动性提供者希望在不同的价格范围内提供流动性,则可能导致流动性分散。
Uniswap V3的设计不依赖于任何关于代币价格行为的共同假设。Uniswap V3基于和早期版本相同的恒定乘积曲线,但提供了几个重要的新功能:
- 集中流动性:在V3中,LP可以将流动性集中在一个任意的价格范围内。这提高了资金池的资金利用率。V2的流动性在所有价格上是均匀的。但是对于用户来说,一般会在正态分布的一个区间进行交易,不是在所有价格的交易量都相等,所以V3对V2版本做了一个改良:可以灵活选择价格区间提供流动性(增强流动性)。
- Range Order范围订单:Uniswap V3 提供了全新的功能——范围订单,以补充现在的市价单,这个功能有点像是交易所里限价单的升级版。可以设置一个高于或低于市场价格的区间,只需要质押单币种,在市场价格达到设定的价格区间内,会不断成交为另一币种,在超出价格区间后全部置换成功,且赚取到价格区间内的手续费收入,适用于抄底或出货。
- 灵活的费率:Swap的费率不再锁定在0.3%,每个池的费率级别在初始化的时候设置,最初支持的费率等级为0.05%、0.3%、1%。通过Governance(提议和投票)可以添加其他的费率等级。
- 协议费治理:UNI治理在协议费占⼿续费⽐例的设置⽅⾯,拥有更多的灵活性。
- 改进的价格预言机:Uniswap V3提供了一种查询最近的价格累加器值的方法,从而避免了在计算TWAP的起始时间和结束时间检查累加器值的需要。
- 流动性预言机:合约能够显示时间加权平均流动性的预言。
Uniswap V3的无常损失计算相比V2要复杂一些。
上图是V2中的X token、Y token的变化曲线。这整条蓝色的线代表所有用户的流动性。
而在V3中,恒定乘积的公式为:
其中,L的平方是一个常数,相当于k。
和是虚拟出来的,是常数。
在V3中做市,相当于加了个杠杆,因为x余额加了一个数,y余额也加了一个数,所以会导致右边的会比原来的k大。如果选的价格区间的两个价格点比较近,杠杆就会比较高(因为更大),无常损失也会更大;如果两个加个点比较远,杠杆就会比较低。
下图是在UniSwap V3的ETH-USDT资金池中注入流动性的截图,可以看到如果我们设置的价格区间的最小值大于现在的价格,我们就只需要投入ETH。
相反,当我们设置的价格区间的最大值小于现在的价格,我们就只需要投入USDT。
Uniswap v3对Uniswap v2引入的时间加权平均价格(TWAP)预言机也进行了重大更改。
最重要的是,Uniswap v3消除了oracle用户从外部跟踪累加器先前值的需要。
Uniswap v2要求用户在想要计算TWAP的时候在其使用的时间段的开始和结束时检查累加器值。而Uniswap v3将累加器检查点引入核心,允许外部合约在最近一段时间内计算链上TWAP,而不存储累加器值的检查点。
另一个变化是,Uniswap v3没有累加价格之和来让用户计算算术平均TWAP,而是log price之和,允许用户计算几何平均TWAP。
最后,Uniswap v3添加了一个流动性累加器,它与价格累加器一起跟踪,价格累加器的值为每秒钟。这个流动性累加器对于希望在Uniswap v3之上实现流动性挖矿的外部合约非常有用。其他合约也可以使用它来判断哪个池对应的交易对有最可靠的TWAP。
除了时间加权平均价格,Uniswap V3 还在每个区块的开头,跟踪累计了当前的 值(在当前价格区间的虚拟流动性)。 链上其它合约使⽤它,可以使价格预⾔机更加健壮 (例如,在判断使⽤哪种⼿续费率的流动池作为价格预⾔机时)。流动性累加器的值和价格累加器同时存储。
在Uniswap V2中,每个流动池合约保存当前池中资产x和y。在V3中,合约可以被想象成在保存虚拟资产——x和y的值允许你用于描述合约的行为(在两个相邻tick之间),同样遵循固定乘积公式。
然而,不用于保存虚拟资产,流动性合约保存两个不同的值:liquidity(L)和sqrtPrice()。这两个值与虚拟资产x,y之间的关系,可以用下列公式表达:
反过来,这两个值也可以被用于计算虚拟资产x,y,如下:
用L和非常便利,是因为每次交易只有其中一个会发生变化。在一个tick内交易时,价格(即)变化;当越过一个tick,或者铸造或销毁流动性时,流动性L发生变化。这避免了如果保存虚拟资产,可能产生的一些舍入误差。
基于虚拟资产的流动性计算公式,类似于V2中,在获得手续费之前,基于实际资产初始化流动性ERC20 token数量的公式。某种角度看,流动性可以被认为是虚拟流动性token。
或者,流动性可以被认为是每单位变化,所对应的token1资产(无论是实际还是虚拟资产)数量变化:
我们保存,而不是P,使得交易计算时无需计算平方根。
全局状态tick()保存当前价格tick的下标,一个带符号整型数,代表当前tick(更具体的说,是低于当前价格最近的一个tick)。这是一种优化(也是避免对数计算精度问题的一种方法),因为在任何时候,都可以基于当前的sqrtPrice计算当前tick。具体而言,在任何时间点,下列等式都是成立的:
当前,已经有部分平台推出了基于Uniswap V3的工具或自动做市策略。
Visor:
Visor是NFT的一个另类应用,与DeFi深度结合。
Visor NFT 金库可以托管用户的个人 UniswapV3 的 LP NFT。Visor NFT 可以帮助用户管理全部的 LP 收益,可以聚合用户的多矿池挖矿收益。
项目方可以利用 Visor NFT,对用户存入的 LP 资产进行时间锁定,也可以作为一种挖矿策略。V3 的价格区间设置,让各 DeFi项目在分发代币时可以指定价格区间来分发奖励,比如高价值区间高奖励。Visor 将允许用户对其 LP NFT 进行质押,允许项目对这些特定价格区间的流动性提供者进行奖励。相比之下,基于 Chef 和 SNX 的两种最常见的奖励项目模式将不兼容 Uniswap LP NFT。
除了Visor,今年的7月3日,Yearn Finance创始人Andre Cronje也在推特上分享了一个在Uniswap上针对无常损失的现收现付制保护市场的原型,名为ProtectionMarket.sol。该合约指定了一个pERC20代币,其功能是一个独立的保险市场,用于保护无常损失,保费由供求关系决定。
相信未来会有更多基于Uniswap V3的合约或者平台出现,也会有更多的DEX转向V3的模式。