链上套利:原子周期、闪电贷和必须赢得的拍卖
存在一个普遍的误解,认为链上套利之所以困难,是因为“发现”困难——即价格图表中隐藏着一个只有最聪明的算法才能看到的周期,而计算速度最快的人就能获利。事实恰恰相反。在一个公共链上,有利可图的周期对所有人来说都是即时可见的,由数十个运行着几乎相同代码的机器人针对相同的储备金进行计算。发现套利机会是一个已解决的、商品化的问题。困难的是——真正决定谁能获得利润的是赢得排序:将您的交易安排在正确区块的正确位置,排在所有发现相同机会的其他搜索者之前。链上套利容易“发现”但难以“赢得”,而这两个动词之间的差距正是整个业务经济的所在。
本文从搜索者的角度出发。在 MEV 解剖] 中,我们从受害者的角度描绘了黑暗森林,并承诺将跟进关于“良性”提取——即维持链上价格公平的套利和反向运行。在 链上清算] 中,我们构建了一个闪电贷执行合约和一个预言机反向运行捆绑包,并在此处指向了该原始操作的通用处理。本文将兑现这两个承诺。它假设您已经了解什么是内存池(mempool)、捆绑包(bundle)和优先费(priority fee);如果不知道,请先阅读 MEV 文章。在这里,我们将构建套利者的机器:无法亏损的原子交易、消除了资本限制的借入资本、容易的部分图搜索,以及几乎吞噬了所有利润的拍卖。
原子性:亏损时回滚的交易
链上套利的一个决定性属性——使其在 CEX 交易者可以执行的任何跨交易所交易之上具有根本性安全性的属性——是原子性。多跳套利不是您发送并希望同时完成的一系列交易。它是一个单一交易,执行周期的所有环节,如果最终余额不严格大于初始余额,则整个交易回滚:所有状态更改都会被撤销,就好像从未发生过一样,您只损失失败交易的 Gas 费。
这彻底改变了风险状况。一位在一家交易所购买 BTC,然后在另一家交易所出售的 CEX 交易者,在中间持有库存——几秒钟、几分钟,无论转移和第二次成交需要多长时间——并承担在此期间价格波动的风险。链上套利者在任何经济上有意义的意义上持有库存的时间为零:买入和卖出是同一个不可分割的操作。不存在周期中价格风险,因为不存在周期中。要么整个循环在一个原子步骤中盈利完成,要么根本不发生。
强制执行此规则的是执行路径末尾的一个简单比较。概念上,一个原子套利合约所做的无非是:
// The whole cycle runs inside one transaction. If the closing balance
// does not clear the opening balance (plus costs), the require() throws,
// and the EVM reverts every trade that came before it.
function executeCycle(bytes calldata path, uint256 minProfit) external {
uint256 start = IERC20(baseToken).balanceOf(address(this));
_hopA(path); // e.g. USDC -> WETH on Uniswap
_hopB(path); // e.g. WETH -> DAI on Sushiswap
_hopC(path); // e.g. DAI -> USDC on Curve
uint256 end = IERC20(baseToken).balanceOf(address(this));
require(end >= start + minProfit, "unprofitable"); // atomic safety net
}
require 是整个安全模型。过时的报价、在您的交易之前将池子移动一个位置的竞争性交易、意外的费用——任何使周期无利可图的事情都会触发此检查并导致回滚。您永远不会以比您建模的更差的价格出售最后一环并承担损失;本应亏损的交易不会执行。这就是为什么套利是 MEV 分类中良性的一端,根据 MEV 文章]:没有受害者其成交受到损害,套利者也不承担方向性库存风险。失败尝试的唯一真正成本是 Gas——正如我们将看到的,这正是竞争性拍卖旨在抬高的成本。
闪电贷消除了资本限制
原子性实现了更强大的功能:无需自有资本的套利。闪电贷允许您从贷款池中借入任意金额,只有一个条件——您必须在交易结束前偿还它,外加一笔费用。由于借款、套利和还款都存在于一个原子交易中,因此池子没有违约风险:如果您无法偿还,整个交易将回滚,贷款将不复存在。贷方受到与您相同的回滚保护。
模式是一个回调。您调用池子的闪电贷函数;池子将代币发送给您,然后回调您;在回调中,您运行周期,并且必须留下足够的金额进行偿还:
// Called by the lending pool in the middle of the flash loan.
function receiveFlashLoan(address token, uint256 amount, uint256 fee, bytes calldata data)
external
{
// 1. buy the asset cheap on venue A with the borrowed `amount`
uint256 bought = _swap(VENUE_A, token, ASSET, amount, data);
// 2. sell it dear on venue B, back into the borrowed token
uint256 repaidIn = _swap(VENUE_B, ASSET, token, bought, data);
// 3. must be able to return principal + fee, or the whole tx reverts
require(repaidIn >= amount + fee, "arb cannot cover loan");
IERC20(token).transfer(msg.sender, amount + fee); // repay in-tx
// whatever remains — repaidIn - amount - fee — is profit, kept here
}
费用很小且取决于平台:Aave v3 对闪电贷收取 5 个基点(0.05%),Balancer 历史上收取 0 个基点,而 Uniswap v3 通过闪电兑换(flash swaps)提供了相同的功能,其费用仅为池子正常的兑换费用。五个基点是一笔真实的成本,必须在周期的利润空间内消化,但与占用您自己六到七位数的库存来捕捉持续一个区块的价差相比,这微不足道。
对市场结构的影响值得明确说明:闪电贷将套利利润与资本分离。给定机会的获胜者不是拥有最深资产负债表的搜索者——一个只有几美元 Gas 费的机器人可以在一个交易的持续时间内借入一千万美元。资本不是护城河。每个人都可以针对同一个机会借入相同规模的资金,这正是竞争崩溃到唯一未商品化的东西:第一个被排序。
一个实际的跨 DEX 周期
数字使机制具体化。以两个具有 0.30% 费率的恒定乘积 WETH/USDC 池()为例,假设一次大额买入刚刚将 B 池的价格推高到 A 池之上——这是下一节将展示的周期实际来源的价差。使用整洁、清晰说明的储备金:
- 池 A (便宜): WETH, USDC 价格 USDC/WETH。
- 池 B (昂贵): WETH, USDC 价格 USDC/WETH。
流程是:闪电贷借入 USDC,在 A 池低价买入 WETH,在 B 池高价卖出,然后还款。借入 USDC。第一步将 USDC 卖入池 A 换取 WETH:
第二步将 WETH 卖入池 B 换取 USDC:
您借了 100,000,收到了 100,723,并欠款 5 个基点的闪电贷费用 50 USDC。净利润:约 $673 毛利润,资本支出为零,未计入 Gas 费和优先费用。有两点值得注意。第一,这两个交易使两个池的价格趋于一致——在 A 池买入会抬高其价格,在 B 池卖出会压低其价格——因此利润不是线性的:交易量过大,价格冲击会吞噬差价,这与MEV 文章]中的三明治优化完全相同。搜索者会进行一维搜索,寻找能最大化净利润的借款规模 。第二,这个 $673 是一个确定性的数字,每个竞争机器人都会根据相同的储备金计算出相同的值——这就是整个问题所在,也是下面拍卖部分的主题。

