Uniswap V3 升级概述

  • nilliol
  • 更新于 2024-06-23 16:36
  • 阅读 762

主要对升级点大致的介绍了下,产生的部分影响也描述了下

主要更新点

  1. 分不同价格区间提供流动性
  2. 提供多个收费层级
  3. 高级预言机

价格区间提供流动性

V3 采用了一种新的方式给用户进行流动性的区间选择提供:对于ETH/DAI池可以选择将 100 美元价值的代币分配给 1,000-2,000 美元的价格区间,并将另外 50 美元价值的代币分配给 1,500-1,750 美元的区间。

用户选择投入流动性到 1,000-2,000 美元的价格区间,那么只有价格在此范围内进行的交易产生的手续费,用户才有资格得到。因此用户需要选择交易最经常发生的价格区间才能获得最大的收益

如此做法带来了什么好处呢?最直接是资金的利用率提升了:过去 V2 中池子中有部分不合理的价格也被强制分配了一部分流动性(如 1 eth = 0.1$或者1 eth = 10^18$),这无疑是对池子的资金的浪费,V3 通过用户指定流动性提供区间,提高了这个利用率(如果用户非要选择离谱的区间那用户就没办法获得手续费,毕竟那些区间没有交易产生)。

采用这种区间的方法就需要修改一些原本 V2 的设计了:首先就是 LP token。

在 V2 中采用的是 ERC20 代币作为 LP token,因为所有流动性添加用户添加的流动性是等价的(大家都是在零到正无穷这个区间添加流动性)。而到了 V3 就很明显的不一样了:每个用户选择的区间并不一定一样(也可以一样,但这种情况应该少数,即使是某些池子中大多一样,那也不影响),所以它们获得 LP token 无法等价起来,故采用 ERC721 来记录流动性提供者投入的流动性,而这个 LP token 也被称为头寸

对于用户选择的区间和当前池子的价格之间的大小关系不同,有不同的投入要求(此处假设价格点连续):

  • 价格大于区间:假设此时:1Y = 10X,提供者选择的区间为:1:201:30,那么此时想添加流动性,就只能添加代币X。(可以理解为认为X币会跌/Y币会涨,设置一个订单,在此范围内逐渐卖出/买入代币,当然前提是超出你设置的区间后及时取回流动性,不然随着价格回来又会转换回来)
  • 价格在区间内:假设此时:1Y = 10X,提供者选择的区间为:1:51:20,那么此时想添加流动性,需要同时注入两种代币
  • 价格小于区间:假设此时:1Y = 10X,提供者选择的区间为:1:51:7,那么此时想添加流动性,就只能添加代币Y

其次的设计就是区间:区间的选择不能无限制,作为链上合约,实现不了这么复杂的事情。

V3 在价格这一射线上选择一系列不连续的价格点作为可以选择形成区间,这些价格点称为tick,以此来减少计算关于流动性的计算,然后还设置了tickspacing这一存在,要求两个tick之间存在tickspacingtick,而在 V3 中锁定唯一的代币对池子,需要通过:两种代币、tickspacing这三个参数。tick的大小是如何设置的呢?tick本身是一个等幂数列 $p_i= {1.0001}^i$ ,其 i 的取值有范围[-887272, 887272]。这使得在接0-1的时候能提供一个很密集的tick(很适合如稳定币对),远离 1 的时候能提供较分散的tick给价格波动大的兑换合约(如两个山寨币对)。

多收费层级

V3 新增的多收费层级就是指不同档次的手续费,V2 中所有代币对合约的手续费统一0.3%,这对于某些合约(稳定币对合约)收费太高,某些合约(山寨币对合约)收费低了些(币价波动大,很容易贬值)。V3 就因此设置了不同的手续费档次。

不同的收费层级通过前面所讲的tickspacing结合决定:手续费低,则币价相对稳定,tickspacing小;反之手续费高,币价波动大,tickspacing大。具体设置如下:

费率 tickspacing 建议的使用范围
0.05% 10 稳定币交易对
0.3% 60 适用大多数交易对
1% 200 波动极大的交易对

在 V3 合约实现的时候为tickspacing扩充留下了代码,可以后续添加。

高级预言机

V3 中提出一个新的计算平均价格的方法,与V2 的预言机有所不同,但总体思路还是相近的。

在 V3 中tick的计算为$pi= {1.0001}^i$,所以$i = \log {1.0001} p_i$

V3 中计算的不再是价格累积值而是tick累积值,所以$aj = a{j-1} + \Delta t * i$,其中 i 就是上面tick中指代的那个 i 。当我们计算平均价格时

$$ P{t1,t2} = \frac{a{t2} - a{t1}}{t2 - t1} = \frac{\sum{i =t1}^{t2}\log_{1.0001}Pi}{t2 - t1}=\log{1.0001}{(\Pi _{i = t2}^{t_2} P_i)^{\frac{1}{t2 - t1}}} $$

最后面那一步转换便称为价格 的几何平均值形式(数学不好,没能理解这个转换)。剩下的计算和 V2 也很相似了

参考文章:

Uniswap v3 详解(五):Oracle 预言机

Understand UniswapV3 whitepaper

  • 原创
  • 学分: 15
  • 分类: Uniswap
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
nilliol
nilliol
0xbe3e...29A9
web3 的学习者,寻找实习机会中。 博客地址:https://llwh2333.github.io