三明治攻擊是什麼,跟一般認知的「搶跑」有什麼不同?
三明治攻擊是一種特定形式的 MEV(Miner/Maximal Extractable Value)掠奪:攻擊者發現有一筆大額的去中心化交易所(DEX)交易正在 mempool 裡等待確認,判斷這筆交易會推動價格往某個方向移動,於是在這筆交易「之前」搶先送出一筆同方向的交易(把價格先推高),等受害者的交易在更差的價格成交後,再立刻送出一筆反方向交易(把價格拉回並獲利了結)——受害者的交易被夾在攻擊者的兩筆交易中間,這也是「三明治」這個名字的由來。
單純的「搶跑」(front-running)只涉及攻擊者搶在受害者之前完成同方向交易,三明治攻擊則是搶跑加上事後平倉的組合技,需要攻擊者在同一個區塊(或極短時間內)完成兩筆交易,技術門檻與獲利模式都更明確。
三明治攻擊為什麼會出現,是什麼機制讓它有利可圖?
三明治攻擊之所以可行,根本原因在於以太坊等公鏈的交易在被打包進區塊之前,會先短暫停留在公開的 mempool 裡,任何人都可以看到這些尚未確認的交易內容。這種交易資訊的透明性(原本是為了讓網路節點能驗證交易),意外地讓攻擊者可以「預先看到」別人即將執行的交易,並利用區塊打包者(礦工或驗證者)願意優先處理出價更高 Gas 費的交易這個機制,插隊到受害者交易的前後。
AMM(自動做市商)類 DEX 的價格機制也放大了這個問題——交易量越大,對價格的滑點影響也越大,這代表大額交易的受害者「油水」也越多,這也是為什麼三明治攻擊特別集中鎖定大額 swap 交易。
三明治攻擊實際上怎麼執行,攻擊者需要具備什麼條件?
攻擊者通常需要一套自動化的 Agent 系統,持續監聽 mempool 裡的待確認交易,用演算法即時判斷哪些交易的規模與滑點設定值得攻擊(滑點容忍度設得越寬鬆的交易,可攻擊空間越大)。判斷符合條件後,Agent 會同時組裝兩筆交易——前置交易與後置交易,並支付比受害者交易更高的 Gas 費用,確保自己的前置交易能搶先被區塊打包者排進去。
近年因為單純比拼 Gas 費用的搶跑成本越來越高、且容易被其他 MEV 機器人競爭掉,很多攻擊者轉向使用私有交易池服務(例如 Flashbots 之類的基礎設施),直接跟區塊打包者協商交易順序,不需要在公開 mempool 裡跟其他 Agent 競價,這種做法讓攻擊更隱蔽、也更穩定成功。
三明治攻擊對一般用戶有什麼實際影響,該怎麼降低被攻擊的機率?
如果你在 DEX 上執行 swap 時遭遇三明治攻擊,實際影響是你的成交價會比預期更差——這個差額直接變成攻擊者的利潤,而且從交易介面上通常看不出來「這筆虧損是因為攻擊」,很容易被誤以為只是正常的市場滑點。
降低被攻擊機率的實用做法包括:把滑點容忍度設定得盡量貼近合理範圍(不要為了怕交易失敗而設得過寬)、使用具備 MEV 保護機制的交易路由(例如透過私有交易池送出交易,避免曝光在公開 mempool)、以及避免在流動性較淺的交易對上執行大額 swap(滑點空間越大,越容易被鎖定)。多數主流錢包與 DEX 前端目前已經內建部分 MEV 保護選項,值得在交易前確認是否已開啟。
2023 年一支知名的三明治攻擊 MEV 機器人被鏈上分析追蹤到單日透過夾單一位鯨魚用戶的大額 swap 交易,單筆獲利超過 20 萬美元,事件曝光後引發社群對 mempool 透明性與私有交易池普及必要性的大量討論。
站在攻擊者角度,優點是不需要控制大量資金即可透過交易資訊不對稱穩定獲利;站在一般用戶角度,缺點是實際成交價可能顯著劣於預期,且損失往往被誤認為單純的市場滑點而不易察覺,需要額外設定(收窄滑點、使用私有交易池)才能有效降低風險。