我的 Uniswap V3 学习笔记

欢迎大家来参加技能进阶挑战!

在本帖下用回复的方式上传你的学习笔记完成打卡 :partying_face:

Uniswap V3 是 AMM 的“专业化版本”,核心在资本效率 + 灵活性。它从“被动池”升级为“主动做市商平台”,让 LP 更像专业交易员。理解 V3 的精髓,不仅要会公式,还要会管理 LP 策略。

一、V3 的核心创新
1.集中流动性 (Concentrated Liquidity)
在 V2 中,流动性在价格曲线上是 0 → ∞ 的全区间。
在 V3 中,LP 可以选择一个 价格区间 提供流动性,只在该区间内赚取手续费。
优势:资本效率提升最高可达 4000 倍
LP 更像 主动做市商 (Active Liquidity Provider)
2.价格刻度与 Tick
价格不再是连续曲线,而是离散的 “tick” 点。
LP 选择区间时,资金被分配到对应的 tick 范围。
3.多费率池 (Multiple Fee Tiers)**
V3 允许每个交易对有不同的费率池:0.05%、0.3%、1%。
适应不同波动性资产:
稳定币 → 低费率
山寨币 → 高费率
4.改进的预言机 (TWAP)
内置时间加权平均价格 (Time-Weighted Average Price)。
安全性比 V2 强,可被其他 DeFi 协议直接调用。

二. 合约架构

Factory 合约:创建新的池 (Pool)
Pool 合约:管理某一对 Token 的流动性与交易逻辑
NFT Position Manager:每个流动性提供者的头寸 (Position) 被表示为 NFT(因为区间不同,不能再用同质化的 LP Token 表示)
Router:执行 Swap 与多池路径交易

三. LP 机制与无常损失

V2:LP 被动覆盖全区间,风险较低但资本效率低。
V3:LP 可以选择 1.01 ~ 1.05 这样的窄区间,手续费收益更高,但如果价格脱离区间,LP 资金将 变成单一资产。
无常损失 (IL):在 V3 中更复杂,因为与区间选择强相关。

四. 高级功能

范围订单 (Range Orders):LP 在特定区间提供单边流动性,本质上类似 限价单
闪电交换:延续 V2 的设计,允许先取代币后偿还。
套利与聚合:由于多费率池与区间流动性,套利机会更多,聚合器(如 1inch、Matcha)会选择最优路径。

五. 优缺点

1.优点
资本效率显著提升
LP 收益空间更大
灵活的费率机制
更安全的预言机

2.缺点

LP 管理复杂度增加,需要主动调整
普通用户难以掌握最佳区间
资金可能因为价格突破区间而闲置

Uniswap V3

新特性

  1. 集中流动性 Concentrated Liquidity

流动性提供者(LP)被赋予在任意价格区间集中流动性的能力,将提高池子的资金利用率,并允许 LP 估算认可的价格曲线。超出范围的部分,增加无常损失(Impermanent Loss, IL)风险。

范围内恒定乘积:在 $[P_a, P_b]$ 区间内,流动性(L)是恒定的:$L=\sqrt{x\times y}$

无常损失:$IL = \frac{2 \cdot \sqrt{\frac{P_{\text{current}}}{P_{\text{initial}}}}}{1 + \frac{P_{\text{current}}}{P_{\text{initial}}}} - 1$

  1. 多池交易对 Multiple Pools Per Pair

V3 为每个交易对引入了多个池子,允许分别设置不同的交易手续费。所有池子都使用相同的工厂合约创建,默认允许:0.01%, 0.05%, 0.3% 和 1%。流动性分配在离散的“ticks”中,使得 Uniswap 可以同时兼备 AMM 和中心化交易所的好处。

  1. 不可互换的流动性 Non-Fungible Liquidity
  • 非复利的手续费。由于头寸的不可互换性,复利将不再可能。手续费将独立保存,且以支付手续费的代币形式持有。V2 流动性可视为 ERC-20 代币,而 V3 流动性可视为 NFT,用 ERC-721 表示。

  • 移除原生流动性代币。任何人都可以创建 periphery ERC-20 合约使得流动性头寸变得更可互换,但需要额外的逻辑处理手续费的收发或再投资。

  • 通过 NonfungiblePositionManager 管理

  1. 价格预言机升级 Price Oracle Upgrades
  • 无需预言机用户在外部记录历史累计价格,将累计检查点放到 core 合约中,允许外部合约直接计算最近时间的链上 TWAP。

  • 记录 log 价格之和计算几何平均数 TWAP,这样受极端值的影响更小,并且无需为每种代币记录单独的累计价格。

  • 增加了流动性累计数 secondsPerLiquidityCumulative,每秒累计 $\frac{1}{L}$​,对于那些基于 Uniswap V3 实现流动性挖矿的外部合约很有用,可以被其他合约用于判断一个交易对的哪些池子具有最可信的 TWAP。

繼前面看完 Uniswap V2 後,我也花時間研究了下 V3,他給我的感覺是它在設計上更聰明、更彈性,但同時對 LP 的要求也更高;以下是一些筆記跟心得,分享給有興趣的人~

最大的亮點:集中流動性

在 V2 裡,LP 把資金放進去,其實是全價位範圍都能被交易用到。這代表如果 ETH 從 1 美元漲到 10000 美元,LP 的流動性理論上都在「支撐」這整個價格區間。

而 V3 改變了這個邏輯,讓 LP 可以指定我只想在某個價格範圍內提供流動性
舉例:假設我覺得 ETH/USDC 會在 2000~3000 美金之間震盪,我就只把流動性集中在這個範圍。

  • 好處:資金利用效率更高,賺到的手續費也會比 V2 多好幾倍。
  • 壞處:一旦價格超出範圍,我的資金就變成「單邊持有」,不會再賺到手續費。

我覺得這個設計很像「做市商自己設定止盈止損區間」,比 V2 靈活很多,但同時 LP 需要更多判斷力。

不同手續費等級

V2 時期,手續費就是固定 0.3%。
V3 提供了不同的 Fee Tier:0.05%、0.3%、1%。

  • 穩定幣對(像 USDC/DAI)通常用 0.05%,因為幾乎不會大幅波動,滑點低。
  • 較高風險的對(像 ETH/某小幣)可能會用 1%,補償 LP 的風險。

這樣的設計讓 LP 可以自己選擇風險報酬比,感覺更市場化。

LP 的挑戰

V2 的 LP 很「被動」,放著就行。
V3 的 LP 幾乎變成「主動投資人」:

  • 要判斷價格區間
  • 要隨時調整流動性 (Rebalance)
  • 可能面臨 Gas 成本過高的問題

我覺得這是 V3 最不新手友善的地方,如果只是想被動賺手續費,V3 反而不如 V2;但如果願意花心思研究策略,那 V3 的優勢非常明顯。

