type
status
date
slug
summary
tags
category
icon
password
 

Uniswap V3

Uniswap V3 的改进

  1. 提高资金利用率(集中流动性,即只针对某一个范围做流动性,而不是从无穷小到无穷大都做流动性),增加 LP 深度
  1. 增强价格预言机的方便性和准确性
  1. 灵活的手续费收取机制(0.05% / 0.3% / 1%)

Uniswap V2 的资金利用率

notion image
在 V2 中,当我们想要做流动性时需要添加 x 和 y 数量的代币才能实现,但实际参与点到池子流动性的代币数量只有 ,除去这两个部分的资金部分一直都没有被使用到,因此在 V2 当中资金利用率不算很高
示例
notion image
假设当前处于 c 点的位置,x 表示 ETH,y 表示 DAI,两者的价格在 a 到 b 的范围内波动,在 V2 当中我们需要在 c 点投入 10 ETH 和 200 DAI,而在 V3 当中我们只需要在 c 点投入 数量即 5 ETH 和 100 DAI,此时资金的利用率翻了一倍

流动性提供的方式

notion image
在 V2 中提供流动性是可以从 0 到无穷进行提供,但代币的价格从 0 到无穷大的范围内波动的概率很低,一般只会在一个小的范围内波动。所以 V3 允许用户只在某一个小范围区间提供流动性,如图Ⅱ。当多个用户都在自己设定的小范围区间提供流动性时,系统的流动性会变成图Ⅲ

提供 LP 作为限价订单

我们可以像在中心化交易所那样通过做 LP 来做限价订单,区别在于中心化交易所的限价订单的价格是固定的,而 Uniswap 则需要你提供一个小范围
还是以前面的图为例,比如当前 ETH 价格在 c 点,我们预测 ETH 会跌即向 a 点移动,此时我们只需要提供 数量的 DAI,而不用提供 数量的 ETH。当 ETH 跌到超过 a 点的位置,我们投入的 DAI 便会全部换成 ETH,但如果 ETH 的价格又回到了超过了 a 点的位置,那么我们手里的 ETH 会全部换回 DAI

应用场景

  • 稳定币的兑换(0.99 — 1.01)
  • Interest-bearing ASSET:xSushi/Sushi 等
  • 固定收益债券
  • IDO
  • 保险

影响

  • 波动比例大,我们在 Uniswap V3 中提供的 x 和 y 都比较小,所以波动比例大)
  • 无常损失高
  • LP 挖矿实现机制的更改
  • 手续费计算复杂
  • LP Token:ERC20 → ERC721

Virtual Reserves

notion image
notion image
Virtual Reserves 其实就是前面我们所提到的在 V2 当中没有被利用到的资金量即
由上图我们可以推导出
给定 a,b,L 的情况下,求 ,此时我们已经得知
在 b 点,其为范围的上限,此时 ,所以
在 a 点,其为范围的下限,此时 ,所以
代入 (6) 可得
根据最后得出的公式,我们可以得到下面的图:
notion image

虚拟流动性案例分析

notion image
notion image
注意:因为 是使用 来计算的,所以 的单位应该是 DAI / ETH 即一个 ETH 等于多少 DAI
当前价格在 c 点,求
在 c 点, 的时候,求
在 b 点, 的时候,求
在 a 点, 的时候,求
如果降到 a 点,移除流动性,会得到多少 x 和 y?
在 a 点 ,相当于以均价 的价格把 6000 个 DAI 换成了 1.5 个 ETH,如果缩小 a,b 点的距离,一定程度上起到了限价订单的作用
假设当前市价为 c 点,用户在超过 a 点或 b 点的位置添加流动性时,只需要添加其中一种代币而不需要同时添加两种代币(具体原因会在后面进行分析)
  • 在超过 a 点的位置表示当前 ETH 价格降低,此时用户只需要投入 DAI。这里我们可以理解为用户预估 ETH 价格会跌,所以想要在超过 a 点的位置做流动性,当 ETH 价格到达该位置时,用户之前所投入的 DAI 将会自动换成 ETH,也就是所谓的“低吸”
  • 在超过 b 点的位置表示当前 ETH 价格增加,此时用户只需要投入 ETH。这里我们可以理解为用户预估 ETH 价格会涨,所以想要在超过 b 点的位置做流动性,当 ETH 价格到达该位置时,用户之前所投入的 ETH 将会自动换成 DAI,也就是所谓的“高抛”
notion image

不同价格区间,流动性 L 和 的关系

