一个说不通的事实
MEV(Maximal Extractable Value)的教科书解释是这样的:链上有一个公开的 mempool,你的交易在被打包前所有人都能看到,于是搜索者从里面挑有利可图的交易下手。
按这个逻辑,Solana 应该几乎没有 MEV。因为 Solana 没有公开 mempool——交易不进入一个全网可见的池子,而是直接转发给当前 slot 的 Leader 节点。理论上,只有 Leader 和少数近端节点能看到未确认的交易。
但现实是:2025 年 Solana 上被捕获的 MEV 总量在 $720M 量级,其中三明治攻击给用户造成的损失,16 个月里大约 $500M。
没有 mempool,钱是怎么被夹走的?
这篇就想把这个悖论讲清楚。它是我理解 Solana 交易世界的一把钥匙——也是做交易系统时绕不过去的一课。
分工说明:这篇讲的是 MEV 本身的攻防逻辑。Jito 作为基础设施的三大组件、Tip 的定价机制、平台方具体怎么接,我写在《Jito 到底是什么,为什么每个 Solana 交易平台都离不开它》,两篇配合读比较完整。
悖论的答案:提取者就在门里面
先把以太坊和 Solana 的路径摆在一起:
| 以太坊 | Solana | |
|---|---|---|
| 交易先去哪 | 公开 mempool | 直接发给当前 Leader |
| 谁能看到未确认交易 | 所有人 | Leader(及近端节点) |
| MEV 从哪来 | 外部搜索者扫 mempool | Leader 侧 |
答案其实很直白:你不需要一个公开的池子,只要你是那个负责打包的人。
具体链路:
- 用户的交易广播到当前 slot 的 Leader
- Leader 节点本身(或它的合作方)运行 MEV 搜索软件
- 搜索软件分析流入的交易,找出可获利机会
- 在自己即将打包的这批交易里,插入攻击交易
- 打包出块
用户的交易从未对公众”公开”过,但对唯一需要看到它的那个角色——Leader——已经完全透明了。
这是我觉得最反直觉的一点:“没有 mempool” 降低的是外部攻击面,但没有解决”排序权集中在 Leader 手上”这个结构性问题。 MEV 的根源从来不是 mempool,而是谁有权决定顺序。mempool 只是让这个权力对外泄漏了一次而已。
三明治攻击:钱具体怎么没的
理解了”提取者在门里面”,三明治攻击就好懂了。
用户 Alice 提交:买入 Token X(愿意接受 5% 滑点)
│
▼
攻击者在打包侧看到这笔交易
│
▼
构建一个原子包,顺序写死:
[1] 攻击者先买入 Token X → 推高价格
[2] Alice 的交易 → 以被推高后的价格成交
[3] 攻击者立即卖出 → 落袋
│
▼
付高优先费 / Tip,让这个包获得执行优先权
关键在于顺序是被设计出来的,不是运气。攻击者不需要预测市场,他只需要保证自己的买入排在 Alice 前面、卖出排在 Alice 后面。
两边的账:
- Alice 的损失:成交价被推到接近她设定的滑点上限,实际损失约 3-4%
- 攻击者的收益:包内套利 − Tip − Gas − 自己的买卖成本 = 净利润
注意最后一点:Alice 自己设的滑点上限,就是攻击者的利润上限。 这是整件事里最容易被忽略的地方——用户以为滑点是”保护”,实际它同时也是”授权”:你告诉了市场”我最多能忍受亏这么多”,而攻击者会精确地拿走这个额度。
三代防护:一场军备竞赛
Solana 生态对 MEV 的应对,大致走了三代。把它当成一条演进线来看,比单独记住某个功能有用得多。
第一代:靠用户自己设滑点
最原始的办法:让用户把滑点设小(比如 1%)。
失败得很彻底,原因有两个:
- 流动性差的 Token 根本成交不了,用户被迫把滑点调回去
- 攻击者能精确算到你的容忍度,在额度内下手,你照样被拿走那 1%
把风控责任推给用户,从来不是一个工程解。
第二代:从协议层禁止插队
代表是 Jito 在 2024 年推出的 DontFront:在提交时声明这个交易包的前面不允许插入其他交易,由打包侧保证。
这一代的思路变了——不再指望用户,而是在排序权那一层上锁。效果很直接:2025 年三明治攻击下降约 93%,用户损失减少约 $3 亿。
但它有代价,也有边界:
- 需要走 Bundle 提交,比直接 RPC 慢 50-100ms
- 要付 Tip
- 复杂的多跳交易仍有边缘情况被攻击
第三代:不禁止,改成分账
代表是 BAM(Block Auction Marketplace)。思路又变了一次:既然排序权必然值钱,那就别假装它不存在,而是让这份价值回流给交易的发起人。
粗略机制:用户提交时可以声明愿意分享一部分 MEV,搜索者为这个机会竞价,赢家拿走 MEV 但必须返还一部分给用户(rebate),用户最终拿到比裸提交更好的价格。
三代放在一起看,那条主线很清楚:
从”让用户自己扛” → “从协议层禁止” → “把权力定价并分账”。
MEV 没有被消灭,它被制度化了。我觉得这比”消灭 MEV”更接近现实——只要有排序权,就有租金,问题永远是这份租金归谁。
不是所有 MEV 都该被消灭
这一点值得单独说,因为很容易被”MEV = 恶”带偏。
套利是有益的 MEV。 场景很常见:Token X 在 Raydium 报 $0.10,在 PumpSwap 报 $0.12。套利者用一个原子包同时在低价侧买、高价侧卖。
结果是:
- 套利者赚到差价
- 两边价格被拉平,市场变得更有效
- 后来的用户获得更一致的报价和更低的整体滑点
受害者是谁?没有。 被”拿走”的是两个市场之间本就不该存在的价差。
这就是为什么 Solana 生态对原子套利相对宽容,而对三明治攻击持续加码防御——判断标准不是”有没有人赚钱”,而是”有没有人因此变差”。三明治里 Alice 明确变差了;套利里没有对应的受害者。
做交易系统的时候,这个区分很实用:你要防的是前者,而后者其实在帮你的用户改善成交。
落到实处
如果你是交易者
- 滑点别乱设。 默认 10-20% 是在给攻击者送利润,5% 是比较合理的上限,大额可以更紧(代价是失败率上升)
- 看平台有没有走 Bundle + 防插队。 主流平台(Axiom、GMGN 等)默认走这条路;如果一个平台从不提自己怎么提交交易,大概率是裸 RPC,有被夹风险
- 大额拆单。 100 SOL 一次买入,攻击者能赚 3-5 SOL;拆成 10 笔,每笔只能赚 0.3-0.5 SOL,很可能就不值得下手了
如果你在做平台
- 默认开启防护,别做成开关。 不要让用户自己勾”是否启用 MEV 保护”——绝大多数用户不知道那是什么。只在极少数追求极致速度的场景(狙击)才关
- 把成本摊开给用户看。 优先费、Tip、预计滑点、最终成交价与预期价的偏差,都展示出来。透明度本身就是竞争力
- 关注分账这条路。 三代演进的方向是”MEV 价值回流用户”,谁先把这件事做进产品,谁就能给出比同行更好的成交价
具体的 Tip 定价、Bundle 怎么构建、平台侧怎么接,都在《Jito 到底是什么》那篇里写了。
结论
回到开头那个悖论。
Solana 取消公开 mempool,确实关掉了一扇门——但 MEV 依然存在,因为它的根从来不长在 mempool 上,而长在”排序权”上。只要有人决定顺序,就有租金可收。
所以这个行业的演进方向不是”如何消灭 MEV”,而是:
- 从暴力提取 → 规则竞价
- 从零和收割 → 价值分享
- 从用户被动承受 → 用户参与分账
作为开发者和用户,理解 MEV 的意义不在于躲开它,而在于看清这份租金怎么定价、最后归谁——然后让自己站在合理的一侧。
延伸阅读
- Jito 到底是什么,为什么每个 Solana 交易平台都离不开它 —— 本文的基础设施篇:组件、Tip 经济学、平台接入
- 一笔 Solana 交易的一生 —— 从点击买入到链上确认,MEV 发生在哪一步
- 你的 100 美元 meme 买单,实际付了 107 美元 —— 把 MEV 成本放进完整的成本拆解里
- 从 Web2 后端视角学 Solana 编程 —— 本系列第 1 篇