感想

學完 V3,我最大的感覺是:

  • 它已經不只是 AMM 了,而更像是「AMM + 主動管理策略的混合」。
  • LP 在 V3 扮演的角色比較像傳統金融裡的做市商,需要懂行情,才能玩得好。
  • 對交易者來說,V3 基本上就是更低滑點、更便宜的體驗。

一、核心创新:集中流动性(Concentrated Liquidity)

价格区间定制

流动性提供者(LP)可将资金限制在特定价格区间(如 ETH/USDC 在 1800−1800−2200),而非 V2 的「0 到无穷大」范围

作用机制:仅当市场价格处于设定区间时,该流动性才参与交易并赚取手续费;区间外的流动性处于闲置状态

优势:大幅提升资金效率。相同资金在活跃价格区间内可捕获更多交易手续费,最高达 V2 的 4000 倍

Tick 离散化定价模型

价格区间被拆解为离散化的 tick,每个 tick 对应一个精确价格点,公式为:
Price=1.0001tickPrice=1.0001tick
相邻 tick 的价差固定为 0.01% ,提供高精度价格锚定36。

例如:tick=0 时价格为 1,tick=1 时为 1.0001,tick=-1 时为 0.9999

二、技术实现与合约架构

LP Token NFT 化

流动性头寸转为 ERC-721 非同质化代币(NFT),由 NonfungiblePositionManager 合约管理

每张 NFT 记录:代币对、价格区间、流动性数量、手续费累积数据等。

多层合约架构

核心合约(v3-core) :

UniswapV3Factory.sol :部署并管理交易池,支持同一代币对创建多个费率池(如 0.05%、0.3%、1%)

UniswapV3Pool.sol :核心逻辑合约,实现 swap、mint(添加流动性)、burn(移除流动性)及价格计算

价格存储革新:当前价格以 sqrtPriceX96 存储(即 ��×296P​×296),通过 slot0() 读取

外围合约(v3-periphery) :

NonfungiblePositionManager.sol :管理 NFT 头寸的生命周期(创建、增/减流动性、销毁)

回调模式(Callback) :mint 或 swap 操作后,池子主动回调调用者合约以索取代币,防止欠款

三、关键机制与优化

费用分级与动态分配

LP 可选择 0.05% (稳定币对)、0.3% (主流币对)或 1% (高波动资产)三级费率,匹配不同风险手续费按流动性在有效价格区间内的占比分配,价格波动可能使 LP 退出收益区间

预言机升级(TWAP 2.0)

继承 V2 的时间加权平均价格(TWAP),但基于 tick 系统实现更高精度,有效防御闪电贷操纵

闪电清算与套利工具

支持闪电贷:在同一交易内无抵押借出代币,需归还本金 + 0.09% 手续费,否则回滚

四、对比 V2:优势与挑战

维度 Uniswap V2 Uniswap V3
资金效率 低(流动性分布全价格区间) 极高(集中活跃区间)
LP 操作复杂度 简单(存入即赚费) 复杂(需主动管理价格区间)
滑点控制 大额交易滑点高 同资金下滑点显著降低
无常损失风险 被动承担全区间波动 可规避区间外风险,但区间内更敏感

:warning: 风险提示:若价格超出 LP 设定区间,流动性失效且无法赚取手续费,需主动调整头寸

Uniswap V3 通过集中流动性和可编程头寸重构了 AMM 模型,其核心价值在于:

:white_check_mark: 资本效率跃升:激活「沉睡流动性」,释放 DeFi 资金潜力

:white_check_mark: 风险精细化控制:LP 可定制风险敞口,专业投资者获得策略工具

:white_check_mark: 基础设施升级:TWAP 预言机、多费率池、NFT 化头寸成为行业新标准

Uniswap V3 学习笔记

一、Uniswap V3 核心定位

Uniswap V3 是自动化做市商(AMM)的 “专业化版本”,核心聚焦资本效率提升操作灵活性增强。它从 V2 的 “被动流动性池” 升级为 “主动做市商平台”,让流动性提供者(LP)更接近专业交易员的角色 —— 不仅需要理解底层公式,更需主动制定和管理流动性策略,是 DeFi 领域 AMM 模型的重要进阶形态。

二、核心创新:重构 AMM 底层逻辑

(一)集中流动性(Concentrated Liquidity)

集中流动性是 Uniswap V3 最核心的突破,彻底改变了 V2 中流动性 “全区间分散” 的模式:

  1. 核心逻辑:LP 可自主选择任意价格区间(如 ETH/USDC 的 1800-2200 美元)投放流动性,仅当市场价格处于该区间时,资金才参与交易并赚取手续费;价格超出区间后,流动性将转为单一资产(如 ETH 价格跌破 1800 美元,LP 资金全变为 ETH),且无法再获取手续费。
  2. 数学模型:在设定的价格区间 ([P_a, P_b]) 内,流动性(L)保持恒定,公式为 (L=\sqrt{x\times y})(区别于 V2 全区间的 (x\times y=k)),确保区间内定价稳定且资本利用率最大化。
  3. 核心优势:资本效率最高可提升至 V2 的 4000 倍 —— 相同资金在活跃价格区间内,能捕获更多交易手续费,收益潜力显著增加。
  4. 风险关联:区间选择与无常损失(IL)强绑定,窄区间(如 1.01-1.05)虽手续费收益更高,但价格突破区间的概率更大,无常损失风险也随之上升。无常损失计算公式为:(IL = \frac{2 \cdot \sqrt{\frac{P_{\text{current}}}{P_{\text{initial}}}}}{1 + \frac{P_{\text{current}}}{P_{\text{initial}}}} - 1)

(二)价格刻度与 Tick 离散化定价

为适配集中流动性,V3 放弃了 V2 的 “连续价格曲线”,采用离散化 Tick 定价模型

  1. Tick 定义:每个 Tick 对应一个精确价格点,相邻 Tick 的价差固定为 0.01%,公式为 (Price=1.0001^{\text{tick}})。
  • 例:tick=0 时价格为 1(如 USDC/DAI=1);tick=1 时价格为 1.0001;tick=-1 时价格为 0.9999。
  1. 作用:LP 选择价格区间时,资金会被自动分配到对应的 Tick 范围,确保交易定价精准且流动性管理高效,同时为预言机提供更可靠的价格数据基础。

(三)多费率池(Multiple Fee Tiers)

