15 · MEV:套利 / 清算 / 三明治 / backrun / JIT / CEX-DEX
第四层第二篇。14 给了"未来 12 秒的物理通道"(mempool + PBS);15 是这条通道里实际发生的经济活动目录。 任何 MEV 策略本质都是:看到一个价值 X、抢在别人前面在某一笔 tx 里把 X 转移到自己钱包。 我们
Arbitrageur/LiquidationBot/predictBackrun分别落在哪一类、为什么我们没做三明治、 Phase 1 CEX-CEX 套利为什么死、jaredfromsubway 那条狗一年怎么赚 $50M+——这一篇全部摊开。 沿用 01–14 的村庄画面。结构见README.md§1。
0. 一句话本质
MEV (Maximum Extractable Value) = 在一个块内通过 reorder / insert / censor 交易能提取的最大价值。 它不是 bug、不是漏洞,是"公共 mempool + 有序执行 + 携带价值的 tx"这三件事的数学必然结果(Phil Daian 2019 paper)。 五大类策略 = 套利 / 清算 / 三明治 / backrun / JIT-LP;前两类对系统有益(修正价格、清掉坏债), 三明治对用户有害(吃用户滑点)。"零本金套利"在数学上对所有人开放,但实际利润集中在 5-10 家 基础设施齐全的 searcher 公司——这就是我们项目实证看到"残差 ≈ 0"现象的精确机制。
1. 怎么产生的:它解决什么问题
01–14 装好了 MEV 的水管(DEX / 借贷 / oracle / 闪电贷 / mempool / PBS)。 15 答的是这些水管里流通的水是什么样、谁在喝:
- MEV 这名字怎么来的?为什么"Maximum"不是"Miner"? ⇒ 原名"Miner Extractable Value"(2019 Phil Daian 等人 "Flash Boys 2.0" 论文造的词)。 PoS 之后 miner → validator (proposer),且块构造权移给 builder(14 §4.3),"提取者"不再唯一, 改名为"Maximum"——指任何参与者能从有序执行里提取的最大值。
- MEV 总量有多大?
⇒ 以太坊 mainnet 2020–2025 累计 $1.5B+ 被提取。各类占比大致:
- 套利 ~40%
- 三明治 ~30%
- 清算 ~15%
- JIT / 其他 ~15%
- 90% 以上利润集中在 top 5-10 家 searcher 手中(Wintermute、jaredfromsubway.eth 类)。
- 我们 Phase 1 看 CEX-CEX 套利死了,是因为 MEV 把机会吃光了吗? ⇒ 是。CEX-DEX 套利同样如此——但它需要 CEX 账户 + 跨域同步 + KYC,是另一类 MEV, 基础设施门槛 ≠ 链上裸 backrun。这条线 retail 不可能赢。
- "三明治攻击"具体什么意思?它合法吗? ⇒ 你 swap 时 mempool 里 searcher 看到 → 它先一笔买(推高价)→ 你 swap(被滑得更狠)→ 它再一笔卖(赚价差)。结果你比"无搜寻者世界"多花了几个 bps 钱。合法但伦理上有争议—— 算是合规框内的搜寻者吃用户滑点。
- 我们 4 份合约具体都是哪类 MEV?
- Arbitrageur.sol:DEX 套利(跨 Uni V2 / Sushi V2,14 §6 跑过 demo-backrun)
- MultiPoolArbitrageur.sol:DEX 套利的多路径版本 + 闭式最优 amountIn
- LiquidationBot.sol:清算(HF 跨 1 → liquidationCall 抢入)
- 三明治我们没做——伦理 + 基础设施门槛 + 主网毫秒级竞争(我们做不赢)
- 既然 MEV 这么稳,为什么不是人人都搜?
⇒ 门槛在 05 §5 L0–L4 阶梯:
- 你能写 demo(L1)≠ 能稳定赚(L2-L3 自建节点 + co-location + 优化算法)≠ 能跑头部(L4 builder 关系)
- 利润已被竞争压到接近零:所有竞争者愿付的 priority fee 趋于"机会价值 - 边际成本"。残差是 footprint(docs 2026-05-19 自我更正)。
- JIT (Just-in-Time) liquidity 是什么?看着很高级 ⇒ V3 玩法:大单 swap 进 mempool → searcher 极速在那个池集中流动性(V3 特性)到 swap 价位附近 → 大单 swap 经过你的 LP 区域,付你手续费 → 你 swap 完即刻撤掉 LP → 单笔 tx 内你做了 0 成本 1 块时间的 LP,赚那一刻全部手续费。这是 V3 设计带来的新 MEV 类型。
- MEV 的未来怎么走?OFA / SUAVE / 公平排序? ⇒ Order Flow Auction(OFA)—— 用户自己把"我这笔 tx 的 MEV 权"拍卖给 searcher,分成。 SUAVE(Flashbots 推)—— 一条 cross-chain MEV 拍卖链。 公平排序(Aequitas、CowSwap batch auction)—— 取消顺序权,所有同 tx 同价。 方向不一:MEV 一定还在,但分配机制在演化。
→ 这一篇答全部。
2. 它本质在做的"那一件事"
MEV 是有序执行 + 公开状态 + 价值携带 tx** 三件事的数学涌现。** 只要这三条同时成立,"在某笔 tx 前后插自己的 tx 获利"就永远存在—— 跟链的好坏、协议的对错无关,是结构性事实。可以做的只有:分配给谁、效率多高、对用户多公平。 这是为什么 "禁止 MEV" 不成立(你禁不了数学);这是为什么"让 MEV 更公平"是研究方向。
→ 04 §7 已强调 "MEV 是 PBS 的结构性结果,不是 bug";15 把这条原则展开为可观察的具体策略类目 + $$ 数字。
3. 类比:村庄"已知未来的市场"
01–14 的村庄已经有 EVM / AMM / Aave / Oracle / mempool。 15 给的不是新设施,而是 mempool 这扇窗子能看到"未来"带来的所有可能套利方式:
┌── mempool 是一扇能看到"未来 12 秒"的窗子 ─────────────────┐
│ │
│ Alice 已经投币(签 tx 提交 mempool),但村庄 12 秒后才结算 │
│ │
│ 搜寻者 Bob 看到 Alice 要做的事,可以做这些: │
│ ┌─ 1. 跨桶套利(DEX 套利)─ "Alice 砸偏一边桶,我做反向" │
│ ├─ 2. 抢先清算 ─ "Alice 的健康因子刚跨线,我抢调 liquidate"│
│ ├─ 3. 三明治 ─ "Alice 大买 X,我前买后卖吃她滑点" │
│ ├─ 4. backrun 残差 ─ "Alice 已经砸偏,我在她后面收尾" │
│ ├─ 5. JIT 流动性 ─ "Alice 大 swap,我前一秒铸 LP 让她付费"│
│ └─ 6. CEX-DEX 套利 ─ "DEX 这价跟 Binance 差 5 bps,两边对冲"│
│ │
│ 村庄规则**没禁止任何一种**——它们都合法 │
│ 村民对这扇窗的态度: │
│ - 不知道有这扇窗的村民(普通用户)= 被吃滑点 │
│ - 知道但没基础设施的村民(我们)= 跑教学示例 │
│ - 知道且有 co-location/算法/资金的(top 5 家)= 吃肉 │
└─────────────────────────────────────────────────────────────┘
→ MEV 的"不公平"不在窗户存在,而在谁有快速反应的能力。这是经济不平等而非协议不公。
4. 核心关键点(5 条)
-
MEV 五大类策略:
类目 触发条件 抓在哪一步 对用户/系统的影响 我们项目 DEX 套利 两池价差 > 总成本 victim swap 后 backrun 非毒(修正价格、给 LP 收费) Arbitrageur.sol✓清算 HF < 1 HF 跨线那一块抢入 非毒(清坏债保协议偿付) LiquidationBot.sol✓三明治 用户大 swap + 高 slippage 容忍 前买 + 后卖 有毒(吃用户滑点) 我们不做 backrun(一般) 价格暂时偏离 victim 之后 非毒 predictBackrun.ts✓JIT 流动性 (V3) 大 swap 即将经过价位 swap 前铸 LP + swap 后销 LP 中性(吃 LP 手续费但不害用户) 我们不做 CEX-DEX 套利 CEX/DEX 价差 链上 + CEX 同时 非毒 Phase 1 探索过死 NFT mint / 治理 / 空投抢 各自特定事件 那笔事件前后 多样 不在范围 -
MEV 总量数据(2020–2025 累计,以太坊 mainnet):
- 累计提取 $1.5B+(保守估算;Flashbots 数据 + dune analytics 综合)
- 套利 ~$600M | 三明治 ~$450M | 清算 ~$225M | 其他 ~$225M
- top 1 searcher(jaredfromsubway.eth)单年 ~$70M+
- top 5 合计占总量 ~60%
- 长尾 searcher(包括我们这种学习者)几乎是 0
-
三明治攻击的精确机制:
─── T0: Alice mempool 提交 swap_buy 100 ETH worth of USDC for TOKEN, slippage 1% ─── ─── T1: Bob (searcher) 看到 → 算: ─── - 现在 pool 价 P0 - Alice 砸 100 ETH 后价格 P1 = P0 * (1+impact) - Bob 在 Alice 之前买入 X ETH (推高到 P0', 接近 P1) - Alice swap 在 P0' 价位发生 (得到更少 TOKEN, 但仍在她 1% slippage 内) - Bob 之后卖出 X+y, 在 P0' 接近 P1 价位 → 净赚价差 ─── T2: Bob 构造 bundle: [bob_buy, alice_swap, bob_sell] ─── ─── T3: bundle 通过 Flashbots relay 提交,原子打包,所有人收 priority fee ───- Alice 的损失 = "无三明治世界本应得到" - "三明治世界实际得到" ≈ Bob 利润 + 双方 gas(Bob 把利润大部分付出去给 builder/proposer 当 tip)
- 典型一次三明治:Alice 1 万美元 swap,被吃 5-50 美元
- 每年累计:约 $450M 从普通用户钱包流向 searcher → builder → proposer
-
"残差 ≈ 0" 的精确机制(链回 docs 自我更正):
- 任何持续性套利机会会自我消除:
- 时刻 t:Uni V2 和 Sushi 价差 $10
- 时刻 t+0.01s:某 searcher 提交 backrun → 价差缩到 $1
- 时刻 t+0.1s:另一 searcher 也来 → 价差缩到 $0.05
- 竞争压价过程:愿付的 priority fee → "机会价值 − 边际成本"
- 大池子机会 $1000 → 优胜者愿付 $950 priority fee → 净利 $50
- 这就是为什么 Phase 4 我们 fork 观察跨 V2 套利残差近零—— 不是机会不存在,是已被基础设施齐全的人吃掉、留给我们的是残渣
- docs 2026-05-19 自我更正核心:零残差是 footprint,不是 absence
- 任何持续性套利机会会自我消除:
-
"如何上桌"门槛叠加:
- 看到机会(mempool 监听) = 入门
- 算出最优策略(实时算多个 pool 闭式最优) = 中级
- 抢到执行权(co-located 节点 + 毫秒级延迟 + 高 tip) = 高级
- 维持 relay 关系(builder 优先收你的 bundle) = 头部
- 算法迭代(每周看链上数据反向工程对手策略) = 持续头部
- 每一层都 10× 难度——这是 05 §5 L0–L4 阶梯的精确填充
5. 必须先认识的前置名词(小词典)
| 名词 | 一句话 | 类比 |
|---|---|---|
| MEV | Maximum Extractable Value | 12 秒未来窗的可提取价值 |
| searcher | 找 MEV 机会的实体 | 战场扫荡兵(13 §5 / 14 §5) |
| opportunity | 一个具体的 MEV 机会 | 一片落地的肥肉 |
| frontrun | 抢在 victim tx 前面执行 | 插队抢先 |
| backrun | 在 victim tx 后面立刻收尾 | 紧跟收尾 |
| sandwich | frontrun + backrun 夹击 victim | 两边夹击 |
| JIT (Just-In-Time) | 大 swap 前后瞬间铸/销 LP | 临时插队卖手续费 |
| CEX-DEX arb | CEX 价 vs DEX 价的跨域套利 | 两市两价 |
| slippage tolerance | 用户愿接受的最大成交价偏离 | 容忍多坏的成交 |
| priority fee bidding | 搜寻者间用 tip 出价竞争 | 暗拍出价 |
| bundle | 14 §5 复习;多 tx 原子组 | 套餐 |
| toxic / non-toxic MEV | 有害 / 无害(基本定义) | 吸血 vs 修正 |
| OFA / SUAVE / batch auction | 让 MEV 分配更公平的设计方向 | 公平拍卖机制 |
| public good MEV | 全网共享、非排他的 MEV 收益(少见) | 共有山林 |
| jaredfromsubway.eth | mainnet top 1 searcher 之一 | 著名"狗厨" |
6. 一个完整过程走一遍:三种策略的字节级对照
把我们项目里已实现 + 未实现 的策略各走一遍,看每个具体的 tx 结构差异:
策略 A:DEX 套利(我们的 Arbitrageur,已实现)
─── 触发:观察到 Uni V2 和 Sushi USDC/WETH 价差 ≥ 总成本阈值 ─
bundle = [
arbTx (我们的 Arbitrageur.arb([UNI, SUSHI], USDC, optimalAmount))
]
arbTx 内(13 §6 走过):
① flashLoan(USDC, optimalAmount)
② swap USDC → WETH on Uni V2
③ swap WETH → USDC on Sushi
④ require(amountOut >= owed)
⑤ approve + return → POOL 收回本金 + 5bps
利润 = amountOut − owed − gas
→ 非毒:把两池价差缩回平衡。我们 wei-exact 验证。
策略 B:清算(我们的 LiquidationBot,已实现)
─── 触发:victim HF 跨过 1.0(oracle 更新 / 抵押跌)─
bundle = [
liquidateTx (LiquidationBot.executeLiquidation(victim))
]
liquidateTx 内(11 §6 走过):
① flashLoan(USDC, debtToCover)
② approve POOL
③ POOL.liquidationCall(WETH, USDC, victim, debtToCover, false)
④ swap seized WETH → USDC on Uni V2
⑤ approve + return → POOL 收回本金 + 5bps
利润 = swapOut − debtToCover − premium − gas
→ 非毒:清掉坏债,保护 Aave 偿付能力,给系统正外部性。
策略 C:三明治(我们没实现,理由 + 机制)
─── 触发:victim 大 swap 在 mempool ─
bundle = [
attacker_buy_tx, // 我提前买,把价推高
victim_swap_tx, // victim 在更高价位 swap
attacker_sell_tx, // 我马上卖出
]
所有三条 tx 必须**同块同序**——这是 Flashbots bundle 的强保证(16 待写)
attacker_buy_tx:
amountIn = chosen so that final price after victim 不超 victim slippage 上限
此 buy 推高价格但不让 victim revert
victim_swap_tx:
victim 仍在 slippage tolerance 内成交,但单价比"无三明治"差
attacker_sell_tx:
反向卖,在三明治内整体 net profit
经济:
attacker 利润 = price_after_victim − price_before_attacker
≈ victim 的"额外滑点"成本
→ 有毒:把 victim 的额外滑点变成自己的利润。我们项目刻意不做—— 既是教学诚信、又是基础设施门槛(参与三明治需要 ~$10k+/月 co-location + 算法迭代)。
策略 D:JIT 流动性(V3 only,未实现)
─── 触发:V3 池大 swap 在 mempool,路径会穿过特定 tick 区间 ─
bundle = [
mint_lp_tx, // 在 swap 即将穿过的区间集中流动性
victim_swap_tx, // victim 大 swap 经过我的区间,付手续费给我
burn_lp_tx, // 我撤掉 LP,结清头寸
]
利润 = victim 那一笔的手续费 × 我吸收的 swap 量比例 − gas
→ 中性:吃的是 LP 手续费,不直接害 victim。会被现有被动 LP 投诉"被插队"。
各策略 gas 与利润量级(mainnet 典型)
| 策略 | 单笔 gas | 利润下限 | 利润上限 |
|---|---|---|---|
| DEX 套利 | 400k-600k | 几 $ | 几百 $ |
| 清算 | 800k-1.2M | 几十 $ | 几千 $ |
| 三明治 | 300k-500k | 5-50 $ | 几百 $ |
| JIT LP | 500k-800k | 几 $ | 几百 $ |
| CEX-DEX | 400k 链上 + CEX | 几 $ | 几千 $ |
→ 单笔利润不大,靠数量 × 频率累加。jaredfromsubway 一天可能跑 1000+ 三明治。
7. 常见误区(逐条拍死)
| 误区 | 实情 |
|---|---|
| "MEV 是 bug,能消除" | 不是。是结构性事实(Phil Daian 2019)。能改变的是分配,不是存在 |
| "MEV 都是坏的" | 套利、清算非毒,对系统正外部。三明治、frontrun 有毒。"毒/非毒"的分类是行内共识 |
| "禁止 MEV" | 禁不了。同样的 tx ordering 自由让闪电贷、Uniswap、Aave 都能跑——你禁 MEV 也禁了这些 |
| "MEV 是矿工拿走的" | PoS 后变 proposer + builder + searcher 三方分。proposer 拿 priority fee + 部分 builder 出价 |
| "PBS 让 MEV 公平了" | 让流程透明了,没让分配公平。头部 searcher 仍占 60% 以上 |
| "三明治合法" | 是。但伦理被广泛批评;很多用户用 Flashbots Protect 主动避开 |
| "用 Flashbots Protect 就 100% 防三明治" | 99%。极少数情况 builder 私下分享 hint 可能仍泄露(这是 OFA 设计要解决的) |
| "我能写 backrun 就能盈利" | 不能。看到机会 ≠ 抢到执行权。延迟 + 算法 + 资金都要积累 |
| "残差 ≈ 0 说明没机会" | 错。零残差是被吃光的 footprint。有机会但你抢不到——这是 docs 自我更正核心 |
| "MEV 会在 L2/rollup 消失" | 不会。出现新形态(sequencer MEV)。L2 上 sequencer 默认有 100% MEV 权 |
| "CEX-DEX 套利就是 Phase 1 我们看的那种" | 是同一类,但需要跨域基础设施(CEX 账户 + 跨域同步)远超链上裸 backrun |
| "MEV 总量逐年下降" | 不一定。$$ 总量跟链上活跃度强相关;2024-2025 有反弹 |
| "JIT LP 是 V2 也能做" | 不。V2 没集中流动性,铸 LP 必须按当前价比例双边——做不到 JIT 的"针对单 swap 价位" |
8. 与本项目实践的对应
我们 4 份合约的 MEV 类目精确归位
Arbitrageur.sol= DEX 套利(cross-pool)。残差竞争烈,需要 0 延迟 + 最优 amountInMultiPoolArbitrageur.sol= DEX 套利多路径 + 闭式最优。via_ir = true(07 §1.5)来自这里的局部变量爆栈LiquidationBot.sol= 清算。HF 跨 1 → 第一个抢到的吃predictBackrun.ts= backrun(一般)基础设施。看 mempool + 算 victim 影响 + 决定是否要发
我们刻意没做"sandwich"的三层理由
- 伦理:三明治吃用户滑点。教学项目用诚信展示什么是 MEV,不站到吃用户那一边
- 基础设施门槛:需要 ~$10k+/月 co-location 节点 + 算法迭代 + builder 关系
- 同质化竞争:头部 sandwich searcher(如 jaredfromsubway)已经把利润压到接近边际成本
Phase 1 CEX-CEX 套利死的精确归位
- 类目:CEX-CEX 套利(非链上 MEV,但同一性质:跨域价差捕获)
- 死因:本来该捕获的人已经在做(Wintermute / Jump 等 quant firm 跨 5 大 CEX co-location), retail 看到的"机会"是他们当前没碰到的角落——意味着也不会再有人来碰
- 我们看到 3352 次 0 正残差= footprint of 已被工业级 quant 收割的结构性后果(docs 2026-05-19 自我更正 此条)
- 链上 backrun 是同样的逻辑只是换战场——我们没做就是这个清醒认知
"残差 = footprint" 的精确机制(最终把更正落到数学)
- Phase 1 / Phase 4 反复观察"机会等于 0" → 反向证明:有人在持续地把机会吃到 0
- 套利者的竞争压利润下界 = "机会价值 − 最低边际成本(gas + tip + 5bps)"
- 你看到"残差 0"意味着:愿意付 99.x% priority fee 的人已经吃完——你想拿那 0.y% 就要更好的基础设施
- 这是一种严格意义上的市场效率——并不意味着没机会,意味着对你而言进入不了
14 / 16 / 17 的承接
- 14 mempool:看机会的窗口;15 给窗口里能看到的"目录"
- 16 Flashbots / bundle:把策略变成真 tx 上线的工具链
- 17 跨链:MEV 跨域 = 失去原子性 + 新风险 + 新机会(这是 docs 跨链补遗的源头)
9. 自检问题(答得出才算过)
- MEV 这名字的"M"原本指什么?为什么改了?这背后的角色变化是什么?
- 列出 5 大类 MEV 策略 + 我们项目对应了哪几类、刻意没做哪一类 + 三层理由是什么?
- 三明治攻击在 EVM 层的精确 bundle 结构是什么?利润数学上等于什么?为什么是"有毒"MEV?
- "残差 ≈ 0" 现象在 MEV 经济学上的精确含义是什么?这跟"没机会"为什么不是一回事?
- JIT 流动性为什么只能在 V3 做?V2 不行的原因是什么?
- 当前 mainnet $1.5B+ MEV 累计中各类占比大致是?top 5 searcher 占多少?
- "MEV 能被消除"和"MEV 能被重新分配"哪个对?为什么?OFA / batch auction 试图解决什么?
- 我们 Phase 1 CEX 套利死的故事,用本篇 §4.4 残差机制重新解释一遍。
── Q&A / 更正记录区(按日期追加)──
规范见
README.md§0。质疑/反馈/纠错按日期累积,不抹错误轨迹。
- (2026-05-21 建立。暂无 Q&A。)