在 Uniswap V2 中,如果想在 c 点添加流动性,需要提供 。在 Uniswap V3 中,同样的流动性曲线,只需要真实提供 ,便可以在 a,b 点之间达到同样的 k 值 。如果在 V3 中,真实提供 。那么 k 值 会如何变化呢?
notion image
注:图中的 是 a 点和 b 点减去 Virtual Reserves 的结果
  1. 如果在价格 时,提供流动性,k 值(L 值会如何变化?)
时,
故两者关系为:当 变大,L 也变大
notion image
  1. 如果在价格 时,提供流动性,k 值(L 值会如何变化?)
时,
故两者关系为:当 变大,L 也变大
notion image
  1. 时,提供流动性,k 值(L 值会如何变化?)
当 P 处于 之间的任意一点, 对于维护 之间的流动性贡献是一样的(因为他们处于同一条曲线,故两者流动性相同)
notion image
先计算 价格之间,单纯由 贡献的流动性
再计算 价格之间,单纯由 贡献的流动性
所以
案例解析(以虚拟流动性案例分析中的例子为例)
  1. 时,
  1. 时,
  1. 时,
因此,我们回到最开始的那个问题
如果在 V3 中,真实提供 。那么 k 值 会如何变化呢?
即在 的情况下,求 L

Uniswap V3 无常损失的计算

notion image
仍然以图中的这个数据来进行举例计算,分别计算当用户在 c 点添加 的流动性且价格从 c 点变到 a 点时 V2,V3 中的无常损失
在 Uniswap V2 中
在 Uniswap V3 中,因为 V3 多了一个 Virtual Reserves 及其曲线与 V2 也有差异,在 V2 添加的流动性数量同样添加到 V3 中会有更大的影响,因此我们必需先计算出该 V3 曲线的 ,再去反推某个点上的 ,最后才进行价格的计算
在 c 点 ,先求
由此可得实际曲线为:
notion image
在 a 点
由此我们可以看出,Uniswap V3 的无常损失更大
我们再将其抽象为更通用的模型:
notion image
前提条件
  1. 假设起始价格 ,变化后的价格 都满足 ,求此时的无常损失(无手续费)
的时候
同时在前面我们还计算得到
通过上面的这些公式,我们可以计算出
  1. 其他条件不变,假设变化后的价格 ,计算无常损失
时, 为 0
  1. 其他条件不变,假设变化后的价格 ,计算无常损失
时, 为 0
由 (1) 我们可以得知,当 趋向于 0, 趋向于 的时候
从这看出其与 V2 的公式相同,即说明 V3 的公式推导正确
在这我们说回前面所提到的问题
假设当前市价为 c 点,用户在超过 a 点或 b 点的位置添加流动性时,只需要添加其中一种代币而不需要同时添加两种代币
notion image
V3 与 V2 最大的不同是引进了集中流动性并带来了 Virtual Reserves,当我们在上面的曲线添加流动性时必须要用减去 的值之后的曲线再进行计算。否则在原来的曲线进行计算,即使在超过 a 点或 b 点的位置添加流动性,其结果仍会是两种代币都需要添加;而使用减去 值之后的曲线进行计算则可以得到正确的结果,因为当处于超过 a 点或 b 点的位置, 总会有一个超出范围而变为 0(如下两图),即只需要添加一种代币即可
notion image
notion image
同时我们需要的注意的是,当我们是在下图的情况下(市价在 c 点,想要在 d 点到 e 点添加流动性)时,其仍需同时添加两种代币。因为本质上其仍处于 的范围之内
notion image

Staking Rewards

这是一个关于用户抵押资金,在一段时间之后取回本金并计算可以拿到多少奖励的算法
notion image
由此引出了相应的数学公式:
notion image
使用上面的公式进行计算时,有时候不利于开发者编写代码(一是在最后统一进行计算需要对每个用户进行轮询计算,代码难以实现;二是这么做 gas 费会很高),因此对上面公式的表达进行了修改即计算 k 到 n-1 秒的奖励从原先的直接计算改为通过计算从 0 到 n-1 秒的奖励减去 从 0 到 k 秒的奖励:
notion image
示例:
只有一个用户质押
notion image
有两个用户质押,并且中途有用户进行提款操作
notion image
多个用户参与质押与提款
notion image
算法设计
notion image
最后,这部分的材料来源:Staking Rewards - Intro | DeFi - YouTube
再补充一个个人认为比较好的相关材料:流动性挖矿-合约原理详解 — xyyme.eth

去中心化金融笔记(四)—— 主流 DeFi 协议详解去中心化金融笔记(二)—— Uniswap V2 详解
Howe
Howe
Web3 buidler and researcher | Everything is possible!
公告
type
status
date
slug
summary
tags
category
icon
password
🎉欢迎您的到来🎉
我是Howe,Web3爱好者与建设者,让我们一起交流学习
欢迎关注我的推特一起交流学习,DM Open: cryptoHowe.eth