Uniswap V3 —— 概述

Uniswap V3 于 2021 年 5 月上线,引入了**集中流动性(Concentrated Liquidity)**概念,彻底改变了 AMM 的设计范式,将资本效率提升了数百倍。

1. Uniswap V3 简介

1.1 设计目标

V3 的核心目标是解决 V2 的资本效率问题。在 V2 中,流动性均匀分布在 (0, ∞) 的价格范围内,但实际交易通常发生在很窄的价格区间,导致大量资金闲置。

1.2 V3 核心创新

创新点 说明
集中流动性 LP 可自定义价格范围
多费率层级 0.05% / 0.3% / 1%
NFT 头寸 每个头寸是独立的 NFT
改进的预言机 更高效的 TWAP 实现

2. 集中流动性

2.1 V2 vs V3 流动性分布

V2:流动性均匀分布在整个价格范围

1
2
3
4
5
6
7
流动性

│ ████████████████████████████████
│ ████████████████████████████████
│ ████████████████████████████████
└──────────────────────────────────► 价格
0 ∞

V3:流动性集中在自定义范围

1
2
3
4
5
6
7
8
流动性

│ ████████
│ ███████████████
│ ████████████████████
└──────────────────────────────────► 价格
1800 2000 2200
当前价格

2.2 资本效率对比

假设 ETH 价格为 2000 USDC,LP 想在 1500-2500 范围提供流动性:

版本 所需资金 有效流动性 资本效率
V2 $20,000 $20,000 1x
V3 $2,500 $20,000(等效) 8x

V3 用更少的资金实现相同的流动性深度

2.3 价格范围选择

LP 需要权衡:

1
2
3
4
5
6
7
8
9
┌─────────────────────────────────────────────────────────┐
│ 价格范围选择 │
├─────────────────────────────────────────────────────────┤
│ 窄范围 宽范围 │
│ ├── 高资本效率 ├── 低资本效率 │
│ ├── 高手续费收入(如果在范围内)├── 稳定的手续费收入 │
│ ├── 高无常损失风险 ├── 低无常损失风险 │
│ └── 需要频繁调整 └── 较少维护 │
└─────────────────────────────────────────────────────────┘

常见策略

  • 稳定币对:极窄范围(0.99 - 1.01)
  • 主流币对:当前价格 ±20-50%
  • 波动币对:宽范围或多头寸覆盖

3. Tick 机制

3.1 什么是 Tick

V3 将连续的价格空间离散化为 Tick,每个 Tick 代表一个价格点:

1
2
3
4
5
6
价格 = 1.0001^tick

tick = 0 → 价格 = 1
tick = 100 → 价格 ≈ 1.01
tick = 1000 → 价格 ≈ 1.105
tick = -1000 → 价格 ≈ 0.905

3.2 Tick 与价格范围

LP 设置的价格范围对应 [tickLower, tickUpper]

1
2
3
4
5
6
价格范围 [1500, 2500] USDC/ETH

tickLower = log₁.₀₀₀₁(1500) ≈ 73136
tickUpper = log₁.₀₀₀₁(2500) ≈ 78245

LP 的流动性仅在 tick ∈ [73136, 78245] 时激活

3.3 Tick 间距

不同费率对应不同的 Tick 间距,限制可用的 Tick 位置:

费率 Tick 间距 说明
0.05% (500) 10 适合稳定币,需要精细价格
0.30% (3000) 60 通用交易对
1.00% (10000) 200 长尾/波动资产
1
2
3
费率 0.3%,tick 间距 60:
有效 tick: ..., -120, -60, 0, 60, 120, ...
LP 只能选择这些 tick 作为边界

4. 多费率层级

4.1 费率选择

V3 支持为同一交易对创建多个不同费率的池子

1
2
3
4
ETH/USDC 可以有:
├── 0.05% 池(适合套利者、大额交易)
├── 0.30% 池(主流交易)
└── 1.00% 池(很少使用)

4.2 费率适用场景

费率 适用场景 示例
0.05% 稳定币、高度相关资产 USDC/USDT, stETH/ETH
0.30% 主流交易对 ETH/USDC, WBTC/ETH
1.00% 长尾资产、高波动 新发行代币

4.3 池子选择策略

交易者通常选择流动性最好的池子,而非费率最低的池子,因为滑点可能比手续费影响更大。

5. NFT 头寸

5.1 为什么使用 NFT

V2 中,所有 LP 的流动性范围相同(全范围),可以用同质化的 ERC-20 LP Token 表示。

V3 中,每个 LP 的价格范围不同,头寸不可互换,因此使用 ERC-721 NFT

