三明治攻擊是什麼,跟一般認知的滑點有什麼不同?
三明治攻擊指的是攻擊者利用鏈上交易資訊公開可見的特性,在偵測到某筆即將執行的大額交易後,搶先在這筆交易前面插入一筆同方向的交易,等受害者的交易把價格推高(或壓低)之後,緊接著插入第二筆反方向的交易獲利了結。整個過程因為受害者的交易被夾在攻擊者的兩筆交易正中間,形象上就像三明治的夾心,因而得名。
跟一般認知的滑點最大的不同在於「是否有人為刻意操縱」:一般滑點是 AMM 定價機制的自然數學結果,即使沒有任何攻擊者存在,任何規模的交易本來就會因為資金池比例改變而產生一定程度的滑點;三明治攻擊則是攻擊者刻意利用你的交易會造成的價格影響,主動插入交易來放大自己的獲利,讓你實際承受的滑點幅度,遠比單純的自然滑點更嚴重。可以說三明治攻擊是「利用滑點機制主動發動的攻擊」,而不是滑點本身。
三明治攻擊為什麼會發生,攻擊者能持續執行的技術基礎是什麼?
三明治攻擊之所以能存在,源自兩個區塊鏈原生的結構特性:一是交易在被正式打包進區塊之前,通常會先短暫停留在公開的 mempool(等待區)裡,理論上任何人都能看到這些尚未確認的交易內容;二是區塊生產者對於「這些看得到的交易要用什麼順序放進區塊」擁有相當大的自由裁量權,只要願意支付更高的優先費,理論上就能讓自己的交易搶在別人前面被確認。這兩個特性結合起來,讓攻擊者只要持續監控 mempool,一旦發現有利可圖的大額交易,就能透過支付足夠高的優先費,確保自己的兩筆交易分別插在受害者交易的前後。
這整套攻擊流程高度依賴自動化程式執行,因為從偵測交易、計算獲利空間、送出交易、確保交易順序正確,整個過程通常需要在極短時間內完成(甚至在同一個區塊被打包之前),人工操作幾乎不可能跟上這個速度,這也是為什麼三明治攻擊在實務上幾乎全部由專門的 MEV 機器人執行。
三明治攻擊具體怎麼執行,一筆完整的攻擊流程是什麼?
典型的三明治攻擊流程包含幾個步驟:
這整套流程對攻擊者而言幾乎沒有方向性風險——因為買入與賣出動作在極短時間內完成,攻擊者承擔的價格波動風險極低,主要成本只有交易手續費與優先費。
三明治攻擊對一般用戶有什麼實際影響,該怎麼降低被攻擊的機率?
對用戶而言,三明治攻擊的直接影響是實際成交價格比預期更差,這筆額外損失完全來自攻擊者刻意的操作,不是市場自然波動造成的。幾個具體可以降低被攻擊機率的做法:收緊滑點容忍度設定,因為攻擊者能榨取的利潤空間,直接受限於你設定的滑點容忍範圍,容忍度設得越緊,攻擊者能操作的價差空間越小,甚至可能小到扣除攻擊者自己的 Gas 成本後不再有利可圖;使用具備 MEV 保護功能的交易路由服務,這類服務通常透過私有交易池,讓你的交易在被正式打包前不會出現在公開的 mempool 裡,攻擊者因此完全看不到你的交易意圖,也就無從發動攻擊;把大額交易拆成幾筆較小的交易分批執行,降低單筆交易的價格影響幅度,讓每一筆對攻擊者而言的潛在獲利都變得比較不吸引人。
如果你想確認自己過去的某筆交易是否曾遭受三明治攻擊,可以用區塊鏈瀏覽器查看那筆交易所在的區塊,觀察緊鄰在你的交易前後的其他交易——如果看到有一筆跟你交易方向相同、發生在你之前,以及另一筆方向相反、發生在你之後,且這兩筆交易來自同一個地址,這就是典型的三明治攻擊模式。
2025 年 3 月,一名交易者在 Uniswap V3 的 USDC-USDT 資金池執行一筆約 22 萬美元的穩定幣兌換,MEV 機器人在短短幾秒內偵測到這筆交易,暫時抽走資金池裡的 USDC 流動性、讓這筆交易在極差的價格下成交,隨即把流動性補回,整起攻擊讓交易者實際損失約 21.5 萬美元,接近全損,這起事件因為受害資產是理論上價格波動極小的穩定幣配對、損失比例卻高達近 98%,在社群裡引發廣泛討論。
此為安全風險詞條,無正向取捨可言——三明治攻擊對受害用戶純粹是損失,唯一能討論的取捨在於:區塊鏈交易資訊公開透明、排序權可被市場化競價這兩個特性,同時是去中心化系統的優點與三明治攻擊得以存在的根源,這是整個架構設計的必然副產品,不是用戶能片面改變的變數,用戶能做的主要是透過收緊滑點容忍度、使用 MEV 保護路由降低自己被鎖定的機率。