MEV、抢跑与三明治攻击防护¶
30 秒版(开场)¶
MEV 是通过包含、排除或重排交易获得的额外价值。搜索者发现机会,builder/validator/sequencer 等排序参与者决定能否落块。三明治是:攻击者前跑改变价格 → 用户按容忍滑点成交 → 攻击者后跑获利。防护重点是 严格滑点、私有订单流、批量拍卖/RFQ 与协议级设计;简单分批或 TWAP 也可能持续泄露意图。
3 分钟版(精讲深度)¶
- 是什么:排序参与者通过包含、排除和重排交易提取价值;三明治是其中依赖可观察用户订单流的一类攻击。
- 为什么:DEX 工程师必懂;CEX 没有公开 mempool 三明治,但仍有内部排序公平性、延迟套利和利益冲突风险,不能回答成“CEX 完全没有 MEV 类问题”。
- 怎么做:产品层 + 基础设施层双层防护。
10 分钟版¶
sequenceDiagram
participant Bot as 搜索者 Bot
participant MP as 公开 Mempool
participant User as 用户 swap
participant Block as 区块
User->>MP: 广播 swap
MP-->>Bot: pending 交易可观察
Bot->>Block: 前跑 buy
MP->>Block: 用户 swap
Bot->>Block: 后跑 sell
攻击类型
| 类型 | 说明 |
|---|---|
| 三明治 | 夹用户 swap |
| 清算抢跑 | 抢先强平拿奖励 |
| 套利 | 跨池价差 |
| JIT LP | 临时提供流动性抽 fee |
防护手段
| 层级 | 手段 |
|---|---|
| 用户 | 合理且尽量紧的滑点、限价/意图订单,避免盲目拆单 |
| 前端 | Flashbots Protect、MEV Blocker 等私有提交入口 |
| 协议 | 批量拍卖、RFQ、commit-reveal、动态费用等机制 |
| 后端 | 私有 relayer、失败回退策略、泄露面与审查风险监控 |
Go 后端角色
- 保护普通用户交易时,对接 provider 的私有交易 RPC;具体方法名由服务商定义
- 搜索者、keeper 或需要原子多交易执行时,才使用
eth_sendBundle一类 bundle 接口 - 监控自家 Router 被夹比例
- 通过同块前后交易、池状态变化和地址聚类识别疑似夹单;不能只靠
effectiveGasPrice
Ethereum 当前区块构建链路(简化)
searcher / private order flow → builder → relay → proposer
在 MEV-Boost/PBS 风格流程中,builder 构造 execution payload 并向 proposer 出价,proposer 选择最高有效 bid。它与“每笔交易的 priority fee 直接给 builder”不是一回事。
生产场景¶
- launch 新币:机器人扎堆 → 限流 + 人机验证
- 清算 bot 竞争:gas 竞价;协议设计清算折扣
- CEX 对比:订单簿内部撮合没有公开 mempool,但需要可审计的撮合优先级、时钟、权限隔离和公平接入
深挖问答¶
- Flashbots Protect 与 bundle 区别? → Protect 面向用户私有提交;bundle 面向搜索者/keeper 的有序原子交易集合。两者都可能绕开公开 mempool,但接口与目标不同。
- EIP-1559 费用给谁? → base fee 销毁;priority fee 计入执行层
feeRecipient/coinbase。在 builder 市场里,builder 再通过独立 bid 向 proposer 支付,不能把两笔经济关系混成一句“tip 给 builder”。 - L2 MEV? → 中心化或少数 sequencer 掌握排序权;还要考虑 forced inclusion、共享排序器、批次发布与跨域 MEV。
- 链上防夹合约? → 难完全防;依赖用户参数与私有提交。
反模式¶
- 教育用户 slippage 50% → 等于送钱给 bot
- 大额 swap 走公开 RPC → 交易意图暴露给 mempool 观察者,夹单风险显著
- 私有 RPC 当成绝对安全 → 仍需评估信任、泄露、审查、失败后是否回落公开 mempool