什麼是三明治攻擊?MEV機器人如何從你的DEX交易中竊取利潤

三明治攻擊是一種MEV(最大可提取價值)利用方式,機器人檢測到待處理的交換交易後,在受害者交易的前後放置自己的交易,從由此產生的價格變動中提取利潤。

這種攻擊發生在每個擁有基於AMM的去中心化交易所的區塊鏈上 — Solana、Ethereum、BSC、Base等。它是DEX交易者遭受意外損失的最常見原因之一,大多數受害者甚至不知道自己被攻擊了。

本指南涵蓋三明治攻擊背後的機制、使其有利可圖的條件以及可用的保護方法。

區塊鏈交易的處理方式

要理解三明治攻擊的工作原理,首先需要了解Solana、Ethereum和BSC等區塊鏈如何處理交易。

區塊鏈不會在你點擊「交換」的那一刻逐一處理交易。相反,它們以批處理方式工作。區塊鏈收集所有傳入交易,將它們分組,然後一次性處理整個批次。每個批次稱為區塊,生成一個區塊所需的時間稱為出塊時間

區塊鏈出塊時間
Solana~0.4秒
Monad~0.4秒
Arbitrum~0.25秒
Base~2秒
Polygon~2秒
Optimism~2秒
Avalanche~2秒
BNB Chain~3秒
Ethereum~12秒

在Ethereum上,大約每12秒產生一個新區塊。以下示例展示了在同一個12秒窗口內不同時間提交的五筆交易如何全部一起確認 — 但以與提交順序無關的順序執行:

交易提交時間確認時間執行順序
交易 A下午3:00:01下午3:00:12第3
交易 B下午3:00:03下午3:00:12第1
交易 C下午3:00:05下午3:00:12第5
交易 D下午3:00:08下午3:00:12第2
交易 E下午3:00:11下午3:00:12第4

所有五筆交易在區塊創建時的下午3:00:12確認。但執行順序 — 實際決定誰先交易的順序 — 是由生成區塊的驗證者決定的,而不是由誰先提交決定。

優先費用、MEV小費或與驗證者的直接關係等因素會影響交易在序列中的位置。交易B是第二個提交的,但第一個執行。交易A是第一個提交的,但第三個執行。

這就是三明治攻擊成為可能的根本原因。MEV機器人監控管道中的待處理交易,透過支付更高的費用,它們可以操縱區塊內的執行順序,將自己的交易放在你的前後。

三明治攻擊的工作原理

三明治攻擊利用了交換會移動流動性池中代幣價格的事實。以下是逐步說明。

  1. 你提交交換:你在DEX上提交購買代幣X的交易。在此交易被包含在區塊之前,它進入網路的交易管道 — 在Ethereum上是公共記憶體池,在Solana上是交易轉發層 — 在那裡它短暫可見。
  2. 機器人檢測到你的交易:持續掃描管道的MEV機器人發現你的待處理交換。它看到你購買的數量並計算你的交易將使價格移動多少。你的交易相對於池的流動性越大,價格移動越多 — 攻擊越有利可圖。
  3. 機器人搶跑你:機器人以更高的優先費用提交自己的買入交易,確保在同一區塊中你之前執行。機器人的購買推高了代幣價格。
  4. 你的交易執行:你的交換以現在更高的價格進行。你收到的代幣比沒有機器人干擾時要少。
  5. 機器人尾隨你:緊接著你的交易之後,機器人賣出步驟3中購買的代幣。你的購買創造了額外的上行價格壓力,機器人以那個更高的價格賣出。

機器人賣出後,價格回落。你持有的代幣現在的價值低於你支付的價格。機器人捕獲了其買入價和賣出價之間的差價 — 直接從你的交易中提取的價值。

整個序列發生在單個區塊內。

Ethereum DEX上真實三明治攻擊示例

上圖顯示了在Ethereum Uniswap V2 Pool上捕獲的真實三明治攻擊。三筆交易在完全相同的時間(上午06:28:23)在同一區塊內執行:

  1. **1FaE13(MEV機器人)**購買價值$616.13的DAT代幣 — 搶跑。
  2. **8a23ff(受害者)**購買價值$1.9的DAT代幣 — 以現在更高的價格執行。
  3. **1FaE13(MEV機器人)**賣出價值$617.84的DAT代幣 — 尾隨,獲取約$1.71的利潤。

受害者$1.9的交易很小,但足以讓機器人提取利潤。整個攻擊 — 買入、受害者、賣出 — 發生在單個區塊中。

