W4-1 UniswapV3分析
W4-1 UniswapV3分析
Uniswap V2的问题
Uniswap v3
通过集中式流动性提⾼资⾦利⽤率
- 价格通常两点之间波动(a点和b点)
- c 到 a, 消耗资⾦为 Yreal
- c 到 b, 消耗资⾦为 Xreal
- 若在 [a,b] 提供流动性,仅需提供Xreal Yreal
虚拟流动性
流动性聚合
管理流动性的变化量
设计原理
V2版本的Uniswap官方认为最大的痛点在于资金利用率(Capital Efficiency)太低,因此V3版本在解决这个的同时,带来了👇的改进:
- 可灵活选择价格区间提供流动性(增强流动性)
- 更好用的预言机
- range order 功能
- 灵活的费率
手续费
- 若统⼀价格区间:
- ⽤户⼿续费 fee = deltaL * (fee global/liquidity global)
- 交易⼿续费累加值更新
- feeGrowthGlobal + = deltafee/liquidity
- 有多个区间时,如何获得某个区间的交易⼿续费(单位LP⼿续费累计值)
- f(il,iu) = fg − fb(il) − fa(iu)
- 在(i,u)区间发⽣的交易⼿续费累加,但是外侧的⼿续费是不变的,只需要累加 fg
- 因此可以在tick上,加⼊feeGrowthOutside(fo) ,记录该 tick 外侧的⼿续费总量
预言机
- V2 合约中记录了 price0CumulativeLast, price0CumulativeLast ,但是需要外部更新保存,然后计算算术平均价格
- V3 使⽤ 跟踪价格的 tick
代码设计
- NonfungiblePositionManager:
- positions:获取仓位信息
- createAndInitializePoolIfNecessary: 创建 Pool 池
- mint: 新增流动性(发⾏NFT)
- increaseLiquidity、decreaseLiquidity: 添加、减少流动性
- collet: 收集⼿续费
- burn: 删除流动性
- SwapRouter
- exactInputSingle、exactOutputSingle : 单个交易对兑换
- exactInput、exactOutput : 可设置 path,对多个交易对兑换
- uniswapV3SwapCallback:swap 时进⾏回调,⽀付真正的 token
合约关系图
添加流动性
Swap
参考资料
This post is licensed under CC BY 4.0 by the author.