
什么是三明治攻击(Sandwich Attack 如何吃掉交易者收益)
三明治攻击是什么:夹在你交易前后的一种“排序剥削”
三明治攻击(Sandwich Attack)的本质不是“破解账户”或“偷币”,而是一种利用区块链交易排序机制、以及 AMM(自动做市商)定价曲线的剥削结构:攻击者把自己的两笔交易分别放在你的交易之前和之后,形成“前置交易 + 受害者交易 + 后置交易”的夹心结构。
它通常发生在去中心化交易所(DEX)的链上兑换里:你的交易会对池子价格产生滑点,攻击者通过更快/更贵的打包方式(更高 gas、私有内存池、与出块者/打包者的交易通道等)让自己的交易排在你前面,先把价格推向对你不利的方向;等你按设定的最大可接受滑点成交后,攻击者再在你之后反向交易,把价格推回并锁定差价。这里的“吃掉收益”更多指:你的成交价变差、滑点变大、最终拿到的代币更少,并不需要你把资产直接转给攻击者。
在安全结构中,三明治攻击属于 MEV(Miner/Maximal Extractable Value,最大可提取价值)的一种实现形式:它利用“谁先被打包、谁后被打包”就能改变价格路径的事实,从交易排序中提取价值。重要性在于:它会把用户原本愿意支付给市场的滑点,转移成被第三方提取的额外成本,表现为隐形损耗。
用户最常见的误解是把它当成“项目方作恶”或“合约被黑”。实际上,很多三明治攻击并不依赖项目方权限,也不要求 DEX 合约存在漏洞;它更多是交易公开可见、可被重新排序的结构性后果。
它为什么能成立:AMM 定价、滑点容忍与交易可见性三件套
三明治攻击能成立,依赖三个机制同时存在:
1)AMM 的曲线定价与价格冲击:在 x*y=k 等 AMM 模型中,大额换币会改变池子中两种资产的比例,从而改变价格。你的交易越大、池子越浅,价格冲击越明显,越容易被“夹”。
2)滑点容忍(Slippage Tolerance)是可被利用的边界:用户为了避免交易失败,往往设置较高滑点。这个“你愿意接受的最差成交价”会变成攻击者计算空间:只要把价格推到不超过你滑点上限,你的交易仍会成交,但成交质量被显著稀释。
3)交易在被打包前的可见性与可排序性:多数链上交易在进入区块前会在公共内存池传播,任何人都能看到“你要用多少换多少、接受多少滑点”。攻击者据此构造两笔交易并争夺排序位置。
它的重要性在于:这不是偶发的“倒霉”,而是一个可规模化的结构。只要存在公开内存池与可竞价排序,就会有人持续寻找可夹的交易。

常见误解是认为“只要我用限价单就安全”。但在许多 DEX 里,用户提交的仍是按公式成交的 swap,所谓“限价”常是通过滑点或价格保护参数实现,仍可能被排序策略影响;另外,某些聚合器的路径拆分也可能让攻击面更复杂。
与 MEV、预言机、闪电贷的关系:它不是孤立攻击
MEV 是框架,三明治是其中一种策略。MEV 的本质定义是:在区块构建与交易排序过程中,排序者或参与者可以通过调整交易顺序、插入交易、重组路径来提取额外价值。三明治攻击就是“插入两笔交易”来提取价值的典型方式。重要性在于:当链上生态越繁荣、DEX 交易越多,MEV 竞争越激烈,普通交易越可能被当作“可提取价值”。
预言机(Oracle)与三明治攻击的关系在于价格来源:预言机是把链下或其他市场价格带到链上的机制,用于借贷、衍生品、清算等。三明治攻击主要发生在 AMM 现货兑换,但当某些协议把“DEX 即时报价”当作输入(例如用某池子价格做抵押品估值或触发条件),就可能让价格短时偏移带来连锁反应。重要性在于:如果协议的价格输入缺乏抗操纵设计,排序与短时价格波动会放大系统风险。误解在于把预言机当成“一个网站的报价”,忽略了它是可被设计成多源、延迟、加权、抗操纵的链上结构。
闪电贷(Flash Loan)并不等于黑客手段。它的定义是:在同一笔交易中无抵押借入资金并在交易结束前归还,否则整笔交易回滚。它在安全结构中的作用是“临时资本放大器”,能把某些操作的资金门槛降到几乎为零。对三明治攻击而言,闪电贷可被用来放大前置/后置交易的规模,从而在更浅的池子里制造更大的价格冲击。重要性在于:当资本门槛降低,攻击与套利的参与者更多、竞争更强,用户交易的隐形成本可能上升。常见误解是把闪电贷等同于“凭空印钱”,忽略其必须在同一交易内闭环归还的约束。
三明治攻击与“跑路/项目风险”不是一回事,但会叠加体验损耗
三明治攻击是交易层的排序剥削;而 Rug Pull 是什么(项目方如何卷走资金) 这类风险属于项目方或合约权限层:例如可随意增发、可提走流动性、可更改关键参数。两者机制不同:前者不需要项目方参与,后者往往与权限、合约后门、流动性控制相关。
不过它们会在用户体验上叠加:当某个代币池子很浅、交易量不大时,三明治攻击更容易发生;而池子是否“浅”,又与流动性结构有关,例如 锁池是什么(锁定流动性为何减少 Rug Pull 风险) 讨论的锁定流动性,主要是降低项目方直接抽走流动性的可能性,但并不自动消除三明治攻击,因为三明治依赖的是“可被影响的价格曲线 + 可排序的交易”。
三明治攻击为什么重要?因为它提醒用户:链上交易的风险不仅来自“项目是否可信”,也来自“市场微结构是否允许被排序剥削”。用户最常误解的是把成交变差归因于“DEX 收费高”或“自己手慢”,却忽略了这是可被系统性利用的排序机制结果。
理解这一点的价值在于:当你看到某笔 swap 的实际成交价明显劣于预期、且前后区块里出现高度相似的同向/反向交易时,应当把它理解为一种结构性现象——交易公开、可被插队、价格可被短时推移——而不是把所有损耗都归结为“行情波动”。



