Featured image of post PancakeSwap V3 深度解析(上):协议篇

PancakeSwap V3 深度解析(上):协议篇

集中流动性、tick 离散化、NFT 仓位、TWAP——把 PancakeSwap V3 的协议设计讲透,顺手讲清它与 Uniswap V3 的渊源与差异。

写在前面

PancakeSwap V3 和 Uniswap V3 的关系经常被简化成一句"前者是后者的 fork"——这话一半对一半不对。

协议设计上,PancakeSwap V3 确实继承自 Uniswap V3:同样的集中流动性、同样的 tick 离散化、同样的 NFT 仓位、同样的 TWAP 预言机。这些东西先讲清楚,再来谈细节。

但 PancakeSwap V3 不是简单复制粘贴——它在协议层做了 3 处实质性扩展:

  1. 费率档位不同0.01% / 0.05% / 0.25% / 1.00%(Uniswap 是 0.30% 不是 0.25%),tickSpacing 也跟着不同
  2. 挖矿是协议级 hook,不是外挂:Pool 合约内部预留 LMPool 调用,与 swap 在同一笔交易里更新奖励
  3. FarmBooster + veCAKE:基于 veCAKE 锁仓量给挖矿 1x ~ 2x 加权,Uniswap 完全没有

顺带一提的背景:Uniswap V3 上线时是 BSL(2 年内禁止商用 fork),PancakeSwap V3 是 BSL 到期后才合规 fork 并改造——这是商务/合规层面的事,不算协议扩展。

本文是「PancakeSwap V3 深度解析」系列的上篇——协议篇,讲清楚 V3 是什么、为什么这么设计、LP 怎么用,以 PancakeSwap V3 为讲解载体,会随时标出哪些是 V3 共性、哪些是 PancakeSwap 独有。下篇会拆 PancakeSwap V3 的合约源码。

系列阅读:上篇·协议篇(本文)下篇·合约篇


一、V2 的局限:资金被"摊薄"

不论是 Uniswap V2 还是 PancakeSwap V2,资金池模型都是同一套:

1
2
价格 = y / x
不变量:x × y = k

LP 的资金均匀分布在 0 到 ∞ 的价格区间上——

实际交易主要发生在某个价格附近——绝大部分 LP 资金永远不会被用到

例子:USDC/CAKE 池——市场价 $2.5,LP 投入的资金里,$0.0001 / $1000000 这种价格区间的资金完全闲置


二、V3 的核心:集中流动性

V3 让 LP 可以只把资金投入到自选的价格区间

如果你 100% 确信 USDC/CAKE 价格在 $2.4-$2.6 之间——只在这个区间提供流动性,资金效率比 V2 高几十倍

但有代价——价格走出区间时,你的资金"失效"

  • 价格 < 你的下界 → 全部变成 CAKE(不再赚手续费)
  • 价格 > 你的上界 → 全部变成 USDC(不再赚手续费)

这就是 LP 必须主动管理仓位的原因——V3 不再是『躺赚』,是『主动做市』


三、Tick 与费率档位

V3 把连续的价格空间离散化成 tick——每个 tick 对应一个价格:

1
price(i) = 1.0001 ^ i

每两个相邻 tick 之间价格变化 0.01%。LP 选区间时不能选任意价格——只能选 tick 边界

不同费用等级有不同的 tickSpacing——这里就是 PancakeSwap 与 Uniswap 协议层的第一处实质差异:

Pool 费率PancakeSwap V3 tickSpacingUniswap V3 对比
0.01%11(相同)
0.05%1010(相同)
0.25%500.30% / 60
1.00%200200(相同)

PancakeSwap 把中间档从 0.30% 调到 0.25%,并且配套 tickSpacing=50。这小幅让利给 trader,叠加 PancakeSwap 在 BNB Chain 上的低 gas 成本,主流 BNB token 池子大多集中在这一档。做跨 DEX 聚合 / 路径搜索时要注意——PancakeSwap 0.25% 档和 Uniswap 0.30% 档 不是同一档,聚合器配置或自实现路径时不能简单地把它们当作等价 fee tier。(顺带一提:两个协议的池子本来就是独立合约、流动性不互通, 价格只通过套利者在链下慢慢趋同。)

低费率适合稳定币对——价格变化小、tickSpacing 也小;高费率适合波动大的资产——粗 tick 节省 Gas。


四、NFT 仓位:每个仓位是独立 NFT

V2 的 LP token 是 ERC-20——所有 LP 同质化。 V3 的 LP 仓位是 ERC-721 NFT——每个仓位独一无二

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
struct Position {
    uint96 nonce;
    address operator;
    uint80 poolId;
    int24 tickLower;
    int24 tickUpper;
    uint128 liquidity;
    uint256 feeGrowthInside0LastX128;
    uint256 feeGrowthInside1LastX128;
    uint128 tokensOwed0;
    uint128 tokensOwed1;
}

