Uniswap_V3
如果说 Uniswap V2 是“自动售货机”,那么 Uniswap V3 就是“精密的做市引擎”
V3 的核心目标只有一个:解决 V2 资金利用率低下(Capital Inefficiency)的问题。它通过引入“集中流动性”的概念,让 DeFi 的资本效率在理论上提升了 4000 倍,但也让协议的复杂度呈指数级上升。
痛点:V2 的资金在“睡大觉”
![[图库/cfce436c98e87815657147da861fe1f1_MD5.jpg]]
先回顾 V2 的 $x \cdot y = k$ 曲线。那条曲线是无限长的。
这意味着,当你在 V2 提供流动性时,你的钱被均匀地铺在了从 $0 到 $ \infty$ 的所有价格区间上。
打个比方:
-
你往摊位上放了 100 斤苹果
-
但实际上,苹果价格只在 5-8 块钱之间波动
-
那些为"苹果 1 分钱"和"苹果 1 万块"准备的库存,永远用不上
-
结果:90% 的资金在睡大觉
这就像开了一家 24 小时便利店,但顾客只在早上 8-10 点来。剩下 22 个小时,店员和货物都在空转。
这就是 “资金利用率低下”。
解决方案:V3 的集中流动性
Uniswap V3 允许让 LP 自己选择在哪个价格区间提供流动性。
🏪 架构师类比:
V2 (盲目撒网): 你是个卖水的。你为了能卖给全世界,你沿着赤道把水摊开摆了一圈。结果大部分水都在海上和沙漠里没人买,只有城市里的那一点点卖出去了。
V3 (精准投放): 你看准了现在人们都在“纽约” (价格 $1900 - $2100),于是你把所有的水都堆在纽约。同样的本金,你在纽约的库存深度瞬间变成了原来的 4000 倍。
**这就叫“集中流动性”。官方数据:在某些交易对上,V3 的资金效率是 V2 的 4000 倍。
LP 变成 NFT:每个tick都有独一无二的"营业执照"
在 V2 里,所有人的仓位都是一样的(都是 0 到无穷大),所以可以用同质化的 ERC20 Token 来代表你的份额。你存 100,我存 100,我们的 Token 是一模一样的。
在 V3 里,每个人的策略都不同:
-
你做市区间:$1500 - $2500。
-
我做市区间:$2000 - $2010 (赌博式做市)。
-
这导致我们的“仓位”是独一无二的,无法互换。
所以,Uniswap V3 的 LP Token 必须是 NFT (ERC-721)。每张 NFT 上面刻着你的独特参数:Lower Tick, Upper Tick, Amount。
数学模型
Tick (价格刻度)
为了实现这个功能,V3 把连续的价格曲线切成了一片一片的,每一片叫做一个 Tick。
$$P(i) = 1.0001^i$$
-
$i$ 是 Tick 的索引(整数,可正可负)。
-
$P$ 是价格。 这意味着每一个 Tick 相比前一个 Tick 价格变动 0.01%(1 个基点)。LP 设置的流动性区间 $[P_{lower}, P_{upper}]$ 实际上就是选择两个 Tick 索引 $[i_{lower}, i_{upper}]$。
-
Tick: 一个离散的价格点(就像尺子上的刻度)。
-
区间 (Range): 你选择两个 Tick(比如 $1900 和 $2100),只在这个范围内充钱。
从金融视角看:
这就是传统金融里的 Order Book (订单薄) 逻辑。
-
我在 $1900 - $2100 只有流动性,意味着我其实是挂了一堆 “低吸高抛” 的网格交易单。
-
如果价格跌破 $1900,我的钱就全变成了 ETH(一路买下来抄底)。
-
如果价格涨破 $2100,我的钱就全变成了 USDT(一路卖上去止盈)。
-
一旦价格跑出这个区间,我就不再赚手续费了(我的资金处于“处于休眠/已成交”状态)。
真实储备 vs 虚拟储备 (Real vs Virtual Reserves)
在 V3 的特定区间内,哪怕你只投入了很少的钱,协议会通过数学映射,让这笔钱表现得像 V2 中拥有巨额资金一样。
-
虚拟储备 ($L$):这是参与 $x \cdot y = L^2$ 计算的数值,它比你实际拥有的钱大得多。、
-
真实储备:你在该区间实际锁定的 Token。 公式推导: 当价格 $P$ 处于区间 $[P_a, P_b]$ 内时,流动性 $L$ 的计算不再直接使用代币余额,而是反推: $$L = \frac{\Delta y}{\sqrt{P} - \sqrt{P_a}} = \Delta x \cdot \frac{\sqrt{P} \cdot \sqrt{P_b}}{\sqrt{P_b} - \sqrt{P}}$$ 这使得 V3 能够用少量的 真实资金 模拟出极深的 虚拟流动性,从而实现低滑点交易。
核心架构解析
V3 的架构比 V2 更为模块化,主要拆分为 Core(核心层) 和 Periphery(周边层)。
1. UniswapV3Factory (核心层)
与 V2 类似,Factory 负责部署 Pool 合约。
- 差异点:V2 中一对 Token 只有一个 Pool。V3 中,一对 Token 可以有多个 Pool,区别在于费率(Fee Tier)。
- 费率等级:V3 默认支持 0.05%, 0.3%, 1% 等不同费率,分别对应不同波动率的资产(如稳定币对用 0.05%,ETH/USDC 用 0.3%)。
2. UniswapV3Pool (核心层 - 真正的引擎)
这是极其底层的合约,保存了 TickBitmap、Positions 和 Tick 数据。
- Slot0:为了省 Gas,V3 将最热的数据(如
sqrtPriceX96,tick)打包在slot0结构体中,确保存取成本最低。 - 不持有 LP Token:V3 的 Pool 合约不再像 V2 那样本身是一个 ERC-20 合约。它不直接给用户发币,只记录底层数据。
3. NonfungiblePositionManager (周边层 - NFT 管理器)
这是 V3 最大的改变之一。
- LP 变成了 NFT:在 V2,大家的仓位都一样,所以发同质化代币(ERC-20)。在 V3,每个人的做市区间(Tick Lower, Tick Upper)都不同,仓位是独一无二的。因此,LP Token 必须是 NFT (ERC-721)。
- 功能:用户通过这个合约调用
mint(开仓)、increaseLiquidity(加仓)、decreaseLiquidity(减仓/撤资)和collect(收手续费)。
4. SwapRouter (周边层 - 交易路由)
和 V2 的 Router 类似,作为用户交易的入口。
- 多跳交易:支持
exactInput(指定卖出多少) 和exactOutput(指定买入多少),自动寻找最优路径。 - 回调机制:V3 的
swap函数使用了 Callback 机制。在交易时,Pool 会先乐观地把钱转给你,然后回调你的合约检查你是否付了钱。这让 Flash Loan(闪电贷) 功能天然集成在了每一次 Swap 中。
关键特性与实战场景
1. 范围订单 (Range Orders)
V3 的集中流动性本质上就是一种可逆的限价单。
- 场景:ETH 当前价格 2000。你在 2500-2600 区间提供 ETH 流动性。
- 效果:当价格涨穿 2600 时,你的 ETH 会被全部买走变成 USDC。如果你此时撤出流动性,就相当于你以 2550 的均价成功止盈卖出了 ETH。
2. 预言机升级 (Oracle)
- V2:算术平均价格 (Arithmetic Mean)。
- V3:几何平均价格 (Geometric Mean)。V3 在 Pool 内部内置了一个观测数组 (Observation Array),可以存储更长时间的历史价格数据,外部调用者不再需要自己存储历史价格,直接问 Pool 要即可。
3. 手续费计算 (Fees)
V2 的手续费是自动复投进池子的。V3 的手续费是不复投的。
- 手续费作为独立的
tokensOwed记录。 - 计算逻辑极其复杂,使用了
feeGrowthGlobal(全局费用增长)和feeGrowthOutside(区间外费用)的概念,通过 $Total - Outside_{lower} - Outside_{upper}$ 来计算区间内的有效费用增长。
V3 的痛点:规则太死板
V3 已经很强了,但还有一个问题:规则是写死的。
比如:
-
手续费只有 0.05%、0.3%、1% 三档,不能自定义
-
想加个"限价单"功能?不行
-
想根据市场波动自动调整策略?不行,仍然存在无偿损失问题
就像市场管理处规定太死板:所有摊位必须 8 点开门、6 点关门,不能搞促销、不能搞会员制。
能不能让每个池子都有自己的"特色规则"?
这就是 V4 要解决的问题。

浙公网安备 33010602011771号