V3 为同一交易对引入多个费率池,解决了 V2 固定 0.3% 手续费无法适配不同风险资产的问题:

  1. 默认费率等级:0.05%、0.3%、1%,LP 可根据资产波动性选择对应池子:
  • 低波动资产(如稳定币对 USDC/DAI):选 0.05% 费率,吸引高频小额交易;
  • 中波动资产(如主流币对 ETH/WBTC):选 0.3% 费率,平衡收益与流动性;
  • 高波动资产(如山寨币对 ETH/XYZ):选 1% 费率,补偿 LP 承担的高无常损失风险。
  1. 优势:实现 “风险与收益匹配”,让费率机制更市场化,同时为交易者和聚合器提供更多最优路径选择。

(四)预言机升级(TWAP 2.0)

在 V2 时间加权平均价格(TWAP)基础上,V3 对预言机进行了安全性与实用性优化:

  1. 核心改进
  • 将价格累计检查点直接存储在核心合约(UniswapV3Pool.sol)中,外部 DeFi 协议可直接调用,无需额外记录历史数据;
  • 采用 “log 价格之和” 计算几何平均数 TWAP,大幅降低极端价格对平均价的影响,抗操纵能力更强;
  • 新增流动性累计数 secondsPerLiquidityCumulative(每秒累计 (\frac{1}{L})),可帮助外部合约判断交易对中哪些池子的 TWAP 更可信(适用于流动性挖矿等场景)。
  1. 价值:成为 DeFi 生态中更可靠的 “价格基础设施”,被 Aave、Compound 等借贷协议广泛用于抵押品定价。

三、合约架构:模块化与 NFT 化重构

Uniswap V3 延续模块化设计,但核心合约功能与 V2 差异显著,尤其引入 NFT 管理流动性头寸:

合约模块 核心功能
UniswapV3Factory.sol(核心合约) 部署并管理所有交易池(Pool),支持为同一代币对创建多个费率池(如 0.05%、1%)。
UniswapV3Pool.sol(核心合约) 每个交易对的核心逻辑合约,负责实现 swap(兑换)、mint(添加流动性)、burn(移除流动性),并存储当前价格(以 sqrtPriceX96 格式,即 (\sqrt{P} \times 2^{96}))。
NonfungiblePositionManager.sol(外围合约) 管理 LP 流动性头寸的生命周期(创建、增减流动性、销毁),将每个头寸封装为 ERC-721 NFT(因 LP 选择的价格区间不同,头寸无法用 V2 同质化的 LP Token 表示)。
Router.sol(外围合约) 简化用户交互,支持代币兑换(swap)、多池路径交易(如 ETH→USDC→DAI),自动匹配最优费率池。
Callback 机制 用于 mint 或 swap 操作后,池子主动回调调用者合约索取代币,防止用户欠款,保障资金安全。

四、LP 机制:从 “被动躺赚” 到 “主动管理”

V3 彻底改变了 LP 的角色定位,操作复杂度与收益潜力同步提升,核心差异对比 V2 如下:

维度 Uniswap V2 Uniswap V3
流动性范围 全区间(0→∞),被动参与所有价格交易 自定义区间(如 2000-3000 美元),仅区间内生效
资本效率 低(大量资金闲置在非活跃价格区间) 极高(资金集中在活跃区间,收益密度高)
操作复杂度 简单(存入两种代币即可,无需后续管理) 复杂(需判断价格区间、主动调仓 rebalance)
无常损失风险 被动承担全区间波动,风险均匀但不可规避 区间内风险敏感,区间外资金变单一资产(风险集中)
收益模式 固定 0.3% 手续费分成,收益稳定但上限低 多费率选择,窄区间手续费收益可达 V2 的数倍
头寸凭证 ERC-20 同质化 LP Token ERC-721 非同质化 NFT(每个头寸唯一)

关键风险提示

  • 若价格突破 LP 设定的区间,流动性将 “失效”:例如 LP 为 ETH/USDC 设定 2000-3000 美元区间,当 ETH 涨至 3500 美元时,LP 资金全变为 USDC,无法再赚取手续费,需手动调整区间才能重新激活。
  • Gas 成本高:频繁调仓(rebalance)会产生大量 Gas 费用,可能侵蚀部分手续费收益,需 LP 权衡调仓频率与成本。

五、高级功能:拓展 AMM 应用场景

(一)范围订单(Range Orders)

LP 在特定区间提供单边流动性(如仅存入 USDC,设定 ETH 跌至 1800 美元时参与交易),本质上等同于 “去中心化限价单”:

  • 当市场价格触及设定区间时,单边流动性自动参与交易,实现 “低价买入” 或 “高价卖出” 的效果,无需像中心化交易所那样挂单等待成交。

(二)闪电交换(Flash Swaps)

延续 V2 设计,允许用户在同一交易内无抵押借出代币:

  • 流程:先从池子中 “借” 出目标代币→用于套利、清算等操作→交易结束前归还本金 + 0.09% 手续费,若未按时归还,整个交易将回滚,保障池子资金安全。

(三)套利与聚合生态

由于多费率池与离散化流动性的存在,V3 中套利机会更多:

  • 聚合器(如 1inch、Matcha)可自动筛选不同费率池、不同价格区间的流动性,为交易者提供 “最低滑点、最低手续费” 的最优交易路径,进一步提升 V3 的生态实用性。

六、优缺点总结

(一)核心优势

  1. 资本效率跃升:集中流动性让资金从 “闲置” 变为 “高效创收”,相同资金的手续费收益大幅超越 V2;
  2. 策略灵活性高:多费率池、自定义区间、范围订单等功能,让 LP 可根据行情制定个性化策略(如高风险高收益、低风险稳健型);
  3. 基础设施完善:升级后的 TWAP 预言机成为 DeFi 生态核心组件,NFT 化头寸也为流动性的 “可组合性”(如抵押 NFT 借贷)奠定基础;
  4. 交易者体验优化:低滑点(集中流动性降低大额交易冲击)、多费率选择,吸引更多高频交易与大额资金入场。

(二)主要缺点

  1. LP 门槛高:普通用户难以精准判断价格区间,也缺乏时间频繁调仓,容易因区间选择失误导致收益亏损或资金闲置;
  2. 无常损失更复杂:区间外的 “单一资产风险” 比 V2 的全区间波动更难把控,对 LP 的风险承受能力与行情判断能力要求更高;
  3. 生态碎片化:同一交易对的多费率池可能分散流动性(如 ETH/USDC 同时有 0.05%、0.3%、1% 三个池子),需依赖聚合器整合才能发挥最大效率。

七、学习感想

  1. V3 的本质是 “AMM + 主动管理”:它不再是 V2 那样 “傻瓜式” 的被动做市工具,而是更偏向 “专业化交易平台”——LP 需像传统金融做市商一样,懂行情、会策略、能调仓,才能真正享受高收益;
  2. 生态价值大于技术突破:集中流动性、NFT 头寸等设计,不仅提升了资本效率,更推动了 DeFi 生态的 “模块化整合”(如 NFT 抵押、预言机应用),成为后续 AMM 协议(如 Curve V2、Balancer V2)的重要参考;
  3. 用户分层明显:V3 更适合专业投资者或机构 LP(有能力制定策略、承担高风险),普通用户若想参与,建议通过流动性聚合工具(如 TokenSets、Ribbon Finance)间接入场,降低操作复杂度。