检测是简单的一半
将市场视为一个图——资产是节点,交易对是加权边——套利循环是指其汇率乘积大于一的回路。取每个汇率的对数并取负,一个有利可图的循环就变成了一个负权重循环;寻找它的经典工具是 Bellman-Ford 算法,而 SPFA 和更近期的 RICH 算法是针对真实市场产生的规模小、变化快的图进行优化的更快变体。整个工具集——对数变换、负循环条件、Rust 实现、以及能够消除大多数理论循环的考虑了费用的边权重——是用于套利检测的图算法]的主题,在此无需赘述。
对于本文而言,重要的是一个会计点:费用必须计入边权重,否则循环就是海市蜃楼。一个三步循环会支付三个池子的费用,外加如果你借了款,还有闪电贷费用,负循环测试必须将所有这些都考虑在内:
from math import log
def cycle_log_gain(rates, pool_fee=0.003, loan_fee=0.0005):
"""Log-gain around a cycle. > 0 means gross profit before gas and priority bid.
`rates[i]` = units of the next asset per unit of the current one on hop i."""
gross = 1.0
for r in rates:
gross *= r * (1 - pool_fee) # each hop pays the venue's swap fee
gross *= (1 - loan_fee) # one flash-loan fee for the whole cycle
return log(gross) # still ignores gas and the auction bid
这里的关键观察是:该函数是确定性的。将当前的链上储备金(每个节点都相同,因为链是一个共享的、复制的状态机)输入该函数,每个搜索者都会在相同的区块高度计算出相同的 cycle_log_gain,得到相同的值。没有私有信号,没有专有数据集,没有信息优势。当一个大额兑换或一个新区块重排储备金时,运行结构相同的检测代码的数十个机器人会在几毫秒内同时被点亮同一个循环。搜索结果对每个人都是相同的。
关于拓扑结构的一点说明,因为它决定了搜索的实际难度。最便宜的循环是三角形的、DEX 内的——WETH → USDC → DAI → WETH 完全在同一个 Uniswap 部署中完成:三步,三个池子费用,无需跨平台协调。跨 DEX 循环(在 Uniswap 买入,在 Sushiswap 卖出)增加了平台数量,但原子性保障保持不变。更长、更奇异的循环会串联更多步——但每增加一步都会使乘积乘以另一个 因子,因此考虑了费用的负循环条件会很快淘汰长循环。这正是为什么实际的搜索者会将循环长度限制在三到五步,并进行积极的修剪;图算法文章]中的 RICH 算法就是为运行这种分层、长度受限的搜索而设计的。
因此,检测并不能让你赢得交易;它只能让你有资格竞争。log(gross) > 0 测试告诉你一个机会存在——它并没有说明你是否会成为捕获它的地址。这决定于下一层,即排序,而排序并不是你的算法计算出来的。你需要为它出价。链上套利的所有难点都发生在循环找到之后。

