目录
- [DeFi 基础: 流动性、池子、AMM、滑点](#DeFi 基础: 流动性、池子、AMM、滑点)
-
- [1. 从一个最朴素的问题开始](#1. 从一个最朴素的问题开始)
- [2. 流动性池 (Liquidity Pool)](#2. 流动性池 (Liquidity Pool))
- [3. 自动做市商 (AMM)](#3. 自动做市商 (AMM))
-
- [用例: 你想用 1,000 USDT 买 BNB](#用例: 你想用 1,000 USDT 买 BNB)
- [4. 滑点 (Slippage)](#4. 滑点 (Slippage))
-
- [4.1 价格冲击 (Price Impact)](#4.1 价格冲击 (Price Impact))
- [4.2 滑点容忍度 (Slippage Tolerance)](#4.2 滑点容忍度 (Slippage Tolerance))
- [4.3 真正的"滑点攻击": 三明治攻击 (Sandwich Attack)](#4.3 真正的"滑点攻击": 三明治攻击 (Sandwich Attack))
- [5. 安全视角: AMM 出问题的几种常见姿态](#5. 安全视角: AMM 出问题的几种常见姿态)
- [6. Uniswap V3: 集中流动性 (Concentrated Liquidity)](#6. Uniswap V3: 集中流动性 (Concentrated Liquidity))
-
- [6.1 V2 的痛点: 资本效率低](#6.1 V2 的痛点: 资本效率低)
- [6.2 V3 的核心改动: LP 自选价格区间](#6.2 V3 的核心改动: LP 自选价格区间)
- [6.3 多档手续费 (Fee Tier)](#6.3 多档手续费 (Fee Tier))
- [6.4 Tick --- 价格的离散化](#6.4 Tick — 价格的离散化)
- [6.5 安全视角: V3 引入的新攻击面](#6.5 安全视角: V3 引入的新攻击面)
- [7. Uniswap V4: Hooks 与 Singleton 架构](#7. Uniswap V4: Hooks 与 Singleton 架构)
-
- [7.1 Singleton 架构 (单合约管理所有池子)](#7.1 Singleton 架构 (单合约管理所有池子))
- [7.2 Hooks (可插拔的池子逻辑) ⭐ V4 核心](#7.2 Hooks (可插拔的池子逻辑) ⭐ V4 核心)
- [7.3 Flash Accounting (闪电记账)](#7.3 Flash Accounting (闪电记账))
- [7.4 原生 ETH + ERC-6909](#7.4 原生 ETH + ERC-6909)
- [7.5 安全视角: Hook 是双刃剑](#7.5 安全视角: Hook 是双刃剑)
- [8. 名词速查](#8. 名词速查)
- [9. 进阶 (后续可以读)](#9. 进阶 (后续可以读))
DeFi 基础: 流动性、池子、AMM、滑点
面向新人的入门文章。读完应该能回答: 用户在 PancakeSwap / Uniswap 上 swap 一个 token,背后到底发生了什么?为什么会有滑点?为什么有时候买不到 / 卖不掉?
1. 从一个最朴素的问题开始
假设你在中心化交易所 (Binance) 想用 USDT 买 BNB。背后的逻辑是:
你挂单 → 撮合引擎 → 找到一个愿意卖 BNB 的对手方 → 成交
这叫 Order Book (订单簿) 模式。需要有人挂买单、有人挂卖单,撮合引擎匹配。
Order Book (BNB/USDT)
价格 (USDT) 数量 (BNB)
┌──────────────────────────────────┐
│ 605 20 │
│ 604 15 │ 卖单 Asks ↓
ASK │ 603 10 ←最低卖价
├──────────── 中间价 600.5 ─────────┤
BID │ 600 12 ←最高买价
│ 599 18 │ 买单 Bids ↑
│ 598 25 │
└──────────────────────────────────┘
你想买 5 BNB ──→ 撮合引擎吃掉 603 这档的 5 BNB
成交价 = 603 USDT/BNB
(有现成对手方时滑点几乎为 0)
每一档都是真人挂的单。没有人挂卖单 = 你买不到;卖单稀疏 = 单子大就要一路吃上去 (这才是订单簿模式的"滑点")。
但在链上做订单簿很贵 (每次挂单/撤单都是一笔交易,gas 烧不起),也很慢。所以 DeFi 走了另一条路: 自动做市商 (AMM, Automated Market Maker)。
2. 流动性池 (Liquidity Pool)
AMM 的核心是一个池子 (Pool): 一个智能合约,里面锁着两种 (或多种) token。
举例: BNB/USDT 池子里有
- 100 BNB
- 60,000 USDT
这两堆 token 不是凭空来的,是流动性提供者 (LP, Liquidity Provider) 存进去的。LP 把自己的 BNB + USDT 按当前比例存入合约,作为回报,每次有人在池子里 swap 都会付一笔手续费 (典型 0.3%),这笔手续费按比例分给所有 LP。
流动性 (Liquidity) 这个词在不同语境下意思略不同:
- 池子的流动性 = 池子里锁仓的资产总额 (TVL)。池子越大,能承受的交易量越大。
- token 的流动性 = 这个 token 在所有池子/交易所里的可交易深度。流动性差 = 稍微买卖一点价格就剧烈波动。
3. 自动做市商 (AMM)
AMM 的精髓: 用一个数学公式代替对手方 。最经典的是 Uniswap V2 的 恒定乘积公式:
x * y = k
x= 池子里 token A 的数量y= 池子里 token B 的数量k= 常数 (在没有人加/撤流动性时不变)
回到上面的例子: 100 BNB * 60,000 USDT = 6,000,000,k = 6,000,000。
AMM 池子 (一个智能合约) 和订单簿对比:
┌──────────────────────────┐ ┌────────────────────┐
│ │ │ 订单簿: │
│ 🟡 100 BNB │ │ 找对手方 ↔ 撮合 │
│ 💵 60,000 USDT │ │ 一档一档吃 │
│ │ │ │
│ k = x × y = 6,000,000│ │ AMM: │
│ 当前价 = y/x = 600 │ │ 没对手方 │
│ │ │ 只有公式 + 池子 │
└──────────────────────────┘ └────────────────────┘
▲ ▼
存入 取出
│ │
用户 swap
恒定乘积曲线 (x*y=k): 坐标轴只是"池子里 BNB 的数量"和"池子里 USDT 的数量",两个量都≥0;真正反映价格的是这条曲线本身 。曲线是一条双曲线 ------ x 越大 y 越小,反之亦然 (因为 x×y 必须等于常数 6,000,000)。
每一笔 swap 都相当于把池子的状态沿着这条曲线移动到另一个点。具体方向:
| 操作 | 池子 BNB (x) | 池子 USDT (y) | 沿曲线方向 |
|---|---|---|---|
| 买 BNB (USDT → BNB) | ↓ 减少 | ↑ 增加 | ↖ 左上 |
| 卖 BNB (BNB → USDT) | ↑ 增加 | ↓ 减少 | ↘ 右下 |
USDT (y, 池中 USDT 数量)
│
120K┤●(50, 120K) ← 极端: 已买走一半 BNB
│ ╲
│ ╲
75K┤ ●(80, 75K) ← 用 15,000 USDT 买走 20 BNB
│ ╲ 实际单价 ≈ 750 USDT/BNB (+25%)
│ ╲ ↖ "买 BNB" 方向
65K┤ ●(92.3, 65K) ← 用 5,000 USDT 买走 7.7 BNB
│ ╲ 实际单价 ≈ 650 USDT/BNB (+8.3%)
61K┤ ●(98.4, 61K) ← 用 1,000 USDT 买走 1.64 BNB
│ ╲ 实际单价 ≈ 610 USDT/BNB (+1.6%)
60K┤ ★(100, 60K) ← 初始状态, 当前价 = y/x = 600
│ ╲
55K┤ ●(109, 55K) ← 卖 9 BNB 拿 5,000 USDT
│ ╲ 实际单价 ≈ 555 USDT/BNB (-7.5%)
50K┤ ●(120, 50K) ↘ "卖 BNB" 方向
│ ╲___ 实际单价 ≈ 500 USDT/BNB (-17%)
│ ╲_____
│ ╲_________
└─┬───┬───┬─┬──┬───┬────────────────── BNB (x, 池中 BNB 数量)
50 80 92 100 109 120
曲线上每一点都满足 x × y = 6,000,000。
★ 是初始状态。所有交易都是从某一点沿曲线滑到另一点。
关键观察 (价格冲击的本质):
| 你投入 | 池子 USDT 变化 | 池子 BNB 变化 | 你拿到 BNB | 实际单价 | vs 初始价 |
|---|---|---|---|---|---|
| 1,000 USDT | 60K → 61K | 100 → 98.36 | 1.64 | 610 | +1.6% |
| 5,000 USDT | 60K → 65K | 100 → 92.31 | 7.69 | 650 | +8.3% |
| 15,000 USDT | 60K → 75K | 100 → 80.00 | 20.00 | 750 | +25% |
→ 买得越多,沿曲线滑得越远 ,曲线在那一段的切线越陡 = 边际价格越贵。这就是"价格冲击"。
池子越大,曲线越"扁": 想象把整张图横向拉长 10 倍 (池子从 100 BNB 扩到 1,000 BNB),同样金额的交易在曲线上只滑动一小段,价格几乎不变。这是为什么深度好的池子滑点小。
用例: 你想用 1,000 USDT 买 BNB
交易后池子里 USDT 变成 60,000 + 1,000 = 61,000。
为了维持 k = 6,000,000,BNB 必须变成 6,000,000 / 61,000 ≈ 98.36。
所以你拿到的 BNB = 100 - 98.36 = 1.64 BNB。
成交均价 = 1,000 / 1.64 ≈ 609.7 USDT/BNB。
注意: 交易之前 的池子价格是 60,000 / 100 = 600 USDT/BNB,但你实际成交价是 609.7。这就引出了滑点。
4. 滑点 (Slippage)
滑点 = 你期望的价格 vs 实际成交价格的差。
滑点的来源有两类,用户经常混淆:
4.1 价格冲击 (Price Impact)
你这笔交易自己 导致池子比例变化,从而推高/压低价格。这是 AMM 公式决定的,和池子大小成反比:
| 池子规模 | 你买 1,000 USDT 的 BNB | 实际单价 | 价格冲击 |
|---|---|---|---|
| 100 BNB / 60,000 USDT | 1.64 BNB | 609.7 USDT/BNB | ~1.6% |
| 1,000 BNB / 600,000 USDT | 1.66 BNB | 600.96 USDT/BNB | ~0.16% |
| 10,000 BNB / 6,000,000 USDT | 1.667 BNB | 600.10 USDT/BNB | ~0.016% |
池子越深,单笔交易的价格冲击越小。 这也是为什么大额交易在小池子里特别吃亏。
4.2 滑点容忍度 (Slippage Tolerance)
钱包里那个 "Slippage 0.5% / 1% / 自定义" 设置,指的是你愿意接受的最大偏差。
下单时点 swap 到链上确认有时间差 (BSC ~3秒,以太坊 ~12秒),期间可能有别人交易让池子价格变了。如果实际价格偏离超过你设的容忍度,交易回滚(失败),但 gas 还是被扣。
你点 swap 时预计: 1 BNB = 600 USDT
你设置的 slippage: 1%
能接受的最差成交价: 1 BNB = 606 USDT
链上确认时实际价: 1 BNB = 610 USDT ← 超过容忍度,交易 revert
4.3 真正的"滑点攻击": 三明治攻击 (Sandwich Attack)
如果你设置的滑点容忍度太高 (比如 50%),机器人 (MEV bot) 看到你 pending 的交易,会:
- 抢跑 (front-run): 在你之前买入同一个 token,把价格推高。
- 你成交: 你以被推高的价格买入,损失被滑点容忍度允许。
- 尾随 (back-run): 机器人立刻卖出,套利落袋。
你的钱被夹走了。所以滑点不是设得越高越好 ------ 容忍度高 = 给机器人的攻击空间大。
5. 安全视角: AMM 出问题的几种常见姿态
理解上面的机制后,这些"用户卖不出去"的报案就好理解了:
| 现象 | 机制 |
|---|---|
| 买进去就跌很多 | 池子小 + 价格冲击。或者是貔貅币 (买入税重)。 |
| 卖不出去 (报错 / revert) | 合约层面禁止卖 (honeypot),或卖出税 100%,或滑点容忍度不够。 |
| 能卖但只能拿到极少 | 卖出税重 (合约扣 90%+),或池子被抽干,深度极差。 |
| 价格突然归零 | 项目方 rug pull: 撤掉池子里所有的"另一边" (USDT/BNB),留你拿着无法兑现的 token。 |
| 池子深度 100 万但卖 10 美金都失败 | 池子是假的: LP token 被锁死、合约只允许特定地址卖、或者价格冲击限制 (anti-whale)。 |
做案件分析时常用的判断:
- 看池子的 TVL 和 创建时间: 几天前刚创建、TVL 几千美金的池子 = 高风险。
- 看 LP token 是否锁仓: 没锁 = 项目方随时可以撤池子跑路。
- 看 token 合约: 有没有 transfer 限制、黑名单、动态税率、owner 后门。
- 看 该 token 的卖出交易: 如果一段时间内只有买没有卖 (或者卖的全失败),几乎可以确定是貔貅。
6. Uniswap V3: 集中流动性 (Concentrated Liquidity)
V2 (x*y=k) 是最经典的 AMM,但 2021 年 Uniswap V3 上线后,主流 DEX (Uniswap、PancakeSwap V3 等) 都迁移到了 V3 模型。V3 不是另一种 AMM,而是 V2 的"加强版"。
6.1 V2 的痛点: 资本效率低
V2 把 LP 的钱均匀铺 在 (0, +∞) 整条价格曲线上。但 BNB/USDT 99% 的交易都发生在当前价 ±20% 这个窄区间,曲线两端 (BNB=10 美金 / BNB=5,000 美金) 那部分钱永远用不上。
结果: TVL 1,000 万美金的池子,真正在当前价附近做市的可能只有几十万美金。
6.2 V3 的核心改动: LP 自选价格区间
LP 存入流动性时指定一个价格区间 [P_low, P_high],资金只在这个区间内做市,区间外不工作。
V2: 流动性铺满整条曲线
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
0 300 600 900 +∞
↑ 当前价
绝大部分资金在远离当前价的位置,浪费
V3: LP A 在 [550, 650] 提供流动性
▓▓▓▓▓▓▓▓▓▓
LP B 在 [580, 620] 提供流动性
░░░░░░
LP C 在 [400, 800] 提供流动性 (宽区间)
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
──────────────────────────────────
400 500 580 600 620 700 800
↑ 当前价
当前价附近: A + B + C 三层流动性叠加 → 深度极厚
走到 500: 只剩 C → 深度变薄
走出 [400,800]: 谁的流动性都不工作
对交易者: 同样 1,000 万 TVL 的 V3 池子,当前价附近的有效深度 (active liquidity) 可以是 V2 的 几十~几千倍 → 滑点显著降低。
对 LP:
- ✅ 用更少资金赚同样手续费 (资本效率提升)
- ❌ 价格走出区间 → 100% 变成单边资产,且不再赚手续费(相当于挂的限价单被吃掉了)
- ❌ 需要主动管理: 区间偏离了就要重新调仓
- ❌ LP 凭证不再是同质化 token,而是 NFT (每个区间唯一)
6.3 多档手续费 (Fee Tier)
V2 全池统一 0.3%。V3 同一对 token 可以同时存在多个池子,每个池子手续费不同:
| Fee Tier | 适用场景 | 典型对 |
|---|---|---|
| 0.01% | 稳定币 ↔ 稳定币 | USDC/USDT |
| 0.05% | 强相关对 | ETH/stETH、USDC/USDT (在低波动期) |
| 0.30% | 主流币对 | ETH/USDC、BNB/USDT |
| 1.00% | 长尾 / 高波动 / meme | 新发 token |
→ 同一对 token 可能存在 2~4 个 V3 池子,聚合器 (1inch / 0x / PancakeSwap router) 自动比价路由到最优。
6.4 Tick --- 价格的离散化
V3 把连续价格离散成一个个 tick ,相邻 tick 价格比为 1.0001 (差 0.01%)。LP 的区间永远落在一对 tick 上 (tickLower, tickUpper)。
链上看到 V3 swap 事件常见字段:
sqrtPriceX96: 当前价格的特殊表示 (sqrt(price) * 2^96)tick: 当前所在 tickliquidity: 当前 active 的总流动性 L (注意不是 TVL)
理解这些是看懂 V3 链上数据的前提。
6.5 安全视角: V3 引入的新攻击面
| 现象 | 机制 |
|---|---|
| 假深度池子 | 总 TVL 显示 1,000 万美金,但 99% 的流动性集中在远离当前价的区间。卖出时实际能成交的深度极浅,滑点暴击。只看 TVL 会被骗,要看 active liquidity (当前 tick 附近)。 |
| JIT (Just-In-Time) 流动性 | MEV bot 看到 mempool 里的大单 → 同一区块先 加入巨量集中流动性 → 大单成交 (bot 吃走绝大部分手续费) → 立刻撤回。普通 LP 的手续费收益被稀释。 |
| 单边鬼池 / Rug 变种 | 项目方把流动性放在远离市场价的极窄区间,仪表板上 TVL 漂亮,实际当前价附近没货。等用户上钩后撤掉。识别: 看 tickLower/tickUpper 是否包含当前价。 |
| LP NFT 钓鱼 | V3 LP 头寸是 ERC-721,被钓鱼签 setApprovalForAll 给恶意合约 → 整个流动性头寸被转走,攻击者可以销毁 NFT 拿走里面的钱。攻击面和普通 NFT 钓鱼一样。 |
| 价格区间被穿透 | 极端行情把价格打出 LP 区间 → 该 LP 不再做市 → active liquidity 骤降 → 滑点放大 → 进一步推动价格 → 可能形成连锁踩踏。 |
做案件分析时的关键判断点 : V3 池子的"健康度"不能只看 TVL,必须查询当前 tick 附近的 active liquidity。Subgraph / 链上 slot0() + liquidity() + tick bitmap 才是真深度。
7. Uniswap V4: Hooks 与 Singleton 架构
V4 在 2025 年 1 月主网上线,是 Uniswap 自 V3 以来的最大重写。V3 解决"资本效率",V4 解决"可扩展性" ------ 它把 AMM 从一个固定产品 变成一个平台,开发者可以在不分叉合约的前提下定制池子行为。
V4 不是抛弃 V3,而是把 V3 的集中流动性当作默认实现,再开放定制接口。理解 V4 的几个核心改动:
7.1 Singleton 架构 (单合约管理所有池子)
V2/V3 每个 token 对的池子都是独立部署的合约。BSC 上有几十万个 PancakeSwap V3 池子 = 几十万个合约。
V4 改成: 全部池子都"住"在一个合约 PoolManager 里,每个池子只是一组状态 (PoolKey)。
| 维度 | V2/V3 | V4 |
|---|---|---|
| 部署一个新池子的 gas | 一次完整合约部署 | 一次状态写入 |
| 新池子部署成本 | ~5,000,000 gas | ~低几个数量级 |
| 多跳路由 (A→B→C) | 跨多个合约 call | 单合约内部调用 |
| 链上索引/扫描 | 要枚举合约地址 | 要枚举 PoolKey |
对安全分析的影响 : 监听 swap 事件的 topic / 合约地址逻辑要全部重写。看链上数据时,"哪个池子"不再用合约地址区分,而是看 PoolKey = (currency0, currency1, fee, tickSpacing, hook)。
7.2 Hooks (可插拔的池子逻辑) ⭐ V4 核心
每个 V4 池子在创建时可以绑定一个 Hook 合约 。PoolManager 在 swap、加流动性、撤流动性等关键时刻回调 Hook,让它执行自定义逻辑。
普通 V3 swap:
user → PoolManager → 计算 → 转账 → 完事
V4 带 Hook 的 swap:
user → PoolManager
├── beforeSwap() → Hook 合约: "我可以改 swap 参数 / 收额外费 / 拒绝交易"
├── 计算 + 转账
└── afterSwap() → Hook 合约: "我可以记账 / 触发其他动作"
Hook 的回调点 (常用):
beforeInitialize/afterInitialize(创建池子)beforeSwap/afterSwapbeforeAddLiquidity/afterAddLiquiditybeforeRemoveLiquidity/afterRemoveLiquiditybeforeDonate/afterDonate
Hook 能干什么 (合法用途):
- 动态费率 (波动大时收高费、稳定时收低费)
- 链上限价单 / TWAMM (按时间加权慢慢成交大单)
- 自定义价格曲线 (绕过 V3 的
x*y=k,比如做稳定币池) - MEV 内化 (套利收益分给 LP 而不是 bot)
- 链上预言机 (TWAP 价格)
- KYC / 白名单池子
Hook 权限位 : Hook 实现哪些回调,是编码在 Hook 合约地址的低 14 位里的 (Uniswap 用 vanity address 来标记权限)。链上看到一个 hook 地址,就能知道它声明了哪些权限。
7.3 Flash Accounting (闪电记账)
V4 内部不再每一步都做真实转账,而是只记净变化,事务结束时一次性结算。
好处: 多步操作 (swap → 加流动性 → 再 swap) 的 gas 大幅降低,复杂策略变得可行。
副作用: "中间状态"可能短暂为负,外部合约不能假设余额恒为正。
7.4 原生 ETH + ERC-6909
- V2/V3 必须把 ETH 包成 WETH 才能 swap,多花一笔 gas。V4 直接支持原生 ETH。
- LP 头寸用 ERC-6909 (一种轻量级的多 token 标准) 记账,比 V3 的 NFT 更便宜,但仍然唯一对应一个区间。
7.5 安全视角: Hook 是双刃剑
V4 最大的安全变化: 每个池子的行为不再统一 ,由 Hook 合约决定。Hook 是任意智能合约,对它的信任程度直接决定池子是否安全。
| 攻击面 | 机制 |
|---|---|
| 恶意 Hook 抽水 | Hook 在 afterSwap 里把成交结果转走或加征 99% 费率,用户把 token 投进去就出不来。等价于 V2/V3 时代的 honeypot,但藏在 Hook 里而不是 token 合约里。 |
| 可升级 Hook 后门 | Hook 用 proxy 部署,初期无害骗到大量 LP / 交易量,后续升级成恶意逻辑直接 rug。必须确认 Hook 合约不可升级、无 owner 权限。 |
| Hook 重入 | beforeSwap/afterSwap 让外部合约在敏感时刻被回调。V4 自己有重入保护,但 Hook 内部如果调用其他协议,可能被构造重入路径。 |
| 权限位与实际行为不匹配 | Hook 地址低位声明的权限 vs 合约实际逻辑可能不一致 (虽然 PoolManager 会校验,但定制费率等"非回调"行为不在权限位里)。 |
| Singleton 单点风险 | PoolManager 一旦出问题,影响所有池子。但反过来也意味着审计资源能集中在一个合约上。 |
| Hook 模仿钓鱼 | 攻击者部署一个看起来和知名 Hook (例如某 TWAMM 实现) 同名/同接口的合约,但内部逻辑不同。前端展示"使用 XX Hook" 可信不可信完全取决于合约地址,不是名字。 |
| Just-In-Time 进化版 | Hook 可以让 MEV 策略更精细 (例如只对特定地址生效的临时流动性),普通 LP 收益被进一步压榨。 |
做案件分析时的关键判断点:
- 看池子的
PoolKey.hooks字段 → 是否为零地址 (0x0 = 无 hook,等价于纯 V3 行为) - 非零 hook → 必须读 Hook 合约源码 ,重点看:
- 是否可升级 (是否 proxy)
- owner / admin 权限
afterSwap是否往外转账- 自定义费率上限
- Hook 地址低 14 位 → 声明了哪些回调
- 同一个 Hook 可能被多个池子复用 → 一个 Hook 漏洞可以波及一片池子
规则: 池子的安全 = token 合约的安全 × Hook 合约的安全 × PoolManager 的安全。V4 时代分析池子至少要看三个合约。
8. 名词速查
| 术语 | 一句话定义 |
|---|---|
| AMM | 用数学公式 (如 x*y=k) 代替订单簿撮合的去中心化做市机制。 |
| 流动性池 (Pool) | 一个智能合约,里面锁着两种 token,用户在它上面 swap。 |
| LP (流动性提供者) | 把自己的两种 token 按比例存入池子的人,赚取手续费分成。 |
| LP Token | 你存入流动性后拿到的凭证,代表你在池子里的份额。 |
| TVL | Total Value Locked,池子里锁仓的总价值。 |
| 滑点 (Slippage) | 期望成交价和实际成交价的差。 |
| 价格冲击 (Price Impact) | 由于自己这笔交易导致池子比例变化产生的价格偏移。 |
| 滑点容忍度 | 钱包设置里你愿意接受的最大偏差,超过则交易回滚。 |
| MEV / 三明治攻击 | 机器人在你交易前后插入抢跑+尾随交易牟利。 |
| Rug Pull | 项目方撤走池子里另一侧资产,导致 token 价格归零。 |
| Honeypot (貔貅) | 只能买不能卖的 token,合约层面或税率层面禁止卖出。 |
| 集中流动性 (Concentrated Liquidity) | V3 引入: LP 可以把资金集中在指定价格区间,提升资本效率。 |
| Tick | V3 中价格的最小离散单位,相邻 tick 价差 0.01%。LP 区间由 tickLower/tickUpper 定义。 |
| Active Liquidity | V3 池子里当前价 tick 附近真正在做市的流动性,和总 TVL 不是一个概念。 |
| Fee Tier | V3 同一对 token 可以有多个不同手续费档的池子 (0.01% / 0.05% / 0.3% / 1%)。 |
| JIT 流动性 | Just-In-Time: MEV bot 在大单交易前后瞬间加入/撤回 V3 流动性,吃走手续费。 |
| LP NFT | V3 中流动性头寸的凭证 (ERC-721),每个区间唯一,可被 setApprovalForAll 钓鱼。 |
| Hook (V4) | 绑定到 V4 池子上的智能合约,PoolManager 在 swap / 加流动性等事件回调它,让它执行自定义逻辑。 |
| PoolManager (V4) | V4 的 Singleton 合约,所有池子的状态都存在它里面,每个池子由 PoolKey 标识。 |
| PoolKey (V4) | (currency0, currency1, fee, tickSpacing, hook) 五元组,唯一标识一个 V4 池子。 |
| Flash Accounting (V4) | V4 在事务内只记净变化、最后统一结算,省 gas 但中间余额可能短暂为负。 |
| ERC-6909 (V4) | V4 LP 头寸用的多 token 记账标准,比 ERC-721 NFT 更便宜。 |
9. 进阶 (后续可以读)
- 稳定币池 (Curve / Stable Swap): 用不同的曲线公式,让两个价格接近的 token (USDT/USDC) 之间滑点极低。
- 聚合器 (1inch / 0x / 1inch Fusion): 自动把一笔大单拆分到多个池子和多种 AMM,减少价格冲击。
- 无常损失 (Impermanent Loss): LP 因为池子比例变化相对单纯持币产生的浮亏;V3/V4 集中流动性下放大成"集中无常损失"。
- 常见 V4 Hook 类型: TWAMM (时间加权大单)、动态费率、链上限价单、MEV 内化 (流向 LP 的套利)、白名单/KYC 池。
- Solana 上的 AMM: Raydium (V2 风格 + 订单簿混合)、Orca Whirlpool (V3 风格)。和 EVM AMM 思路类似但实现 (账户模型、并发) 完全不同。
- Cosmos / Cetus / Aerodrome 等其他链 AMM: 各有微调,但底层都是 x*y=k 或集中流动性的变种。