八、核心价值总结

Uniswap V3 对 DeFi 的核心贡献在于:

  • :white_check_mark: 重构资本效率:激活 “沉睡流动性”,释放 DeFi 资金潜力;
  • :white_check_mark: 精细化风险控制:让 LP 可自主定制风险敞口,实现 “风险与收益匹配”;
  • :white_check_mark: 树立行业标准:多费率池、TWAP 2.0、NFT 头寸成为 AMM 协议的主流设计方向,推动 DeFi 从 “野蛮生长” 走向 “专业化发展”。

Uniswap V3 核心要点笔记 – 简短版

一、Uniswap V3 是什么及其核心定位

Uniswap V3 是一个为专业用户打造的高级自动化做市商(AMM)。它的核心定位是最大化资本效率,将流动性提供者(LP)的角色从 V2 的“被动储户”转变为需要主动制定和管理策略的“主动做市商”。它不再是一个“一劳永逸”的工具,而是一个要求更高、收益潜力也更大的专业化平台。

二、核心创新

  1. 集中流动性 (Concentrated Liquidity)
    • 机制:允许 LP 将资金集中在自定义的价格区间内,而不是像 V2 那样均匀分布在 (0, ∞) 的整个价格曲线上。
    • 影响:资金仅在活跃价格区间内赚取手续费,资本效率相比 V2 最高可提升 4000 倍。但一旦价格移出所选区间,LP 的资金将停止赚取收益,需要主动调仓。
  2. 多费率池 (Multiple Fee Tiers)
    • 机制:为同一个交易对提供多个手续费等级的资金池(通常为 0.05%0.3%1%)。
    • 影响:实现了风险与收益的精准匹配。LP 可以根据资产的波动性选择合适的费率池(例如,稳定币对选择 0.05%,高风险山寨币对选择 1%),为不同策略提供了灵活性。
  3. LP 头寸 NFT 化
    • 机制:由于每个 LP 的价格区间和费率都是独一无二的,其流动性头寸不再是可互换的。因此,V3 使用 ERC-721 非同质化代币(NFT) 来代表 LP 的所有权,取代了 V2 的 ERC-20 LP 代币。
    • 影响:增强了头寸的独特性,但也增加了与某些 DeFi 协议集成的复杂性。
  4. 范围订单 (Range Orders)
    • 机制:通过在极窄的价格区间内提供单边流动性(例如,只存入 USDC),LP 可以模拟传统的限价单
    • 影响:当市场价格进入该区间时,资产会自动兑换成另一种资产,实现了去中心化的、无需挂单等待的限价交易功能。

三、V3 与 V2 的核心区别

特性维度 Uniswap V2 (被动、普适) Uniswap V3 (主动、专业)
流动性模型 均匀流动性:资金分散在 (0, ∞) 整个价格曲线 集中流动性:资金集中在自定义的价格区间 [Pa, Pb]
资本效率 :大量资金在非活跃价格区间闲置 极高:资金利用率大幅提升,收益潜力更高
LP 角色 被动储户:存入后无需管理,俗称“躺赚” 主动做市商:需要持续监控市场并主动调仓
头寸凭证 ERC-20 代币:同质化,易于在其他 DeFi 协议中组合 ERC-721 NFT:非同质化,每个头寸都独一无二
手续费 固定 0.3%:所有交易对费率统一 多级费率:提供 0.05%, 0.3%, 1% 等选项,更灵活

四、优缺点总结

(一)核心优势

  • 极高的资本效率:用更少的资金在活跃区间内赚取更多的手续费,显著提升了 LP 的潜在回报。
  • 交易者体验更佳:由于流动性高度集中,交易者可以享受到更低的滑点和更优的兑换价格。
  • 策略灵活性强:LP 可以根据市场判断制定复杂的做市策略,如范围订单、多区间组合等。
  • 风险收益匹配更优:多费率池让 LP 可以根据自己承担的无常损失风险,选择相应的费用回报等级。

(二)主要缺点

  • 操作复杂度高:对普通用户极不友好,需要 LP 具备市场分析能力、精准判断价格区间,并进行主动的头寸管理
  • 无常损失风险集中:在狭窄的价格区间内,无常损失的风险被显著放大。价格的小幅波动就可能导致 LP 的资产价值大幅缩水。
  • 需要持续调仓(Rebalancing):价格一旦移出设定区间,LP 收益即停止。频繁调仓以追随市场价格会产生高昂的 Gas 费用,可能侵蚀利润。
  • 流动性碎片化:同一交易对的流动性被分散在不同的费率池和无数个自定义的价格区间中,可能在某些时候影响整体市场深度。

我的 Uniswap V3 学习笔记

Uniswap V3 的机制,比 V2 复杂得多。作为运营,我更关注这些机制如何影响用户行为,以及背后藏着的金融逻辑 —— 毕竟用户不会为技术本身买单,只会为能赚到的钱和能规避的风险买单。

集中流动性:把做市商的 “弹药” 集中到有效射程

V2 里,LP 注入的资产会均匀分布在 0 到无穷大的价格区间里。这就像用散弹枪打鸟,大部分子弹都浪费在没人交易的价格带。比如 ETH-USDC 池,假设日常交易价可能在 4300-4800 美元波动,但 V2 的 LP 资产连 1 美元或 10 万美元的极端价格区间都要覆盖,资金效率低得离谱。

V3 让 LP 可以自定义价格区间。比如我判断 ETH 会在 4300-4800 美元震荡,就把资产集中在这个区间内。这样一来,同样的资金量,在这个区间里的 “子弹密度”(实际能促成交易的流动性)是 V2 的几十倍。用户交易时滑点更低,LP 赚的手续费也更多。

这本质上是把传统做市商的 “报价策略” 下放给了普通用户。传统交易所里,专业做市商会在盘口挂密集的买卖单,V3 只是把这个过程代码化了。但对运营来说,问题来了:普通用户哪懂怎么选区间?我在社群里看到最多的提问是 “这个币该设多少到多少的价格范围”。后来发现,有人开始卖 “区间推荐工具”,按历史波动率算最优区间,这就是运营的机会 —— 与其自己做工具,不如链接这些第三方,在文档里嵌入他们的计算器,降低用户决策门槛。

手续费层级:风险定价的金融本质

V2 只有 0.3% 一种手续费率,V3 搞了 0.05%、0.3%、1% 三档。刚开始觉得这是多此一举,后来想明白,这是在用金融里的 “风险定价” 逻辑设计规则。