跟随交易:MEV 的良性形式
这些循环首先从哪里来?绝大多数情况下,来自于其他人的交易。在 Uniswap 池中进行的大额兑换会使该池的价格偏离更广泛的市场;该池相对于 Binance、相对于 Curve 池、相对于 Sushiswap 的价格现在是错误的;而重新调整它的行为就是一个有利可图的套利。进行此操作的搜索者会将他们的交易放在创建价格错位的兑换交易的紧随其后。这就是跟随交易,也是链上 MEV 中占主导地位的、良性的一种形式。
回顾MEV 文章]中的恒定乘积机制。一个池子持有储备金 和 ,现货价格为 。有人向其中卖出大量基础资产 ;根据不变量,池子会支付出
并且新的现货价格更低——这是卖家压低了价格。如果外部市场价格仍然是 ,那么池子的报价就低于 ,而利润最大化的回溯交易者会从池子中购买,直到其边际价格回升至 ——也就是说,直到储备金再次满足 。套利者捕获的是池子执行曲线与平坦的外部价格之间的区域——这个价值是由于池子移动而导致的大额掉期未被利用的价值。
关键的结构性事实——也是将回溯交易置于有利地位的事实——是纯粹的回溯交易不会损害目标交易的执行。它严格地发生在受害者掉期交易的之后。到回溯交易执行时,掉期交易者的价格已经被锁定;回溯交易者所做的一切都无法追溯并使其价格变差。这与来自MEV 文章]中的有毒三明治交易形成对比,在三明治交易中,抢先交易被插入到受害者交易的之前,正是为了使其成交价格变差,以便回溯交易者能够收割扩大的价差。回溯交易机制相同,但道德立场相反:三明治交易以受害者为代价制造了错误定价;而良性的回溯交易仅仅清理了受害者本来就会造成的错误定价。套利者是链上价格跟踪外部世界机制——这与跨交易所套利在金融界稳定一切的作用相同。
这也是为什么现代 MEV 保护堆栈试图保留和重新分配回溯交易,同时抑制三明治交易。Flashbots 的 MEV-Share 和订单流拍卖允许用户暴露其交易的部分线索,邀请搜索者竞标回溯交易的权利,并将由此产生的绝大部分利润退还给创造机会的用户。回溯交易仍然发生——价格仍然得到重新校准——但价值流回了产生它的交易,而不是被最快的人窃取。
周期从何而来
几乎所有有利可图的周期都源于链上其他移动价格的事件。了解这些来源是盲目轮询整个图谱与关注那些真正创造了边的少数触发器之间的区别:
- 大额掉期。 上文已讨论过的典型来源:任何足够大的交易,足以使池子价格偏离更广泛的市场,都会打开一个回溯交易的窗口以重新校准它。掉期交易越大,池子越薄,周期就越大。
- 预言机更新。 每一个依赖预言机定价的交易场所——货币市场、永续 DEX——在价格源移动的瞬间就会变得可以套利。在清算文章]中剖析过的驱动清算的预言机更新回溯交易,是将相同的移动应用于价格源而不是掉期交易:更新是起跑枪,搜索者紧随其后。
- 新增或移除流动性。 大额 LP 的铸造或销毁会改变池子的深度,并可能使其暂时偏离价格;即时(JIT)流动性是其对抗性版本,它在单个待处理掉期周围增加深度,并在之后立即将其移除。
- 跨池路由的残差。 将掉期分散到多个池子的路由器很少能使所有池子的价格完全相同,它留下的微小不平衡是可以回溯交易的周期。
实际要点:套利机器人主要是事件监听器,而不是图求解器。它会观察这些触发器,只重新计算每个触发器触及的子图,并提交一个捆绑包——这就是为什么图算法文章]中的增量更新设计比在整个图上进行原始搜索速度更重要。

