"用个 MEV 中继"是给 Solana 上跑机器人的人最常见的建议之一。但这句话具体指什么,讲清楚的人少得多 —— 而且这个词至少被用来指三种不同的东西。
如果你正准备把生产流量接进去,值得先搞清楚自己买的是哪一种。
先说清楚:Solana 上到底什么在暴露
Solana 没有公共 mempool。这一条事实就让威胁模型和以太坊完全不同,而很多 MEV 建议是从那边直接搬过来的,没做调整。
在有公共 mempool 的链上,你待确认的交易躺在一个共享池子里,谁都能读。机器人盯着这个池子,发现一笔有利可图的 swap,就在你前后夹两笔。这就是夹子攻击,而暴露窗口是你待在池子里的全部时间。
Solana 上没有这样的池子。你的交易从 RPC 直接送往接下来负责出块的验证节点。那暴露从哪来?
两个地方,而且必须分开看:
你的提交路径。 从你的进程到出块方之间,每一跳都是一个能看到交易字节的参与方。不是一个公开的池子,而是具体的中间环节。如果其中任何一环自己也在跑策略、或者在卖订单流,你的意图在落块之前就已经泄露了。
出块方本身。 验证节点对自己产出的区块有排序权,它能看到即将收进去的全部内容,并决定顺序。
★中继能解决第一个,第二个谁都没法完全消除。★ 任何声称能做到的说法都是过度承诺。
如果你已经知道自己需要哪一种,免费领个 BoltTx key 改一行就能拿来做基准对比。
被叫做"MEV 中继"的三种东西
一、私密提交路径
交易从你这里送到出块方,中间不经过会检查它的参与方。没有共享池,不卖订单流,中间环节尽量少。
它防什么: 防止任何"本来能在传输途中看到你交易"的人抢跑或夹你。
它不防什么: 验证节点自己的排序。
这是最常见的含义,而且对大多数交易场景来说,这就是真正重要的那一种。
二、Bundle(打包)提交
把若干笔交易作为一个原子组提交 —— 要么全部进同一个区块,要么全都不进。收录权靠 tip 竞价。
它解决什么: 多腿策略,而且部分成交比完全不成交更糟的那种。一个两跳套利如果只成交了一条腿,你手上就多了个不想要的仓位。
它的代价: 速度上吃亏、复杂度上升。而如果你的策略就是一笔 swap,bundle 意义不大。
三、排序保证
有些服务承诺"区块内的位置"。这类措辞要仔细读。★区块内的排序最终是出块方说了算★ —— 服务能影响它,但除非它自己就是出块方,否则保证不了。
怎么判断自己需要哪一种
一条简短的决策路径:
单笔交易的策略 —— 一次 swap、一次狙击、一笔指令集单一的清算。你要的是私密提交路径。bundle 解决的是你没有的问题。
多腿原子策略 —— 跨两个池子的套利,或者任何"部分成交即亏损"的场景。bundle 就是为此而造的机制。
任何高频场景 —— 提交路径起决定作用。每一跳都是延迟,而且交易在落块之前每一跳都在暴露。
读取、索引、用 getBalance 展示余额 —— 完全不适用,没有什么需要保护的。
大多数对比都跳过的那个问题
服务商都会公布延迟数字。但几乎没人公布真正决定你结果的那件事:★你的交易在"被接收"和"进区块"之间,到底经过了谁。★
值得直接问的:
从提交到收录之间,有哪些方能看到这笔交易? 不是问"是不是私密的",而是要具体的名单。答不出具体环节的服务商,卖给你的是一句口号,却管它叫架构。
订单流会不会被出售或共享? 这应该是个一句话就能回答的问题。
服务在任何环节托管资金吗? 对提交路径来说答案应该是"不"。你在本地签名,中继只负责搬字节。
网络拥堵时会怎样? 路径之间的差别就在这里显现。轻负载时所有路径表现都一样。
tip 模型是什么,它在竞争什么? 竞争收录的 tip,和购买访问权的费用,是两回事。要搞清楚你付的是哪一种。
怎么验证它真的有用
MEV 保护有个尴尬的特点:生效时什么都不会发生。这让"付了钱但其实没用"变得很容易。
有两件事是你真的能测的:
实际滑点 vs 报价滑点。 在相同交易对、相同规模上,长期记录"报价价格"和"实际成交价"的差。夹子在这里的表现是:在那些看起来最有利可图的 swap 上,持续出现负向差值。
// 每笔成交都把两边都记下来,然后对比改路由前后的分布。
// 单笔说明不了任何问题;几百笔才能看出差值有没有移动。
log({
pair,
sizeIn,
quotedOut, // 报价说的
actualOut, // 实际拿到的
slippageBps: Math.round(((quotedOut - actualOut) / quotedOut) * 10_000),
route, // 走的哪条路
});
按网络状况分桶的上链率。 ★一条保护得很好但上不了链的路径,比不保护更糟★ —— 你损失的不是几个基点,而是整笔交易。按拥堵程度分桶对比:
const recent = await connection.getRecentPrioritizationFees();
const fees = recent.map((r) => r.prioritizationFee).sort((a, b) => a - b);
const medianFee = fees[Math.floor(fees.length / 2)] ?? 0;
metrics.record("submission", {
landed: didItLand,
route,
bucket: medianFee > 50_000 ? "busy" : "calm",
});
★两项都至少跑一周,而且要覆盖两种网络状况。★ 只测一个拥堵的下午,什么都证明不了。
每一份中继宣传背后的那个取舍
保护和速度是互相拉扯的。
中间环节更少的路径,既更私密通常也更快。但一条"为了私密而绕开正常流程"的路径会增加跳数,而每一跳都是时间。一个输掉竞价的 bundle,根本不会落块。
对于机会窗口只有一两个 slot 的策略,★"没上链"和"被夹了"都是亏损★ —— 而且前者通常亏得更多,因为你连仓位都没拿到。
所以"保护得最狠"是个错误的目标。正确的目标是:在一条不泄露意图的路径上稳定上链 —— 这是另一个优化问题。
上链应该是什么水平
我们投递节点上的真实交易:中位确认 336 毫秒 —— 不到一个 slot。
如果一条"受保护"的路径明显比这个慢,那么保护的代价已经超过它省下的了。
BoltTx 在这里的位置
我们只做交易提交这一件事,整个产品就是这个。不做索引,不做解析历史,不做 NFT 元数据。
提交走我们自建的四区域投递节点,带 SWQoS 路由。不暴露公共 mempool,所以交易在落块之前,传输途中是观察不到的。你在本地签名 —— 我们不托管资金、不代签、不修改交易内容。
关于 tip:你把它带在交易里,从自己的钱包链上支付。交易 revert 的话 tip 跟着一起 revert —— 这是 Solana 原子交易的机制决定的。只有到达链上的交易才计费。
免费领 API key,没有月费:
// 选离你机器人最近的区域
const connection = new Connection("https://la.bolttx.io/?api-key=YOUR_KEY");
然后拿上面那套滑点和上链率的方法,和你现在用的做对比。★那个对比比任何服务商给的数字都值钱,包括我们的。★
常见问题
Solana 的 MEV 中继是什么? 一种把你签好名的交易送往出块方的服务,走的路径会限制谁能在传输途中看到它。Solana 没有公共 mempool,所以它要处理的暴露是提交路径上的中间环节,而不是一个共享的待确认池。
Solana 没有 mempool,那还有 MEV 吗? 有,但形态不同。没有公共池,暴露就来自你提交路径上的参与方,以及出块方在自己构建的区块里的排序权。这是一个比 mempool 链更窄的攻击面,不是不存在。
MEV 中继和 bundle 服务有什么区别? 中继把单笔交易走私密路径送出去。bundle 服务把若干笔作为原子组提交,要么一起进同一个区块、要么都不进,靠 tip 竞争收录。bundle 是给多腿策略用的,单笔 swap 不需要它。
中继能保证我永远不被夹吗? 它能消除提交路径上的暴露,但控制不了出块方在自己区块内的排序决定。任何承诺"完全消除"的服务,说的是它管不到的事。
单笔 swap 需要 MEV 保护吗? 如果这笔 swap 大到值得被夹,私密提交路径就值得有。如果你只是小额操作、或者在没有夹子利润空间的冷门交易对上,那意义不大。
怎么知道自己是不是被夹了? 在相同交易对、相同规模上,长期对比报价成交量和实际成交量。在你最有利可图的那批 swap 上持续出现负向差值,就是它的特征。单笔糟糕的成交是噪音,分布整体偏移才是证据。
MEV 保护会拖慢我的交易吗? 取决于路径。中间环节更少的路径可以既更私密又更快;而为了私密而增加跳数的路径要付延迟,输掉竞价的 bundle 则根本不落块。要把上链率和保护放在一起测,别想当然地假设一定有取舍。
crypto 里的 bundler 是什么? 一种把多笔交易打包做原子执行的服务 —— 它们要么一起被收进同一个区块,要么都不进。Solana 上主要用于多腿套利,以及任何"部分成交比完全不成交更糟"的策略。
清算该用 MEV 中继吗? 清算竞争激烈而且有利可图,所以它是被盯的目标,私密提交路径确实有帮助。但上链速度至少同样重要 —— 一笔受保护但比别人晚到的交易,一分钱也赚不到。
低频机器人值得上 MEV 保护吗? 先拿你自己的成交数据算一下。如果你的实际滑点已经很接近报价,那能挽回的空间本来就不大。保护的价值,和你的交易明面上携带多少价值成正比。
只做小额交易需要中继吗? 多半不需要。夹子只有在超过某个规模阈值时才有利可图,而这个阈值取决于池子深度。低于它,攻击者从你这笔交易里榨不出什么。
中继挂了我的交易会怎样? 完全取决于你有没有做兜底。中继在你的发送路径上是一个单点 —— 所以把"连不上"当成一个路由决策而不是一次故障:退回你平时的提交路径,并接受这一笔交易少了那层保护。
中继能和 priority fee 一起用吗? 能,而且通常应该。它们解决不同的问题:中继限制谁能观察到你的交易,priority fee 影响验证节点拿到之后怎么排序。
中继和普通 RPC 有什么区别? 通用 RPC 用同一套设施服务读取、历史、订阅和发送。中继只承载签好名的交易 —— 正是这种专一,让它的路由和质押权重能为一件事而存在。
中继能防止验证节点重排我的交易吗? 不能。区块内的排序是出块方的决定。中继限制的是"通往出块方那条路上"的暴露,那是问题的另一部分。