稳定币对(比如 USDC-USDT)价格波动极小,无常损失几乎可以忽略,所以用 0.05% 的低费率就能吸引 LP—— 反正风险低,薄利多销。而高波动的山寨币对,LP 要承担更大的价格偏离风险,就得用 1% 的高费率补偿。这和银行给高风险企业放贷款要收更高利息是一个道理。

但用户分不清这些。我测试时发现,很多人随便选个费率就加流动性,结果要么在低波动池里赚不到钱,要么在高波动池里被无常损失啃掉收益。运营能做的,不是教他们金融学,而是给数据:在帮助中心放一张表,统计过去 30 天不同代币对在各费率池的平均年化收益,再标上最大回撤。用户看不懂原理,但看得懂数字 —— 这比讲一百遍 “风险与收益匹配” 有用。

NFT 化的 LP 代币:权益分割的新玩法

V3 的 LP 代币变成了 NFT,每个 NFT 对应一个特定价格区间的流动性头寸。V2 里的 LP 代币是同质化的,就像超市购物卡,谁拿着都一样;V3 里的 NFT 更像房产证,每套房子(每个区间的流动性)都独一无二。

这背后是权益的精细化分割。比如我在 4400-4500 美元加了 ETH 流动性,你在 4500-4800 美元加了同样金额的 ETH 流动性,我们的 NFT 完全不同,收益计算也分开。这让 LP 能更精准地管理风险 —— 想调整策略时,不用撤出全部资产,直接新增一个 NFT 头寸就行。

但运营层面的麻烦也来了:NFT 没法像同质化代币那样拆分转让。有人在社群里问 “我想把一半的 LP 权益转给朋友怎么办”,目前没好办法。这可能会限制流动性的二次流通,尤其是机构级 LP 入场时,他们需要更灵活的权益处置方式。或许未来会有平台做 NFT 碎片化服务,这是个值得关注的生态缺口。

关于无常损失的新发现

V2 里,无常损失是悬在 LP 头上的剑,价格波动越大,损失越狠。V3 因为有了价格区间,情况变得更复杂。如果价格始终在我设定的区间内波动,无常损失会比 V2 小 —— 因为资产没有被过度稀释。但如果价格跳出区间,我的资产会变成单一币种(比如 ETH 涨到5000 美元,超出我 4800 美元的上限,池里的 ETH 会被兑换成 USDC,我手里就只剩 USDC 了),这时候再跌回来,损失可能比 V2 还大。

这让我想起传统金融里的 “止损” 和 “止盈”。V3 的价格区间本质上是一种自动执行的止损策略,只是用户常常意识不到。运营时,与其警告 “小心无常损失”,不如开发一个模拟工具:输入用户设定的区间和投入金额,用历史数据回测 “如果过去三个月按这个策略操作,会亏多少钱、赚多少手续费”。数字比概念更有冲击力。

流动性挖矿的新变量

现在很多项目用流动性挖矿吸引 LP,但 V3 出来后,挖矿规则得重新设计。以前算收益只看锁仓量,现在还得看区间集中度。同样锁 100 万刀,集中在交易活跃区间的 LP 对生态的实际贡献,可能是分散区间的 10 倍。如果挖矿奖励还按锁仓量发,就是鼓励低效资金,反而伤害真正做事的 LP。

我在想,或许可以把 “实际促成的交易量” 作为奖励依据,让贡献越大的 LP 赚越多。但这会增加合约复杂度,也可能引发刷量。金融里的 “激励相容” 难题,在这里同样存在 —— 运营的职责不是解决难题,而是找到当前阶段最不坏的方案。

学 V3 最大的感受是,它把做市商的专业活变得平民化了,但也把金融市场的复杂性暴露无遗。用户需要的不是更强大的工具,而是更清晰的 “操作指南”,什么场景下用什么策略,大概率会有什么结果。这可能就是 Web3和传统金融的共通之处:我们不替用户做决策,只帮他们理解决策背后的逻辑。

Uniswap V3 Core 技術實現分析

通過深入分析 Uniswap V3 核心合約代碼庫,本文對這個去中心化交易協議的關鍵技術實現進行解析。

一、核心架構設計

Uniswap V3 採用三層架構:

  1. 工廠合約層 - UniswapV3Factory.sol 負責池創建和參數管理
  2. 池合約層 - UniswapV3Pool.sol 實現交易和流動性邏輯
  3. 數學庫層 - 提供各種計算支持

1.1 工廠合約實現

費率與 Tick 間距配置

fee = 500;   // 0.05%, tickSpacing = 10
fee = 3000;  // 0.3%,  tickSpacing = 60
fee = 10000; // 1%,    tickSpacing = 200

確定性部署機制

function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool) {
    (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
    require(getPool[token0][token1][fee] == address(0));

    pool = deploy(address(this), token0, token1, fee, tickSpacing);
    getPool[token0][token1][fee] = pool;
    getPool[token1][token0] = pool; // 雙向映射
}

技術特點:

  • 標準化順序:確保代幣地址按順序排列
  • 重複檢查:防止同參數池的重複創建
  • 雙向查找:支持任意順序的代幣查詢

1.2 池合約核心結構

狀態管理優化

struct Slot0 {
    uint160 sqrtPriceX96;        // 當前價格平方根(Q64.96 格式)
    int24 tick;                  // 當前 tick
    uint16 observationIndex;     // 觀察索引
    uint16 observationCardinality; // 觀察數組大小
    uint16 observationCardinalityNext;
    uint8 feeProtocol;          // 協議費用
    bool unlocked;              // 重入鎖
}

存儲優化特點:

  • 槽位打包:所有變量恰好填滿 32 bytes
  • 類型選擇:根據數值範圍選擇最小可行類型
  • 原子更新:單次操作更新多個相關狀態

二、集中流動性技術實現

2.1 Tick 系統

Tick 與價格關係

price = 1.0001^tick
sqrtPrice = 1.0001^(tick/2)

TickMath 高效實現

function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));

    // 使用位操作和預計算值快速計算
    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
    // ... 更多位操作優化

    if (tick > 0) ratio = type(uint256).max / ratio;
    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
}

技術優勢:

  • 位操作優化:避免浮點運算和指數計算
  • 預計算表:使用查找表提高計算效率
  • 精度控制:Q64.96 格式提供足夠精度

2.2 位圖機制

TickBitmap 實現

function nextInitializedTickWithinOneWord(
    mapping(int16 => uint256) storage self,
    int24 tick,
    int24 tickSpacing,
    bool lte
) internal view returns (int24 next, bool initialized) {
    int24 compressed = tick / tickSpacing;
    (int16 wordPos, uint8 bitPos) = position(compressed);
    uint256 mask = (1 << bitPos) - 1 + (1 << bitPos);
    uint256 masked = self[wordPos] & mask;

    initialized = masked != 0;
    next = initialized
        ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing
        : (compressed - int24(bitPos)) * tickSpacing;
}