1
2
3
4
5
6
7
8
9
10
11
12
13
V2 LP Token(ERC-20):
┌─────────────────────────────────────┐
│ Alice: 100 UNI-V2 │
│ Bob: 200 UNI-V2 │ 可互换
│ 所有人范围相同: (0, ∞) │
└─────────────────────────────────────┘

V3 头寸 NFT(ERC-721):
┌─────────────────────────────────────┐
│ NFT #1: Alice, [1800, 2200], 50 LP │
│ NFT #2: Bob, [1500, 2500], 100 LP │ 不可互换
│ NFT #3: Alice, [1900, 2100], 30 LP │
└─────────────────────────────────────┘

5.2 头寸属性

每个 NFT 头寸包含:

1
2
3
4
5
6
7
8
9
10
struct Position {
address token0; // 代币对
address token1;
uint24 fee; // 费率
int24 tickLower; // 价格下界
int24 tickUpper; // 价格上界
uint128 liquidity; // 流动性数量
uint256 tokensOwed0; // 待提取的 token0
uint256 tokensOwed1; // 待提取的 token1
}

5.3 头寸管理

V3 的头寸管理更加灵活:

  • 多头寸策略:同一 LP 可创建多个不同范围的头寸
  • 独立管理:每个头寸可独立添加/移除流动性
  • NFT 可转让:头寸可以在二级市场交易

6. V2 vs V3 对比

6.1 特性对比

特性 V2 V3
流动性范围 全范围 (0, ∞) 自定义 [tickLower, tickUpper]
资本效率 1x 最高 4000x
流动性凭证 ERC-20 LP Token ERC-721 NFT
费率 固定 0.3% 0.05% / 0.3% / 1%
无常损失 固定模式 范围越窄,无常损失越大
复杂度 简单 复杂,需要主动管理

6.2 收益对比

1
2
3
4
5
6
7
8
9
10
假设:ETH/USDC 池,24h 交易量 $10M

V2 LP(存入 $10,000):
手续费收入 = $10M × 0.3% × ($10,000 / $100M TVL)
= $30,000 × 0.01% = $3

V3 LP(存入 $10,000,范围 ±5%):
等效流动性 ≈ $200,000(20x 效率)
手续费收入 = $10M × 0.3% × ($200,000 / $100M TVL)
= $30,000 × 0.2% = $60

6.3 适用场景

场景 推荐版本 原因
被动投资 V2 无需管理
稳定币做市 V3 极高资本效率
专业做市 V3 精细策略控制
长尾资产 V2 简单,适合低流动性

7. 无常损失

7.1 V3 中的无常损失

V3 的集中流动性放大了无常损失:

1
2
3
范围 ±50%:无常损失 ≈ V2 的 2x
范围 ±20%:无常损失 ≈ V2 的 5x
范围 ±5%: 无常损失 ≈ V2 的 20x

7.2 范围外的情况

当价格移出 LP 的范围时:

  • 流动性停止赚取手续费
  • 头寸变成 100% 单一代币
1
2
3
4
5
6
7
8
9
10
设置范围:[1800, 2200] USDC/ETH
初始:50% ETH + 50% USDC

价格跌到 1800 以下:
→ 100% ETH,0% USDC
→ 不再赚取手续费

价格涨到 2200 以上:
→ 0% ETH,100% USDC
→ 不再赚取手续费

8. 价格预言机改进

8.1 V3 预言机特点

V3 的预言机相比 V2 更高效:

特性 V2 V3
存储 单个累积值 环形数组
历史查询 需外部存储 原生支持
Gas 成本 首次交易高 更均匀分摊

8.2 Observation 数组

V3 使用环形数组存储历史价格观察点:

1
2
3
4
5
6
struct Observation {
uint32 blockTimestamp;
int56 tickCumulative;
uint160 secondsPerLiquidityCumulativeX128;
bool initialized;
}

9. 总结

9.1 V3 优势

  • 资本效率:相同资金提供更深的流动性
  • 灵活性:自定义价格范围和费率
  • 精细控制:专业做市策略支持

9.2 V3 挑战

  • 复杂性:需要主动管理头寸
  • Gas 成本:操作比 V2 更贵
  • 无常损失:集中流动性放大损失风险

9.3 选择建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────────────────────────────────────────┐
│ 版本选择指南 │
├─────────────────────────────────────────────────────────┤
│ 选择 V2: │
│ ├── 希望被动投资,不想频繁管理 │
│ ├── 对资本效率要求不高 │
│ └── 长尾资产,价格波动难以预测 │
│ │
│ 选择 V3: │
│ ├── 追求高资本效率 │
│ ├── 愿意主动管理头寸 │
│ ├── 稳定币做市 │
│ └── 专业做市商 │
└─────────────────────────────────────────────────────────┘