你在 Uniswap 上用 ETH 换 USDC。交易确认后,你发现实际拿到的 USDC 比预期少了不少。查看交易记录,你会发现在你的交易前面和后面各有一笔交易,执行地址是同一个。你的交易被”夹”了。

这就是三明治攻击(Sandwich Attack),去中心化交易所上最常见的 MEV(最大可提取价值)剥削方式。

核心要点: 三明治攻击的原理是抢跑。MEV 机器人监控内存池里的待处理交易,发现你的大额买入后,先于你买入推高价格,然后等你的买入进一步推高价格后卖出。你的滑点容忍度设置越高,被攻击的金额越大。

攻击原理

三明治攻击分三步:

第一步,监控。MEV 机器人的搜索者(Searcher)实时监控以太坊内存池(mempool),寻找即将执行的大额 DEX 交易。当它们发现一笔有利可图的交易时,会立即准备两笔交易:一笔买入、一笔卖出。

第二步,抢跑(Front-running)。搜索者通过贿赂矿工/验证者,把自己的买入交易排在你的买入交易之前执行。这叫”优先费”(priority fee)竞拍。谁的 Gas 小费高,谁的交易排在前面。

搜索者的买入交易推高了代币价格。紧接着你的买入交易执行,由于价格已经被推高了,你买到的是更贵的代币。

第三步,尾随(Back-running)。你的买入执行完后,代币价格进一步上涨。搜索者立即执行卖出交易,在更高的价格卖出第一步买入的代币,赚取差价。

整个过程在同一个区块内完成。搜索者买入的价格比卖出低,差价就是你的损失。

一个具体例子

假设 Uniswap 上某代币当前价格是 1.0 ETH。

你在内存池提交了一笔买入 100 ETH 价值的代币的交易,滑点容忍度设为 5%。

MEV 机器人看到这笔交易。它知道你的 100 ETH 买入会显著推高代币价格。

机器人先买入 50 ETH 的代币(抢跑),代币价格从 1.0 ETH 涨到 1.2 ETH。

你的交易接着执行。因为价格已经是 1.2 ETH 了,你用 100 ETH 只买到了更少的代币。加上你的交易进一步推高价格到 1.4 ETH。

机器人卖出刚才买入的代币(尾随),在 1.4 ETH 的价格卖出,赚取 0.2 ETH 的差价利润。

你的实际损失是什么?如果没有三明治攻击,你应该在 1.0 ETH 的价格买入代币。但因为被夹了,你实际买入的价格被大幅推高。差价就是被 MEV 机器人拿走的价值。

为什么滑点设置很重要

滑点容忍度(Slippage Tolerance)是你允许的实际成交价格与预期价格的最大偏差。如果你设 5% 的滑点,意味着你愿意接受比预期差 5% 的价格。

这个设置是三明治攻击的关键变量。攻击者能从你的交易中提取多少价值,取决于你的滑点容忍度有多高:

如果你设 1% 的滑点,你的交易在价格偏差超过 1% 时会自动回滚。攻击者的抢跑推高了价格后,你的交易就会失败,攻击者也赚不到钱(因为他的抢跑交易和尾随交易需要你的交易在中间才会获利)。

如果你设 10% 的滑点,攻击者有很大的操作空间,可以从你的交易中提取大量价值。

最佳实践: 滑点容忍度尽量设低(0.5% 到 1%)。如果因为流动性不足导致交易失败,可以略增,但不要超过 3%。

如何知道自己被夹了

检查你的交易是否被三明治攻击:

打开 Etherscan 或 MetaMask 交易详情,查看你的交易所在区块。检查你的交易前一笔和后一笔,如果它们是同一个地址、交易同一个代币对、方向相反(前面是买入,后面是卖出),你就是被三明治了。

你还可以使用 EigenPhi、Phalcon 或 Dune Analytics 等 MEV 分析工具来检查你的交易是否被攻击以及损失了多少。

防范方法

降低滑点容忍度。 这是最直接有效的方法。在 Uniswap、SushiSwap 等 DEX 上,手动设置滑点为 0.5% 或更低。

使用 MEV 保护服务。 一些 DEX 聚合器和协议提供 MEV 保护:

  • Uniswap 的交易界面默认开启了 MEV 保护(通过 Flashbots 或其他私有内存池路由)
  • 1inch 的 Fusion 模式通过批处理拍卖减少 MEV
  • CoWSwap 通过批量结算和签名拍卖机制消除 MEV

这些服务的基本原理是不把你的交易广播到公开内存池,而是通过私有渠道发送,使 MEV 机器人无法提前看到你的交易。

拆分大额交易。 如果你需要交易大额资金,拆分成多笔小额交易,分散在不同时间段执行。大额交易更容易吸引三明治攻击者的注意。

避免低流动性代币。 在低流动性的代币对上交易,滑点本来就大,三明治攻击的利润空间也更大。

三明治攻击不会消失,因为 MEV 是区块链网络的固有属性。只要你用公开内存池提交 DEX 交易,就有被攻击的可能。你能做的是降低暴露面:用 MEV 保护路由、设置低滑点、拆分大额交易。