拍卖吞噬利润
现在是令人不快的部分。你找到了周期。其他人也找到了。机会是确定性的、原子的、无资本的——这意味着唯一剩下的变量是谁获得了获胜的席位,而这由优先拍卖来决定。
自迁移到区块提议者-构建者分离(PBS)和 MEV-Boost(细节将在即将发布的MEV 供应链:PBS 和 MEV-Boost]中详述)以来,搜索者不再在内存池中争夺公开的 Gas 战。他们私下将捆绑包提交给区块构建者,并附带一个出价——无论是高优先费还是直接支付给构建者。构建者组装它所能做的最有价值的区块,并将其转发给提议者。从搜索者的角度来看,这是对执行已知、确定性奖励的权利进行的密封投标拍卖。
进行建模。设总套利利润为 ——例如,来自上面已处理周期的 $673——设每个搜索者的成本(Gas、闪电贷费用)为 。为了赢得席位,你必须以 的价格与计算出相同 的其他搜索者竞争。如果你获胜,你的净收益是
你希望 尽可能低;你也希望获胜。但你的竞争对手面临着与你相同的算术,面对相同的 。在对每个人都能精确计算的共同价值奖励进行的密封投标拍卖中,均衡出价会攀升,直到几乎消耗掉所有剩余价值:,获胜者只保留 ,即他们比次优者高出一点点的微薄利润。这个 $673 不会留在找到周期的人那里;几乎所有这些利润都通过出价直接支付给了构建者,并最终支付给了出售排序权的提议者。这不是市场失灵;这是竞争性拍卖应该做的事情。
失败并非没有代价——失败率经济学
模型忽略了第二个成本,而这个成本实际上区分了运营商。当你输掉拍卖时,你的捆绑包根本不会被打包——你什么都不用付,这正是捆绑包提交相对于旧的公开 Gas 战争的意义所在。但当你赢得拍卖的捆绑包模拟已过时——在你的读取和包含之间储备金发生了变化——你的 require(end >= start + minProfit) 保护程序会触发,交易在链上回滚,你将支付回滚的 Gas 费。原子性保护你的本金,而不是你的 Gas。
因此,搜索者的每个机会的真实预期价值是
其中 是已打包但回滚的捆绑包消耗的 Gas。提高你的出价 可以赢得更多插槽,但也会赢得更多过时的插槽,从而增加回滚项。幸存下来的运营商不是那些找到更多周期的人——每个人都找到相同的周期——而是那些拥有较低 (更便宜、更紧凑的执行路径)、较低的回滚概率(更新的模拟、更好的包含预测)以及有纪律不在预期回滚成本吞噬微薄盈余的边缘机会上出价的人。优势,如果存在的话,完全在于这些二阶成本。
经验形状与模型相符。当许多机器人模拟相同的链上机会并获得相同的利润数字时,获胜的捆绑包通常会将大部分总利润转移给构建者和验证者——与我们在清算]中测得的 90% 以上的泄漏相同,原因相同:关于共同奖品的完美信息加上密封投标拍卖等于利润被竞争到边际失败者的成本。搜索者的优势不是 的大小,这是每个人都能看到的。它是在 (更便宜的执行、更好的路由、更低的失败率)或*在其他人之前看到 *方面的任何私人优势。
这精确地告诉你利润仍然存在于何处:
- 长尾链和不成熟的构建者市场。 在很少有复杂搜索者运营且构建者拍卖稀少或不存在的链上,出价 保持较低水平,因为没有人会提高你的出价。在以太坊主网上产生 的相同周期,在安静的 L2 或替代 L1 上可以产生大部分 。优势在于竞争,而不是聪明才智。
- 低竞争池和奇异资产。 需要消化微薄、依赖路径的 DEX 流动性才能盈利退出的机会很难正确模拟。模拟完整往返(包括非流动性代币的退出滑点)的搜索者可以捕获那些天真的机器人错过或错误定价导致回滚的周期。这里的优势确实是执行质量,而不是延迟。
- CEX-DEX 套利。 单一最大的类别——也是破坏原子性的类别。它有自己的章节,接下来。
原子链上游戏的诚实总结:它是学习 EVM 内部机制、构建者管道和拍卖理论的绝佳方式,尽管过程艰难。它是谋生的残酷方式,因为你正在出售的东西——发现和执行确定性周期的能力——正是你的竞争对手也在出售的东西,而拍卖将其定价为成本。