位圖優勢:

  • O(1) 查找:在 256 位內快速定位下一個初始化 tick
  • 存儲效率:每 bit 表示一個 tick 狀態
  • 雙向查找:支持向上向下查找

三、數學框架核心

3.1 Q64.96 定點數系統

// 價格編碼:sqrtPriceX96 = sqrt(price) * 2^96
uint160 sqrtPriceX96;

// 高精度運算庫
function mulDiv(uint256 a, uint256 b, uint256 denominator) internal pure returns (uint256 result) {
    // 512 位精度乘法實現
    uint256 prod0; // 低位
    uint256 prod1; // 高位
    assembly {
        let mm := mulmod(a, b, not(0))
        prod0 := mul(a, b)
        prod1 := sub(sub(mm, prod0), lt(mm, prod0))
    }
    // 處理高位溢出的除法邏輯...
}

定點數系統特點:

  • 精度範圍:96 位小數部分提供高精度
  • 整數運算:避免浮點數複雜性
  • 512 位支持:FullMath 支援 256 位數乘法

3.2 流動性計算

SqrtPriceMath 核心算法

function getAmount0Delta(
    uint160 sqrtRatioAX96,
    uint160 sqrtRatioBX96,
    uint128 liquidity,
    bool roundUp
) internal pure returns (uint256 amount0) {
    uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION;
    uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96;

    return roundUp
        ? UnsafeMath.divRoundingUp(
            FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96),
            sqrtRatioAX96
        )
        : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96;
}

數學原理:

  • 流動性公式:基於 L = sqrt(xy) 推導
  • 舍入控制:根據場景選擇有利於協議的舍入
  • 精度保護:使用高精度運算避免誤差

四、交換算法實現

4.1 交換主流程

function swap(
    address recipient,
    bool zeroForOne,
    int256 amountSpecified,
    uint160 sqrtPriceLimitX96,
    bytes calldata data
) external returns (int256 amount0, int256 amount1) {
    // 狀態初始化
    SwapState memory state = SwapState({
        amountSpecifiedRemaining: amountSpecified,
        sqrtPriceX96: slot0.sqrtPriceX96,
        tick: slot0.tick,
        liquidity: liquidity
    });

    // 主要交換循環
    while (state.amountSpecifiedRemaining != 0 && state.sqrtPriceX96 != sqrtPriceLimitX96) {
        // 1. 找到下一個初始化的 tick
        (int24 tickNext, bool initialized) = tickBitmap.nextInitializedTickWithinOneWord(
            state.tick, tickSpacing, zeroForOne
        );

        // 2. 計算到下一個 tick 的交換
        (state.sqrtPriceX96, amountIn, amountOut, feeAmount) = SwapMath.computeSwapStep(
            state.sqrtPriceX96,
            TickMath.getSqrtRatioAtTick(tickNext),
            state.liquidity,
            state.amountSpecifiedRemaining,
            fee
        );

        // 3. 跨越 tick 時更新流動性
        if (state.sqrtPriceX96 == TickMath.getSqrtRatioAtTick(tickNext)) {
            if (initialized) {
                int128 liquidityNet = ticks.cross(tickNext, /*...*/);
                state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet);
            }
            state.tick = zeroForOne ? tickNext - 1 : tickNext;
        }
    }
    // 回調和狀態更新...
}

交換算法特點:

  • 迭代處理:逐個 tick 區間處理流動性變化
  • 狀態機設計:使用結構體管理複雜狀態
  • 精確會計:準確追蹤輸入輸出和費用

五、安全機制分析

5.1 委託調用保護

contract NoDelegateCall {
    address private immutable original;

    constructor() { original = address(this); }

    modifier noDelegateCall() {
        require(address(this) == original);
        _;
    }
}

5.2 數值安全

library SafeCast {
    function toUint128(uint256 y) internal pure returns (uint128 z) {
        require((z = uint128(y)) == y);
    }

    function toInt256(uint256 y) internal pure returns (int256 z) {
        require(y < 2**255);
        z = int256(y);
    }
}

安全機制包括:

  • 重入保護:防止重入攻擊
  • 委託調用檢查:防止邏輯劫持
  • 類型轉換保護:防止數值溢出
  • 滑點保護:交易價格限制機制

六、性能優化技術

6.1 存儲優化

  • 變量打包:相關變量打包在同一存儲槽
  • 類型精選:根據數值範圍選擇最小類型
  • 緩存機制:頻繁訪問的數據緩存到內存

6.2 計算優化

// UnsafeMath:已知安全情況下省略檢查
library UnsafeMath {
    function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        assembly { z := add(div(x, y), gt(mod(x, y), 0)) }
    }
}

優化策略:

  • 位運算替代:用位操作替代乘除法
  • 匯編優化:關鍵路徑使用內聯匯編
  • 預計算值:避免重複計算固定常數

七、Oracle 系統增強

7.1 觀察數組機制

struct Observation {
    uint32 blockTimestamp;
    int56 tickCumulative;
    uint160 secondsPerLiquidityCumulativeX128;
    bool initialized;
}

function observe(uint32[] calldata secondsAgos) external view
    returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) {
    return observations.observe(_blockTimestamp(), secondsAgos, slot0.tick, /*...*/);
}

Oracle 特點:

  • 時間加權平均:提供抗操縱的價格數據
  • 流動性加權:考慮流動性對價格穩定性的影響
  • 歷史查詢:支持任意時間點的歷史數據
  • 動態容量:可調整觀察數組大小

7.2 閃電貸機制

function flash(address recipient, uint256 amount0, uint256 amount1, bytes calldata data) external {
    uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee, 1e6);
    uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee, 1e6);

    // 樂觀轉帳
    if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0);
    if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1);

    // 回調執行
    IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data);

    // 費用驗證
    require(balance0() >= balance0Before + fee0, 'F0');
    require(balance1() >= balance1Before + fee1, 'F1');
}

閃電貸改進:

  • 精確費用計算:使用 mulDivRoundingUp 確保準確性
  • 協議費用分離:區分協議費用和 LP 費用
  • 餘額驗證:通過餘額檢查確保費用支付

八、V2 與 V3 技術對比

8.1 主要差異

特性 V2 V3 技術改進
流動性分佈 全價格範圍 集中流動性 資本效率提升 10-100 倍
費率結構 固定 0.3% 多層級費率 0.05%/0.3%/1% 三檔選擇
頭寸管理 同質化代幣 NFT 頭寸 個性化流動性管理
Oracle 精度 基礎 TWAP 增強 Oracle 流動性加權 TWAP

8.2 計算複雜度變化

V2 交換(簡單):

