区块链/等级 IX · 速度与奇观/9.2 公平的市场/课程 3
排序攻击及其对策
抢跑与三明治攻击、批量拍卖、加密内存池
材料区块浏览器(例如:Etherscan)公开的 MEV 仪表盘(只读)用于对比滑点与价格冲击的电子表格具有交易过滤功能的区块浏览器
好奇
- 为什么在交易结算之前就能看到它,会产生重新排序区块的经济动机?
- 一种市场机制如何在技术上无懈可击,却仍能通过排序从自己的用户身上榨取价值?
- 能为损失设定上限的滑点限制,与能彻底阻止攻击的滑点限制之间,确切区别是什么?
探索
- 在以太坊上,待处理交易存放在所有节点都能看到的公共内存池中;Solana 没有公共内存池,但负责中继或主导出块的一方仍然能看到待处理交易。掌控区块构建的人可以在最终确认之前查看这一队列。这种可见性形成了一种竞态:速度和信息不对称决定了经济结果。执行顺序并不中立,它是搜索者(searcher)优化的首要变量。最先被打包的交易,会拿走本可留给后来参与者的流动性。
- 抢先交易是指观察到一笔待处理交易后,以更高的优先费提交自己的相同或互补交易,确保其在原交易之前被打包。如果被观察的交易会让价格朝有利于抢跑者的方向变动,他们就能从差价中获利。尾随交易(back-running)则相反:在已知的状态变化(如预言机更新或清算触发)之后执行交易,以获取只有在新状态下才会出现的价值。
- 三明治攻击利用的是滑点容忍度。搜索者在受害者的大额兑换之前立即买入资产,推高其价格。受害者随后以这个被抬高的价格成交。紧接着,搜索者以受害者买入所推高的价格卖出。受害者拿到的代币少于预期,差额则落入搜索者的口袋。这是一种针对用户自身容忍度设置的套利。
- P. Daian 等人在《Flash Boys 2.0》(arXiv 2019)中将这些动态形式化,并创造了“矿工可提取价值”(miner extractable value,MEV)一词,后来更名为“最大可提取价值”(maximal extractable value)。他们证明,MEV 并非异常现象,而是无需许可的顺序执行所固有的结构性特征。大部分 MEV 来自套利和清算;其中一部分,例如三明治攻击,则直接由普通交易者买单。
- Flashbots(成立于2020年)在以太坊上推出了私有捆绑交易中继(2021年),并在合并(The Merge)之后推出了 MEV-Boost 构建者拍卖(2022年)。这将 MEV 提取从公共内存池转移到了竞争性拍卖中,使其变得有序,但并未消失。在 Solana 上,Jito 捆绑交易(2022年起)形成了类似的市场,验证者会优先处理附带小费的捆绑交易。基础设施变了,但排序攻击的根本动机依然存在。
- 滑点限制可以为每笔交易的最大损失设定上限,但无法防止三明治攻击。如果用户将滑点设为1%,搜索者仍然可以对其发动三明治攻击,把成交价格推高到这一上限。根本原因在于针对可见队列、依赖顺序的串行执行。要消除它,要么在交易顺序确定之前隐藏订单,要么让区块内的顺序变得无关紧要,这两种方案都将在后续课程中介绍。
- 在连续交易市场中,执行速度决定结果。率先察觉价格变化并抢先下单的交易者,能够获取本应被分享或被做市商拿走的价值。这种机制奖励的是基础设施而非分析能力:铺设在交易所服务器附近的光纤、托管在交易所机房的硬件以及低延迟网络成为主要的竞争优势。其结果是,微小的速度差异就能转化为可观的经济收益,从而引发一场技术军备竞赛,而只有那些有资本进行此类升级的人才能从中受益。
- Budish、Cramton 和 Shim 在2015年发表于《经济学季刊》(Quarterly Journal of Economics)的论文中提出了一种替代方案:频繁批量拍卖。系统不再在订单到达时连续撮合,而是在一个很短的时间间隔内(他们建议不到一秒,例如100毫秒)收集所有买卖订单,并以单一的统一价格同时清算。这一设计消除了区块内优先级,因为在该窗口内提交的每个订单都按相同的清算价格执行。间隔中的第一毫秒并不比最后一毫秒更有优势;速度与执行结果无关,竞争重新回到信息与估值上。
- 将这一原则应用于区块链网络上的代币市场,可以化解两种常见的攻击手段:狙击和三明治攻击。在标准的内存池中,机器人可以监控待处理交易,发现大额兑换后,在其前后插入自己的交易以操纵价格。在批量清算下,整个区块的订单流被视为一组统一的约束条件。协议会求解出一个能同时使所有订单的成交量或效用最大化的价格。三明治攻击之所以失效,是因为攻击者无法与受害者分开执行;他们属于同一个清算方案。
- CoW Protocol 于2021年在以太坊上线,通过批量拍卖实现了这一机制。用户将经过签名的订单意图提交给求解器网络,而不是直接提交给交易所。求解器竞相在一个区块内完成这些订单,而协议要求胜出方案中同一交易对、同一方向的交易以同一价格结算。Penumbra 的主网于2024年上线(其交易所功能在后续阶段启用),它按区块对兑换进行批量处理。二者都表明批量清算在生产环境中切实可行,尽管它们在具体的求解器架构和隐私保障上有所不同。
- 这一设计的主要代价是延迟。价格只在新一批交易完成清算时更新,而不是连续更新。如果市场状况在一个间隔中途发生剧烈变化,清算价格可能落后于实时现货价格,造成暂时的低效。此外,虽然区块内优先级消失了,区块间优先级依然存在:如果流动性在区块之间发生变化,进入较早的区块仍可能带来优势。这是速度竞争的一种残余形式,但它发生在更慢的时间尺度上(以区块间隔而非毫秒计),从而缓解了基础设施军备竞赛,也让非机构交易者更容易参与。
- 你可以在 Etherscan 或 CoW Explorer 上找一笔 CoW Protocol 的结算交易来验证这一点:一笔交易会结算多个用户的交易,而同一方案中同一交易对、同一方向的交易以相同的有效价格执行。同一批次中不同订单之间的价格一致,正是清算算法在发挥作用的可见标志。
- 在公共内存池中,每笔待处理交易都会立即被所有节点看到。搜索者可以读取交易内容、模拟执行结果,然后提交自己的竞争交易并支付更高的 Gas 费来插队。这种抢跑行为在未经其他用户同意的情况下从他们身上榨取价值。未确认订单的可见性造成了固有的竞态条件,速度优势直接转化为经济收益。
- 提交-揭示方案通过将提交拆分为两个阶段来解决这一问题。首先,用户广播其拟发起交易的加密哈希值;之后,再揭示实际交易。在揭示阶段之前,没有人能看到所提交的内容。只要执行顺序在提交时就已确定,就能防止抢跑,因为订单在等待期间没有人能知道其内容。代价是多了一个步骤:用户必须回来进行揭示,而协议必须决定如何处理那些从未被揭示的提交。
- 阈值加密内存池采用了不同的方法。交易使用某个公钥加密,而对应的解密密钥被拆分给一个委员会(Shutter 将其成员称为“Keypers”)。没有哪个成员持有完整的解密密钥;只有达到阈值数量的节点协作,交易才能被解密。在任何一方看到内容之前,顺序就已确定,从而消除了被操纵的窗口期。信任转移到了这个委员会身上:如果足够多的成员合谋,他们就能提前解密。
- Shutter Network 从2024年起在 Gnosis Chain 上实现了这一方案。它通过一个委员会管理密钥份额,用户可以提交加密交易,这些交易只有在其在区块中的位置确定后才会被解密。同样,Flashbots Protect 提供私有订单流通道,交易完全绕过公共内存池,私下发送给区块构建者。两种方法都能向搜索者隐藏交易数据,但也引入了新的依赖。
- 私有通道将信任从去中心化共识转移到了区块构建者或委员会身上。如果构建者作恶或被攻破,就可以在交易被打包之前查看订单。阈值方案要求多个独立方合谋才能作恶,从而降低了这一风险,但委员会的治理和密钥管理成了关键的故障点。用户必须核实没有任何单一实体控制足够多的密钥份额,从而能够单方面解密交易。
- 其中的权衡很明确:加密内存池因加解密开销而增加延迟,并且需要信任委员会或构建者。公共内存池保持透明,但容易遭受 MEV 提取。对于代币市场而言,采用这些机制意味着接受更慢的价格发现和更复杂的基础设施,以换取对掠夺性交易策略的防护。如何选择,取决于执行的公平性是否比增加的复杂性成本更重要。
部分 I排序攻击:抢先交易、三明治攻击与 MEV
部分 II批量拍卖与统一清算
部分 III加密内存池与提交-揭示机制
关键事实
- MEV,即矿工可提取价值(后改称“最大”可提取价值),由 Daian 等人于2019年命名。
- Flashbots 于2020年成立,旨在将以太坊上的 MEV 提取转移到私有拍卖中。
- 从2022年起,Solana上的Jito捆绑功能允许验证者优先处理带有小费的交易。
- 三明治攻击利用了受害者交易设置中的滑点容忍度来获利。
- 滑点限制可以控制财务损失,但无法阻止“三明治交易”的执行。
- 排序攻击的根源在于针对可见交易队列的顺序执行。
- Budish、Cramton 和 Shim 于2015年在《经济学季刊》上发表了关于频繁批量拍卖的提案。
- CoW Protocol 自2021年上线以来,一直在以太坊上使用批量拍卖。
- Penumbra于2024年推出,按区块批量执行交换操作。
- 批量清算以单一的统一价格执行某一时间间隔内的所有订单,从而消除区块内优先级。
- 该设计将攻击者与受害者的订单纳入同一个清算方案,从而化解三明治攻击。
- 其代价是价格更新比连续市场更慢,不过区块间的速度优势依然存在。
- 公共内存池会将所有待处理交易暴露给抢先交易的搜索者。
- 提交-揭示方案通过将哈希值提交与交易内容揭示分开,从而隐藏交易内容。
- 阈值加密内存池在订单顺序确定后,使用由委员会持有的密钥份额进行解密。
- Shutter Network 于2024年在 Gnosis Chain 上线,采用阈值加密。
- 私有订单流通道绕过了公共内存池,而是将信任集中在区块构建者身上。
- 与公有链相比,加密内存池会增加延迟和信任假设。
练习 九、六、三、一
9收集列出2023年至2024年在以太坊或Solana上观察到的9种具体的MEV提取案例或类型,并说明是哪一层级(构建者、搜索者或用户)获得了收益。
6归类按照由谁承担损失,将这9项归为6组。
3提炼将这6组归纳为3种机制,说明排序优势如何转化为利润。
1凝结用一句话说明:MEV 是合约代码的缺陷,还是交易排序的缺陷?为什么?
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。
- P. Daian et al., 'Flash Boys 2.0' (IEEE S&P 2020, arXiv 2019)
- Flashbots documentation on private transaction relays
- Jito documentation on bundles and tips
- E. Budish, P. Cramton & J. Shim, 'The High-Frequency Trading Arms Race: Frequent Batch Auctions as a Market Design Response', Quarterly Journal of Economics (2015)
- CoW Protocol Documentation, 'Batch Auctions'
- Penumbra protocol specification: DEX (batch swaps)
- Shutter Network documentation
- Flashbots Protect documentation
- S. Yang et al., 'SoK: MEV Countermeasures: Theory and Practice' (2022)