CEX-DEX 套利:最大的类别,且非原子性
链上可提取价值的最大单一来源不是整洁的原子周期。它是CEX-DEX 套利:中心化交易所资产的价格与其在 DEX 上的价格不同,搜索者通过同时交易双方来弥合差距。对非原子套利的研究——最直接的是 Heimbach、Pahari 和 Schertenleib 的去中心化金融中的非原子套利(2024)——将多年窗口期内提取的价值归因于跨交易所套利者,数亿美元,超过了原子性、纯链上类别。如果你想了解 MEV 中的钱到底在哪里,就是这里。
它违反了使以上所有内容都安全的前提。交易的一条腿在中心化交易所,另一条腿在链上。链上腿是原子的——它要么被打包进区块,要么回滚——但 CEX 腿是在单独的匹配引擎上的单独订单,有自己的结算时间表。两条腿无法被包装在单个回滚中。 没有跨越两个市场的 require(end >= start)。搜索者在 Uniswap 上回溯一个掉期以在链上廉价购买 WETH,并单独在 Binance 上出售 WETH 以实现价差——在这两个事件之间,价格可能会变动。CEX-DEX 套利承担了原子套利所消除的库存风险。
这种风险改变了整个业务的格局:
- 您必须在两个交易场所预先备货。 您无法闪电贷完成中心化交易所(CEX)的交易。要在链上买入 WETH 并立即在币安上卖出,您必须已经在币安上持有 WETH(并在链上持有报价货币,反之亦然)。闪电贷消除了资本需求,但现在它又以硬性要求的方式回归了——即在多个交易所持有库存,并承担风险。
- 您必须对未平仓头寸进行对冲。 在链上成交和 CEX 成交之间,您在资产方向上是多头或空头。认真的 CEX-DEX 套利者将其作为一个持续进行 delta 管理的账簿来操作:他们在永续期货上对冲敞口,将该对冲的融资成本视为经营成本,并管理现货和永续期货之间的基差。这不是一个新问题——它正是跨交易所融资利率套利]的机制,整个游戏就是在不同场所持有抵消的头寸并为对冲融资。CEX-DEX 套利就是这种纪律,其中一个头寸被固定在一个区块上。
- 优势部分是信息和结构性的。 由于 CEX 价格领先于 DEX 价格(中心化订单簿持续更新;AMM 报价只有在有人交易时才会变动),一个读取 CEX 订单簿的搜索者可以在链上价格追赶上来之前就知道下一个回填(backrun)应该朝哪个方向进行。而且,构建者本身越来越多地将这种流动内化:一个同时运营 CEX-DEX 交易台的构建者可以根据自己的交易来排序区块。这模糊了搜索者和构建者之间的界限,并且是MEV 供应链]的中心化力量之一——看到最多订单流并控制最多排序的实体也捕获了最多的非原子套利。
因此,权衡与原子套利的情况正好相反。原子套利是安全的(亏损时回滚,无库存,无资本),但竞争激烈(确定性收益,拍卖吞噬利润)。CEX-DEX 套利是危险的(真实的库存风险,真实的资本,需要融资和管理的对冲),但规模更大,竞争不那么完美,正是因为危险和资本要求将那些只能运行无风险原子循环的机器人拒之门外。额外的回报是对额外风险的补偿——这是金融中最普通的事实,终于在一个曾假装提供无风险资金的链上重新出现。
要点总结
将论点压缩到其核心要点:
- 原子性是整个安全模型。 多跳套利是一个带有
require(end >= start + minProfit)保护的单一交易;任何使其无利可图的操作都会回滚,因此套利者永远不会持有周期中的库存风险,也永远不会在亏损时卖出最后一笔交易。 - 闪电贷将利润与资本分离。 在一个原子交易内借入、套利和偿还;贷方受到与您相同的回滚保护。获胜者不是拥有最多资本的搜索者——资本不是护城河。
- 检测是简单、商品化的那一半。 套利图算法]的负周期搜索是确定性的,对每个人都一样;找到周期只能让你有资格竞争它。
- 回填是良性的、占主导的模式。 在一次大额掉期或预言机更新后立即执行,可以重新调整定价错误的池,而不会损害任何人的成交——这与有毒的三明治(sandwich)相反,也是 MEV-Share 试图重新分配而不是压制的。
- 拍卖吞噬了几乎所有的利润。 在一个常见的、可计算的收益的密封投标构建者拍卖中,投标收敛到 ,90% 以上的利润流向了构建者和提议者。只有在竞争稀薄的地方,利润才能得以幸存:长尾链、非流动性池以及更难模拟的退出。
- CEX-DEX 是最大的类别,而且它不是原子的。 在 CEX 上的一条腿意味着真实的库存风险、真实的资本以及需要融资的对冲——这是应用于固定一条腿在区块上的跨交易所融资手册],也是将MEV 供应链]拉向看到最多流动性的构建者的力量之一。
从外部看,链上套利似乎是一个寻找隐藏周期的谜题。从内部看,它是一个拍卖——而谜题在同一时刻对所有人来说都已解决。知道周期在哪里从来不是优势。赢得插槽,或者在没有人出价的地方交易,一直都是。
参考资料
- Daian, Goldfeder, Kell, Li, Zhao, Bentov, Breidenbach, Juels (2019), Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges. arXiv:1904.05234。
- Heimbach, Pahari, Schertenleib (2024), Non-Atomic Arbitrage in Decentralized Finance. arXiv:2401.01622 (IEEE S&P 2024)。
- Robinson & Konstantopoulos (2020), Ethereum is a Dark Forest.
- Aave v3 闪电贷和 Balancer / Uniswap v3 闪电兑换文档(费用表)。
- Flashbots 文档:MEV-Boost、MEV-Share、订单流拍卖(docs.flashbots.net)。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.