uint amountOut = (amountIn * 997 * reserveOut) / (reserveIn * 1000 + amountIn * 997);

V3 交換(複雜):

  • 需要遍歷多個 tick 區間
  • 每個區間使用不同流動性
  • 複雜的定點數運算
  • 動態費用分配

九、技術限制與權衡

9.1 複雜性成本

用戶層面

  • 學習成本:需要理解價格範圍和 tick 概念
  • 決策複雜性:選擇合適的價格範圍和費率
  • 主動管理:需要根據市場調整頭寸

技術層面

  • Gas 成本:複雜計算增加 Gas 消耗
  • 集成難度:協議集成需要更深技術理解
  • 維護成本:代碼複雜性增加維護難度

9.2 性能權衡

優勢

  • 資本效率:集中流動性大幅提升資本利用率
  • 費率靈活性:多層級費率滿足不同需求
  • Oracle 增強:更準確的價格數據

挑戰

  • 計算成本:單筆交易的 Gas 消耗增加
  • 狀態複雜性:需要維護更多狀態變量
  • 用戶體驗:操作複雜度對普通用戶不友好

十、學習總結

10.1 設計原則

通過分析 Uniswap V3,可以提取以下技術設計原則:

技術實現

  • 模塊化分解:複雜系統分解為可管理模塊
  • 性能優化:在關鍵路徑進行深度優化
  • 數學精度:使用定點數避免浮點運算問題
  • 安全防護:多層安全機制保護用戶資金

系統設計

  • 可組合性:標準接口支持生態系統集成
  • 擴展性:預留未來功能擴展空間
  • 治理考量:為協議治理提供技術基礎
  • 向後兼容:維護生態系統的穩定性

10.2 技術啟發

數學工程化

  • 將經濟學模型轉化為精確代碼實現
  • 在計算精度和 Gas 效率間平衡
  • 通過數學不變量保證系統正確性

複雜性管理

  • 通過分層和模塊化管理系統複雜性
  • 使用測試驅動開發保證代碼品質
  • 在功能性和易用性間找到平衡點

簡單的總結

Uniswap V3:精準流動性管理

重大創新:集中流動性

V3 最大的突破是讓流動性提供者可以選擇價格區間。

具體改進:

  1. 價格區間設定:不用把錢分散到所有價格,可以專注在特定區間
  • 例如:ETH 在 $2000-$3000 區間提供流動性
  • 資金效率提升最高 4000 倍
  1. 多層手續費
  • 0.05%:穩定幣對(USDC/USDT)
  • 0.3%:主流幣對(ETH/USDC)
  • 1%:高風險或新幣對
  1. NFT 持倉憑證:每個流動性位置都是獨特的 NFT

Uniswap V3 中的集中流动性如何运作

Uniswap v3 的核心理念是集中流动性:在自定义价格范围内分配的流动性。在早期版本中,流动性沿着 0 到无穷大之间的价格曲线均匀分布。

先前的均匀分布允许在整个价格区间 (0, ∞) 进行交易,而不会造成任何流动性损失。然而,在许多资金池中,大部分流动性从未被使用过。

以稳定币对为例,两种资产的相对价格保持相对稳定。稳定币对典型价格区间之外的流动性很少被触及。例如,v2 DAI/USDC 对在 0.99 美元至 1.01 美元之间交易时,占用了总可用资金的约 0.50%,而流动性提供者 (LP) 预计在这个价格区间内交易量最大,因此手续费收入也最高。

在 v3 版本中,流动性提供者可以将其资金集中到小于 (0, ∞) 的价格区间。例如,在稳定币/稳定币对中,流动性提供者可以选择将资金仅配置在 0.99 - 1.01 的区间。这样一来,交易者可以在中间价附近获得更深的流动性,而流动性提供者也可以利用其资金赚取更多交易费。我们将集中到有限区间的流动性称为仓位。每个流动性池中的流动性提供者可能拥有许多不同的仓位,从而创建反映每个流动性提供者偏好的个性化价格曲线。

Active Liquidity

随着资产价格的上涨或下跌,它可能会超出流动性提供者在仓位中设定的价格区间。当价格超出仓位区间时,该仓位的流动性将不再活跃,也无法再赚取费用。

当价格朝一个方向波动时,流动性提供者会获得更多一种资产,因为交换者对另一种资产的需求增加,直到他们的全部流动性仅由一种资产组成。(在 v2 版本中,我们通常不会看到这种行为,因为流动性提供者很少达到两种资产价格的上限或下限,即 0 和 ∞)。如果价格重新进入该区间,流动性就会再次活跃,处于该区间的流动性提供者将再次开始赚取费用。

重要的是,流动性提供者可以自由创建任意数量的仓位,每个仓位都有各自的价格区间。集中流动性是一种机制,让市场决定合理的流动性分配,因为理性的流动性提供者有动力集中流动性,同时确保其流动性保持活跃。

为了实现集中的流动性,曾经连续的价格空间范围已被刻度所划分。

刻度是价格空间中离散区域之间的边界。刻度的间隔使得1个刻度的上升或下降代表价格空间中任意一点的价格上涨或下跌0.01%。

报价点是流动性仓位的边界。创建仓位时,提供者必须选择代表其仓位边界的最低报价点和最高报价点。

随着现货价格在互换过程中发生变化,资金池合约将持续将出账资产兑换为入账资产,逐步使用当前报价间隔1内的所有可用流动性,直到下一个报价到达。此时,合约将切换到新的报价,并激活在新报价范围内具有边界的仓位内所有处于休眠状态的流动性。

虽然每个池子都有相同数量的标的报价,但实际上只有一部分能够作为活跃报价。由于 v3 智能合约的性质,报价间隔与掉期费直接相关。较低的费用等级允许更接近的潜在活跃报价,而较高的费用等级允许相对较宽的潜在活跃报价间隔。

虽然非活跃报价对掉期交易成本没有影响,但跨越活跃报价确实会增加跨越该报价的交易成本,因为报价跨越将激活以给定报价为边界的任何新头寸内的流动性。

在资本效率至关重要的领域,例如稳定币对,较窄的刻度间距会增加流动性供应的粒度,并可能降低交换时的价格影响 - 结果是稳定币交换的价格显着提高。

集中流动性

在 Uniswap v2 中,流动性沿着 x*y=k 的价格曲线均匀分布,所有价格在 0 到无穷大之间的资产都会被预留。对于大多数资金池来说,这些流动性的大部分从未被使用过。例如,v2 版本的 DAI/USDC 交易对仅预留了约 0.50% 的资金用于 0.99 美元到 1.01 美元之间的交易,而流动性提供者 (LP) 预计在这个价格区间内交易量最大,因此手续费也最高。

