什么是三明治攻击(Sandwich Attack)?如何保护自己?

2026-06-30分类:区块链技术 阅读(

三明治攻击(Sandwich Attack) 是 DeFi(去中心化金融)中一种常见的市场操纵形式,主要发生在去中心化交易所(DEX)上。攻击者利用区块链内存池(mempool)中已可见但尚未执行的交易进行操纵。

之所以称为“三明治”,是因为受害者的交易被攻击者的两笔交易“夹住”:一笔在前(front-run),一笔在后(back-run)。

三明治攻击主要出现在基于自动做市商(AMM)和流动性池的 DEX 上,例如 Uniswap 和 PancakeSwap。因为这些平台的交易在被打包进区块前是公开可见的,攻击者(通常是 MEV 机器人)可以提前发现并利用大额交易的机会。

本质上,三明治攻击是最大可提取价值(Maximal Extractable Value,MEV)的一种形式,区块生产者或机器人通过策略性地调整交易顺序来提取额外价值。

三明治攻击如何运作?

攻击者首先在内存池中寻找大额交易(这类交易通常会造成明显滑点),然后通过支付更高 Gas 费抢先执行自己的交易。受害者交易执行后(以更差的价格成交),攻击者再执行反向交易获利。

具体步骤:

  1. 发现大额交易 MEV 机器人监控内存池,发现一笔大额买入或卖出订单。
  2. 前置交易(Front-running) 攻击者立即以更高 Gas 费提交自己的交易,使其优先执行:
    • 若受害者是大额买入,攻击者先买入相同代币,推高价格。
    • 若受害者是大额卖出,攻击者先卖出,压低价格。
  3. 后置交易(Back-running) 受害者交易执行后(以更差价格成交),攻击者立即反向交易:
    • 前置买入后,在更高价格卖出。
    • 前置卖出后,在更低价格买回。

攻击者几乎无风险获利,而受害者则支付了更高的滑点成本。

示例: 假设 Uniswap 上 ETH/USDT 流动性池有 1,000 ETH 和 2,000,000 USDT(价格约 2,000 USDT/ETH)。某交易者想一次性买入 100 ETH。MEV 机器人发现这笔大额订单后,先用更高 Gas 费买入 50 ETH,推高池中 ETH 价格。受害者随后以更高价格成交,支付更多 USDT。紧接着机器人以更高价格卖出这 50 ETH,获利来自受害者额外承担的滑点损失。

图示:三明治攻击(Sandwich Attack)完整流程

三明治攻击的影响

受害者以比预期更差的价格成交,攻击者从中获利。这直接导致交易者实际交易成本上升,DEX 效率降低,尤其在大额交易或低流动性池中影响更明显。

此外,三明治攻击会损害 DeFi 的整体形象——虽然区块链透明公开是其优势,但也让此类攻击成为可能,诚实交易者往往成为最终受害者。

图示:MEV 机器人攻击类型对比(前置交易、后置交易、三明治攻击)

如何保护自己免受三明治攻击?

虽然无法完全消除风险,但以下方法可显著降低成为受害者的概率:

  1. 降低滑点容忍度 设置较低的滑点容忍度。如果价格被严重操纵,交易将失败而非以极差价格执行(注意:滑点设置过低可能导致低流动性交易对频繁失败)。
  2. 避免一次性大额市价单 将大额交易拆分成多笔小额订单,可减少价格冲击,降低对 MEV 机器人的吸引力。
  3. 使用提供 MEV 保护的 DEX 部分平台通过私有交易路由或特殊订单机制提供防前置/三明治攻击保护。
  4. 选择高流动性池交易 流动性越高,单笔交易的价格冲击越小,三明治攻击的获利空间也越小。
  5. 使用限价单(Limit Order) 自行设定最高买入价或最低卖出价,避免以比预期更差的价格成交。
  6. 通过中心化平台(CEX)交易 在 Finst 等中心化交易所,订单通过内部订单簿处理,不会提前暴露在公共内存池中,经典三明治攻击机制不适用。

总结

三明治攻击体现了公共区块链透明性的双刃剑特性。攻击者通过策略性地利用内存池中可见交易,几乎无风险地从其他交易者的价格冲击中获利。这导致交易成本上升、滑点增加,并降低 DeFi 市场的整体效率。

虽然三明治攻击主要发生在基于 AMM 的 DEX 上,但用户通过谨慎管理滑点设置、订单规模和流动性选择,可显著降低风险。此外,部分 DEX 提供额外 MEV 保护,而中心化交易平台则提供了一种经典三明治机制不适用的替代方案。理解这些攻击的运作方式,对于任何活跃于加密市场的参与者而言都至关重要。

Tags: