在DeFi交易中,“被夹”(即三明治攻击)是一种通过操纵交易顺序和价格差来掠夺用户资产的MEV(最大可提取价值)攻击手段。其核心原理如下:
🔍 三明治攻击的基本流程
攻击者通过监控区块链内存池(Mempool)中的待处理交易,锁定目标用户的交易后,按以下步骤操作:
- 前置交易(Front-Run)
攻击者以更高的Gas费抢先提交一笔交易,通过大额买入或卖出目标代币,人为改变流动性池中的价格。例如,用户计划用USDC兑换USDT时,攻击者会先买入大量USDT,导致USDT价格被抬高。 - 夹击目标交易
用户交易在价格已被操纵后执行。由于流动性池的代币比例被前置交易破坏,用户实际兑换的金额显著低于预期(例如原本预期兑换5,271 USDT,实际仅获得3,378 USDT)。 - 后置交易(Back-Run)
攻击者立即以高价卖出前置交易中获得的代币,套取差价利润。例如,将此前低价买入的USDT以用户交易后的高价卖出,完成低买高卖的闭环。
⚙️ 关键机制与条件
- 内存池透明性与Gas费竞争
区块链内存池的公开性允许攻击者实时监控交易,而Gas费机制使攻击者可通过支付更高费用抢占交易打包顺序。 - 流动性池的脆弱性
低流动性池更容易被攻击:- 攻击者只需少量资金即可显著改变代币价格(如抽空流动性池的USDC/USDT后重新注入)。
- 大额交易会引发更大的价格滑点,为攻击者创造更大套利空间。
- 滑点容忍度的利用
用户若设置较高的滑点容忍度(如5%),攻击者可利用价格波动扩大利润;若滑点过低,用户交易可能失败,但攻击者仍可能通过其他策略获利。 - 链特性的影响
- 以太坊:依赖公开内存池,Gas费竞价机制使攻击成本较高。
- Solana:验证节点集中化可能泄露交易数据,攻击者无需Gas竞价即可实现精准夹击。
💥 被夹的典型场景(以USDC-USDT兑换为例)
- 攻击者抽空流动性
攻击者通过闪电贷借入资金,将流动性池中的USDC全部换出,导致USDT价格虚高。 - 用户交易执行
用户以虚高价格兑换USDT,实际获得金额大幅缩水(如220,764 USDC仅兑换5,271 USDT)。 - 攻击者恢复流动性并套利
攻击者将USDT重新注入流动性池,并通过后置交易卖出获利,同时支付矿工高额Gas费以保障交易顺序。
🛡️ 防御措施
- 降低滑点容忍度:设置滑点≤0.5%,但需权衡交易成功率。
- 使用隐私交易通道:通过MEV Blocker等工具隐藏交易,避免暴露在公共内存池。
- 选择高流动性池:流动性越高,价格操纵成本越大。
- 拆分大额交易:将单笔交易拆分为多笔小额操作,降低攻击吸引力。
© 版权声明
文章版权归作者所有,未经允许请勿转载。