每个仓位 NFT 包含:

  • 流动性大小
  • 价格区间(tickLower, tickUpper)
  • 累计未提取的手续费

NFT 化的好处:

  • 每个仓位独立管理——可以转让、抵押、组合
  • 二级市场可能——交易"已经做好的 LP 仓位"
  • DeFi 可组合——其他协议可以包装 V3 仓位(如 Range Protocol、DefiEdge,见第十节)

PancakeSwap 在这一层和 Uniswap 是 1:1 一致的——NonfungiblePositionManager 实现几乎完全继承,只是 callback 方法名带了 pancakeV3* 前缀。


五、费用结算

V3 的费用结算极其精巧——每个 tick 跨越时累积 fee growth

1
2
全局:feeGrowthGlobal0_X128, feeGrowthGlobal1_X128
每个 tick:feeGrowthOutside0_X128, feeGrowthOutside1_X128

LP 提取手续费时计算:

1
feeGrowthInside = feeGrowthGlobal - feeGrowthBelow - feeGrowthAbove

这套设计让每个 LP 仓位的累计费用都能精确计算——不管交易在哪个 tick 发生。

PancakeSwap V3 在 fee growth 旁边额外维护了一份 reward growth(用于 CAKE 挖矿),公式同构,见第九节。


六、跨多个 tick 的 swap

用户发起 swap 时,价格可能跨越多个 tick:

每跨越一个 tick——激活/失活该 tick 上的 LP 仓位。这是 V3 实现"集中流动性"的工程细节。

每跨越一个已初始化的 tick 大约多花 20k gas——密集做市的池子在大额 swap 时会比稀疏池贵很多


七、TWAP:时间加权平均价

V3 提供更强大的 价格预言机——记录每个 block 的 tick 累加,能算任意时间窗口的 TWAP:

1
2
3
4
5
6
7
8
// 查询过去 30 分钟的 TWAP
uint32[] memory secondsAgos = new uint32[](2);
secondsAgos[0] = 1800;
secondsAgos[1] = 0;

(int56[] memory tickCumulatives, ) = pool.observe(secondsAgos);
int24 avgTick = (tickCumulatives[1] - tickCumulatives[0]) / 1800;
uint256 price = TickMath.getSqrtRatioAtTick(avgTick);

抗操纵性强——攻击者要操纵 TWAP 必须持续多个 block 推价格,成本极高。

短窗口仍可被操纵——闪电贷攻击常见。生产用 30 分钟 TWAP 比较安全

PancakeSwap V3 的 TWAP 实现与 Uniswap V3 完全一致。


八、做市策略

V3 的 LP 不再是"投入忘掉"——需要主动策略:

1. 被动 LP

把仓位放在很宽的范围——类似 V2 但收益略高。简单但效率低。

2. 紧仓位 + 频繁调整

把仓位放在当前价格附近 ±1%——资金效率最高,但要频繁调整避免价格走出。需要机器人。

3. JIT(Just-In-Time)流动性

监控 mempool——发现大单交易要进来时临时投入流动性赚一笔手续费,立刻撤回。

4. 范围订单(Range Orders)

1
2
当前价 $2.5,想以 $3 卖 CAKE?
→ 在 $3 单边提供 CAKE(一旦价格到 $3,自动转换成 USDC)

V3 的"单边流动性"等同于"限价订单"。

5. PancakeSwap 特有:质押 NFT 进 MasterChefV3 挖 CAKE

把 NFT 转给 MasterChefV3 后,除了原本的 swap 手续费,还能赚 CAKE 奖励。这是其他 V3 fork 没有的玩法,详见下一节。


九、PancakeSwap 协议层特有:原生挖矿与 FarmBooster

这是 PancakeSwap V3 与 Uniswap V3 在协议层最显著的差异。

原生挖矿 vs 外挂 Staker

Uniswap V3 的官方激励是个外挂合约 UniswapV3Staker

  • Pool 本身不知道有挖矿
  • 用户把 NFT 存进 Staker
  • Staker 监听 NFT 上的事件来分配奖励
  • 优点:Pool 保持纯净;缺点:激励发放和 swap 不在同一笔交易里更新,有套利空间

PancakeSwap V3 把挖矿做成了协议级 hook

1
2
3
4
Pool.swap()
  ├─ 正常的 swap 逻辑
  ├─ LMPool.accumulateReward()        ← Pool 主动调用
  └─ 跨 tick 时 LMPool.crossLmTick()    ← Pool 主动调用

LMPool 是 Pool 部署时绑定的伴生合约,和 Pool 是 1:1 关系。Pool 在 swap 和跨 tick 时主动通知 LMPool 累加奖励——这意味着挖矿状态 永远和 Pool 状态同步,没有第三方监听延迟。

代价是:这笔 hook 调用本身会增加 swap 的 gas(大约 5-10k 额外开销)。

FarmBooster:veCAKE 的 1x ~ 2x 加权

