静态费用漏在哪
一个收 5 bp 固定手续费的 ETH/USDC 池,不管你买还是卖,都收这 5 bp。
ETH 在别的交易所突然涨了,池子这边的报价还没来得及跟上。谁手快,谁就按旧价把池里的 ETH 买走,转手在新的市场价上卖掉,差价落进自己口袋——这笔钱原本是 LP 的。
官方原话是:"Whoever gets there first buys cheap and keeps the difference." 池子的价格越落后,被搬走的越多。
一笔手续费,是三块拼出来的
VolatilePair Hook 在每次兑换前重算费用。最终这一笔要付多少,由三块相加:
永久费
PERMANENT买卖两侧的永久费永远加起来等于报价价差(ETH/USDC 是 8 bp)。 价格往上走,买侧涨、卖侧跌,等量平移,总量不变。这个倾斜会留到后面的区块。
临时费
TEMPORARY · 只作用一个区块价格刚发生超过闸门(5 bp)的变动后,逆着这波变动做交易的那一侧要多付一笔。 它由两块组成:restore 把刚才掉下去的永久费原样加回来, capture 直接抽走这波变动的一半。
块内加价
MID BLOCK · 同一个区块内一个区块里第一笔之后的交易,还要按"相对本区块开盘价的位移"再加一层: 逆势方加 50% 位移,顺势方加 最多 2 bp。 顺手也削薄了三明治攻击的后腿利润。
ETH/USDC 主网实际配置
下面这些不是举例,是部署脚本里写死、链上读得到的值。
| 参数 | 值 | 作用 |
|---|---|---|
| restingSpread | 800(8 bp) | 安静时买卖两侧的报价价差 |
| skewRate | 1.0× | 跨块价格动 1 bp → 倾斜 1 bp |
| maxSkewStep | 300(3 bp) | 单个区块最多倾斜多少 |
| maxSkew | 800(8 bp) | 单边永久费的上限 |
| backrunCaptureFraction | 50% | 抽走逆势方多少利润 |
| restoreFraction | 100% | 掉下去的永久费,原样加回 |
| 门槛(两个) | 500(5 bp) | 低于此值不收临时费 |
| midFadeRate / maxMidFade | 4× / 2 bp | 顺势交易的块内加价 |
| tickSpacing | 4 | 价格刻度粒度 |
三个场景,从头算一遍
| 场景 | 买 ETH | 卖 ETH | 说明 |
|---|---|---|---|
| 安静 | 4 bp | 4 bp | 价格没动,合计 8 bp |
| 价格涨 3 bp | 7 bp | 1 bp | 倾斜打满 3 bp;没到 5 bp 闸门,不触发临时费——买贵了、卖便宜了,合计仍是 8 bp |
| 价格涨 20 bp | 7 bp | 14 bp | 倾斜仍封顶 3 bp;但过了闸门 → restore 3 bp + capture 10 bp = 13 bp 临时费压在卖侧 |
| 同区块内又涨 1% | 9 bp | 64 bp | 块内加价:顺势买封顶 +2 bp;逆势卖要加 50% 位移(50 bp),几乎劝退 |
另外,闸门是个硬开关:变动 4 bp 时卖侧只要 1 bp,到 5 bp 会直接跳到 6.5 bp。 不是渐变,是台阶。
此刻的池子
- 交易对
- 原生 ETH / USDC(以太坊主网)
- Pool ID
- 0x98316e8405502774a5d0a0761276b5d26505a8195c1905169864008d5e7a3eea
- Hook
- 0x000022Ec4eBD6b12294396E852E4C3876b253Cc0
- tickSpacing
- 4
官方那两句话,翻成人话
都查了哪些一手材料
- · Uniswap 官方博客 VolatilePair Hook: Pricing Both Sides of the Trade(2026-10-14)
- · Uniswap 开发者文档 uniswap-labs-hooks / volatile-pair
- · 开源仓库 Uniswap/v4-hooks-public 的技术规范、部署参数、OpenZeppelin 审计报告
- · 以太坊主网链上状态(自行读取 hook 的 feeConfig / feeState,并用 keccak256(poolKey) 复核 Pool ID)