V2 流动性提供者仅能从其资本的一小部分中赚取费用,这可能无法适当补偿他们因持有大量两种代币而承担的价格风险(“无常损失”)。此外,由于流动性在所有价格区间都较为分散,交易者通常会面临较高的滑点。

在 Uniswap v3 中,流动性提供者 (LP) 可以将其资金集中在自定义价格范围内,从而以期望的价格提供更大的流动性。这样,LP 就可以构建反映自身偏好的个性化价格曲线。

流动性提供者 (LP) 可以在一个池子内组合任意数量的不同集中仓位。例如,ETH/DAI 池中的 LP 可以选择将 100 美元配置到 1,000-2,000 美元的价格区间,并将 50 美元配置到 1,500-1,750 美元的价格区间。

通过这样做,LP 可以近似任何自动做市商或活跃订单簿的形状。

用户可以根据所有单条曲线的流动性组合进行交易,无需增加每个流动性提供者的 Gas 成本。在特定价格区间收取的交易费将由流动性提供者根据其在该区间贡献的流动性按比例分成。

资本效率

通过集中流动性,流动性提供者 (LP) 可以在指定价格范围内提供与 v2 相同的流动性深度,同时降低资本风险。节省下来的资金可以存放在外部,投资于不同的资产,存放在 DeFi 的其他地方,或用于在指定价格范围内增加敞口以赚取更多交易费。

举个例子来说明一下:

Alice 和 Bob 都想在 Uniswap v3 上的 ETH/DAI 池中提供流动性。他们各自拥有 100 万美元。当前 ETH 的价格为 1,500 DAI。

Alice 决定将她的资金配置到整个价格区间(就像她在 Uniswap v2 中所做的那样)。她存入了 500,000 DAI 和 333.33 ETH(总价值 100 万美元)。

Bob 则建立了一个集中仓位,只在 1,000 到 2,250 的价格区间内进行入金。他存入了 91,751 DAI 和 61.17 ETH,总价值约 183,500 美元。剩下的 816,500 美元他自己留着,想怎么投资就怎么投资。

尽管 Alice 投入的资金是 Bob 的 5.44 倍,但只要 ETH/DAI 价格保持在 1,000 至 2,250 范围内,他们就能赚取相同数额的费用。

Bob 的自定义仓位也充当了其流动性的止损机制。如果 ETH 价格跌至 0 美元,Alice 和 Bob 的流动性都将完全以 ETH 计价。然而,Bob 的损失仅为 159,000 美元,而 Alice 的损失为 100 万美元。Bob 可以用这笔额外的 816,500 美元来对冲下行风险,或投资于任何其他可行的策略。

在 Uniswap V3 中,集中流动性是一种革新性的机制,它允许流动性提供者(LPs)将他们的资金分配到自定义的价格区间内。这与 Uniswap 早期版本中将流动性均匀分布在从 0 到无穷大价格曲线上的方式截然不同。


集中流动性的工作原理

Uniswap V2 的一个主要问题是,大部分流动性资金从未被有效利用。例如,在 DAI/USDC 这样的稳定币交易对中,价格通常稳定在 1 美元附近。在 V2 中,LP 的资金被分散到所有可能的价位,但只有极小一部分(约 0.5%)的资金真正用于 0.99 美元到 1.01 美元之间的交易。这意味着大部分资本都处于闲置状态,无法赚取费用,也无法有效抵抗无常损失

而 V3 的集中流动性解决了这个问题。LPs 可以选择将他们的资金集中在最有可能发生交易的价格区间内,从而:

  • 提高资本效率: LPs 可以用更少的资金提供相同的流动性深度。这意味着他们可以将多余的资本用于其他投资,或者在指定的区间内投入更多资金以赚取更高的交易费。
  • 增加流动性深度: 交易者可以在最活跃的价格区间获得更深的流动性,从而显著降低滑点,改善交易体验。
  • 创建个性化仓位: 每个 LP 都可以创建多个拥有不同价格区间的集中仓位,从而构建出反映其个人偏好的定制化价格曲线。

活跃流动性和非活跃流动性

当资产价格波动时,它可能会超出 LP 设定的价格区间。当这种情况发生时,该仓位的流动性将变为非活跃,无法再赚取费用。如果价格重新回到该区间,流动性则会再次变为活跃

举例来说,一个 DAI/USDC 交易对的 LP 将资金集中在 0.99 美元到 1.01 美元之间。

  • 当价格保持在这个区间内,LP 就能持续赚取交易费。
  • 如果 DAI/USDC 的价格跌到 0.98 美元,该仓位的流动性就会变成非活跃状态。此时,LP 所持有的资金将全部变为 DAI。如果价格回升至 0.99 美元以上,流动性将再次激活,LP 才能继续赚取费用。

刻度(Ticks)和报价点

为了实现集中流动性,Uniswap V3 将连续的价格空间划分为离散的刻度

  • 刻度是价格空间中的边界,每个刻度的间隔代表价格上涨或下跌 0.01%。
  • 报价点是 LP 在创建仓位时选择的最低和最高刻度,它们共同定义了该仓位的边界。

当交易发生时,流动性池合约会逐步使用当前刻度区间内的所有流动性,直到价格到达下一个刻度。此时,合约会切换到新的刻度,激活在该刻度范围内具有边界的所有非活跃流动性仓位。

虽然这种机制大大提高了资本效率,但它也引入了一个权衡:集中流动性使 LP 的头寸更容易受到无常损失的影响。由于 LP 将资金集中在较窄的区间,当价格大幅波动时,他们的头寸会更快地转换为单一资产,从而可能导致比 V2 中更大的损失。


V2 与 V3 的资本效率对比

以一个具体的例子来比较 V2 和 V3 的资本效率:

假设 Alice 和 Bob 都想在 ETH/DAI 池中提供流动性,当前 ETH 价格为 1,500 DAI,他们各自有 100 万美元。

  • Alice (V2 模式): 她将 100 万美元全部存入,等同于在整个价格区间提供流动性。她存入 500,000 DAI 和 333.33 ETH。
  • Bob (V3 模式): 他只在 1,000 到 2,250 的价格区间内提供流动性。他只需存入约 183,500 美元(91,751 DAI 和 61.17 ETH),就能提供与 Alice 相同的流动性深度。

在这种情况下,只要 ETH/DAI 的价格保持在 1,000 到 2,250 之间,Alice 和 Bob 就能赚取相同数额的费用,而 Bob 剩余的 816,500 美元则可以自由支配。这充分展示了 V3 集中流动性所带来的巨大资本效率优势。

总结:v3 流动性提供商可以选择以与 v2 流动性提供商相同的资本规模,提供更大的流动性深度,而不是像 v2 流动性提供商那样以更少的资本提供相同的流动性深度。这需要承担更大的价格风险(“无常损失”),同时支持更大的交易量并赚取更高的费用。