FarmBooster 是 PancakeSwap 的另一处独有设计——用户持有 veCAKE 越多,挖矿权重越高

1
2
boostMultiplier = 1.0 + min(veCAKE / threshold, 1.0)  // 1x ~ 2x
boostedLiquidity = liquidity × boostMultiplier

也就是说,同样的 LP 仓位,长期锁了 CAKE 的人能拿到最多 2 倍奖励。这是个软锁仓激励——拉长 CAKE 的平均锁仓周期,稳定治理。

奖励结算复用 V3 的同构机制

挖矿奖励的算法和手续费完全同构

概念swap 手续费CAKE 挖矿
全局累加器feeGrowthGlobalrewardGrowthGlobal
Tick 累加器feeGrowthOutsiderewardGrowthOutside
区间内累加feeGrowthInsiderewardGrowthInside
LP 应得(ΔfeeGrowthInside) × liquidity / 2^128(ΔrewardGrowthInside) × boostedLiquidity / 2^128

理解了 V3 的费用结算,你就免费理解了 PancakeSwap 的挖矿结算——只是把"swap 来的 fee"换成了"按时间释放的 CAKE",再叠了 boost 系数。


十、V3 仓位管理生态

由于 V3 仓位需要主动管理,出现了一批"V3 流动性管理"协议——它们包装 V3 NFT 给用户提供"V2-like 简单体验",牺牲一部分收益换简单。

Ethereum / Uniswap V3 生态(主战场):

  • Arrakis Finance:自动管理 V3 仓位的金库
  • Gamma Strategies:算法策略管理仓位
  • Charm Finance

BNB Chain / PancakeSwap V3 生态

  • Range Protocol:跨链 V3 流动性管理,支持 PancakeSwap V3
  • DefiEdge:多链 V3 仓位策略
  • Bril Finance:专注 PancakeSwap V3 的自动复投金库

整体来说 BNB 链的 V3 管理生态比以太坊小一截——但 PancakeSwap V3 自带的 MasterChefV3 + FarmBooster 已经覆盖了"被动持有 + 自动收益"的大部分场景,第三方管理的需求没那么强。


十一、PancakeSwap V3 的真实数字

  • TVL:历史高峰在 $15-20 亿区间(DeFiLlama 多链合计,BNB Chain 主导,2024 年起以太坊和 Arbitrum 部署增长明显)
  • 日交易量:稳定数亿美元,经常超过 Uniswap V3 在 BNB Chain 上的所有相关池子
  • 支持链:BNB Chain、Ethereum、Arbitrum、Polygon zkEVM、zkSync Era、Linea、Base、opBNB 等
  • MasterChefV3 总质押 NFT 数:数万,锁定 LP 中相当大的比例
  • CAKE 挖矿:每 block 释放,通过 FarmBooster 倾斜给 veCAKE 持有者

PancakeSwap V3 是 BNB Chain DEX 流动性的事实标准——大多数 BNB 链 token 的"主流动性"都在这里。


十二、对开发者的启发

读 PancakeSwap V3 源码(pancakeswap/pancake-v3-contracts)能学到的:

  1. 大数运算:Q128.128 / Q64.96 定点数实现
  2. 位操作优化:tick 状态用 bitmap 管理
  3. NFT 化金融头寸:仓位 ERC-721 化的工程范式
  4. 链上费用结算:精确到任意 tick 区间
  5. 预言机设计:TWAP 抗操纵
  6. 协议级挖矿 hookLMPool 与 Pool 1:1 绑定的设计——这是 PancakeSwap 的独特贡献,值得对比 Uniswap V3 + Staker 的外挂思路学习

V3 的代码量不多但密度极高——是 DeFi 工程师的必读源码。


小结

把 PancakeSwap V3 的价值压一句:

V3 用『集中流动性 + tick 离散化 + NFT 仓位』把 LP 从『被动的资金池』升级为『主动的做市策略』,PancakeSwap 在此基础上加了协议级挖矿 + veCAKE Boost,把 CAKE 经济和流动性深度捆绑。

理解 V3 协议的几个关键(与 Uniswap V3 共性):

  • LP 选区间,资金集中——效率几十倍
  • 价格离散化为 tick——便于工程实现
  • 每个仓位是 ERC-721 NFT——可组合、可交易
  • TWAP 提供抗操纵的预言机
  • LP 不再是『躺赚』——需要主动管理

PancakeSwap 在协议层的独有设计:

  • 0.25% 费率档(对 Uniswap 0.30%)
  • 协议级挖矿 hook(LMPool)——不是外挂
  • FarmBooster + veCAKE——锁仓激励 1x~2x

下一篇我们把这些协议设计落到合约层——拆 PancakeV3FactoryPancakeV3PoolNonfungiblePositionManagerMasterChefV3 的源码,看看每一行代码是怎么把上面这些抽象概念实现出来的。

继续阅读:PancakeSwap V3 深度解析(下):合约篇

使用 Hugo 构建
主题 StackJimmy 设计