1. 为什么需要动态手续费
当池子价格在极短时间内被大幅推动时,套利者和 MEV 机器人可以抢在系统吸收新信息之前抽取 LP 的价值。Likwid v2.2 用一套原生的动态手续费引擎应对:它的目标不是消灭所有套利,而是让那些把池子价格推离协议受限参考价较远的交易付出显著更高的手续费——交易推动得越猛,边际成本越高,从而压缩攻击者的利润空间。
2. 一句话公式
动态手续费的核心就是一条立方放大公式:
:池子的基础 LP 费率(如默认的 0.3%) :价格偏移幅度——本次交易成交后,pair 价格相对「截断参考价 (truncated reserves)」的相对变化,用比例表示(如 表示偏移 20%)
这与 Likwid 已公布的设计公式 fee = f_base × (10·s)³ 完全一致,也正是合约 SwapMath.dynamicFee 的实现。下面拆解
3. 偏移 是怎么算的
合约用 SwapMath.getPriceDegree 度量偏移:先按当前 pair 储备模拟出本次交易成交后的价格,再和「截断参考价」比较,取相对差值:
s = |成交后价格 − 截断参考价| / 截断参考价合约内部把这个比例存成百万分制 (PPM) 的整数 degree(即 degree = s × 1,000,000,例如 degree = 200000 表示偏移 20%),并对 token0 / token1 两个方向各算一次、取较大者。
为什么对比的是「截断参考价」而不是实时价? 截断储备 (truncated reserves) 是一条受限的参考线:它只能随时间按 priceMoved = priceMoveSpeedPPM × timeElapsed² 的速度向实时价格靠拢(默认 priceMoveSpeedPPM = 3000,即每步约 0.3%)。攻击者无法在一两个区块内把参考价瞬间拉高,因此「偏移」始终是相对这条防操纵基准线度量的——这也是动态费率能挡住闪电式价格冲击的关键。更多背景见《截断预言参考》。
4. 费率如何随偏移上升
把公式按
( degree ≤ 100000)→ 维持基础费率:偏移不大时,手续费就是,不做任何加价。 → 立方放大:手续费按 急剧上升。 ,或算出的费率 ≥ 100% → 封顶 99%。
这三段是平滑衔接的:当
立方意味着放大极快:偏移翻一倍,费率约涨到
WARNING
- 合约内部所有费率都以百万分制 (PPM) 表示:
1,000,000 = 100%,基础费率 0.3% 即3000。 - 触发阈值(
degree > 100000,即 10%)、封顶值(990000,即 99%)等常量都来自合约SwapMath.dynamicFee(MAX_SWAP_FEE = 1e6)。 - 封顶值取
MAX_SWAP_FEE − 10000 = 990000(99%),即动态费率最高 99%,留 1% 余量。 - 这些参数由协议侧设定,若链上调整,本文数值需相应复核。
5. 价格涨幅 → 动态手续费 对照表
以默认 0.3% 基础费率的池子为例(费率随基础费率等比缩放):
| 价格偏移 | 适用规则 | 动态手续费 |
|---|---|---|
| 5% | ≤10%,维持基础费率 | 0.30% |
| 10% | 临界点,维持基础费率 | 0.30% |
| 11% | 立方放大 | ≈ 0.40% |
| 15% | 立方放大 | ≈ 1.01% |
| 20% | 立方放大 | 2.40% |
| 25% | 立方放大 | ≈ 4.69% |
| 30% | 立方放大 | 8.10% |
| 40% | 立方放大 | 19.2% |
| 50% | 立方放大 | 37.5% |
| 60% | 立方放大 | 64.8% |
| ≈ 69.3% | 立方触顶 | ≈ 99%(封顶) |
| ≥ 70% | 封顶 | 99% |
| > 100% | 封顶 | 99% |
表中数值按
计算。其它基础费率按比例缩放——例如 0.6% 的池子,上表每一行费率翻倍。封顶 99% 大约在偏移 69.3% 处开始出现。
6. 算例
把表中两行手算一遍,方便复现(
s = 15%:fee = 0.3% × (10 × 0.15)³ = 0.3% × 1.5³ = 0.3% × 3.375 ≈ 1.01%
s = 20%:fee = 0.3% × (10 × 0.20)³ = 0.3% × 2³ = 0.3% × 8 = 2.40%可见一笔把价格推离参考价 20% 的交易,要付约 2.4% 的手续费——是平时 0.3% 的 8 倍。
7. 对用户与集成方的影响
- 大额扰动储备的交易更贵:把价格推得越远,边际手续费越高,靠近参考价的小额交易则维持基础费率。
- 保证金开仓 / 平仓继承这套引擎:当 margin 流程需要经过池子 swap 时,同样按动态费率计费(
getAmountIn/getAmountOut的含截断参数重载会先算degree、再算费率)。 - 费率行为完全是池子原生能力:无需任何外部预言机或扩展提供者,可直接从协议数学库推导验证。
8. 结论
Likwid 的动态费率策略是 v2.2 协议的原生组成部分,由一条简单的立方公式 fee = f_base × (10·s)³ 驱动,并以截断参考价、受限移动速度和 99% 封顶共同保障:让突发性的大幅价格移动交易远比固定费率模型下昂贵,从而保护 LP、抑制 MEV 与套利攻击。