你的交易何時成為三明治攻擊目標

不是每個交換都會被三明治。MEV機器人只在預期利潤超過成本時才攻擊。以下條件使你的交易成為目標:

  • **相對於池大小的大額交易。**在$500流動性的池中$50的交換會使價格移動約10%或更多 — 三明治機器人的有利可圖目標。在$5,000,000流動性的池中同樣的$50幾乎不移動價格,不值得攻擊。
  • **高滑點容忍度。**將滑點設置為10%或更高,意味著你會接受明顯更差的價格。這給了機器人在你的交易回滾前推高價格的更多空間。
  • **低流動性代幣。**新推出的代幣和迷因幣往往擁有小型池。即使適度的交換也會產生足夠的價格變動讓機器人利用。

如何防護三明治攻擊

1. 使用MEV保護交易路由

最有效的保護是從一開始就防止機器人看到你的交易。

  • 在Solana上Jito捆綁繞過公共交易管道,將你的交換直接發送到Jito區塊引擎,MEV機器人無法觀察到。大多數Solana交易工具已經支援這一功能 — 如果你看到「Jito Tip」欄位,你的交易正在透過Jito路由。Jito還提供jitodontfront機制,確保你的交易在包含它的任何捆綁中必須首先出現。
  • 在Ethereum和EVM鏈上:Flashbots Protect、MEV Blocker和私有RPC等服務透過私有記憶體池而非公共記憶體池路由你的交易。一些錢包和DEX前端將此作為內建選項提供。

2. 設置嚴格的滑點

滑點容忍度定義了你願意接受的最差價格。如果你設置1%的滑點,你的交易將在價格比預期差超過1%時失敗而不是執行。

這限制了機器人的利潤空間。如果機器人在你的交易回滾前只能提取很少的金額,在考慮機器人自身的費用和小費成本後,攻擊將變得無利可圖。

對於大多數交換,1-3%的滑點就足夠了。僅在極端波動的代幣或你願意接受更差價格的發射期間才增加。

3. 拆分大額交易

不要在一筆交易中交換大量金額,而是拆分為多個較小的交換。每個較小的交易價格影響較小,使每一個對三明治機器人來說都不那麼有吸引力。

缺點是更多的交易和更多的費用,但避免三明治攻擊節省的金額通常超過額外成本。

4. 避免極低流動性的池

如果池的流動性非常低,即使小額交易也會產生巨大的價格影響。這些池是三明治機器人最容易的目標。在交換前在DEXScreener、Birdeye或DexTools上檢查池的流動性。

5. 事後檢查你的交易

sandwiched.me等工具讓你檢查錢包是否受到三明治攻擊的影響。審查過去的交易有助於識別模式並調整策略 — 更嚴格的滑點、更小的交易或切換到MEV保護路由。

三明治攻擊 vs. 其他價格下跌

購買後的每次損失都不是三明治攻擊。

  • 三明治攻擊:價格在你的交易之前急劇上升,之後立即下降 — 在同一區塊或下一區塊內。在區塊瀏覽器上,你可以看到同一錢包或程式在你之前的大額買入和之後的大額賣出。
  • 正常賣壓:購買後價格在幾分鐘到幾小時內逐漸下降。其他持有者在賣出,這是正常的市場行為。
  • 跑路:開發者從池中移除所有流動性。價格立即跌至接近零,代幣變得不可交易。

總結

三明治攻擊利用了DEX價格根據相對於池流動性的交易大小而變動,以及區塊內的交易排序由驗證者控制而非由誰先提交決定的事實。

保護自己:使用MEV保護路由(Solana上的Jito,Ethereum上的Flashbots Protect),設置嚴格的滑點,拆分大額交易,交換前檢查池流動性。

FAQ

在任何鏈上都可能被三明治嗎?

是的。任何擁有基於AMM的DEX的鏈都容易受到影響 — Solana、Ethereum、BSC、Base、Polygon、Arbitrum等。脆弱性來自AMM計算價格的方式,而不是任何特定的鏈或DEX。

高滑點意味著一定會被三明治嗎?

不是自動的,但會顯著增加風險。高滑點告訴網路你會接受更差的價格,這給了機器人更多提取利潤的空間。盡量保持低滑點。

三明治攻擊是違法的嗎?

在大多數司法管轄區沒有明確的法律框架。在Solana上,Solana基金會和Jito已對參與三明治攻擊的驗證者採取行動,將他們從委託計畫中移除。在Ethereum上,Flashbots和其他基礎設施提供商致力於減少MEV提取。