
上一期,我們討論了MEV的不同類型,現在讓我們把目光聚焦到MEV中最臭名昭著的一類攻擊——三明治攻擊。

圖1:2025.1.1 - 2025.4.10 期間 遭受三明治攻擊的TOKEN Top50
根據BlockRazor三明治檢測收集的數據,在過去3個月中,三明治攻擊的常用TOKEN呈現分散性,除了BTCB與ETH之外,主要攻擊對象均為Meme幣。Meme幣價格波動劇烈(相較主流幣),使用者為成功交易Meme幣,通常會設置較大滑點以避免交易失敗,高滑點和高價格波動性使得Meme幣成為三明治攻擊的絕佳獵物。
在BSC Meme幣活躍期間,我們觀察到了三明治攻擊現象的顯著增加,甚至連FourMeme平台的發射交易也遭受了三明治攻擊[1]。2025年3月18日,FourMeme在為Mubaraking(0xbe1171610cFD279b8adC6A80240D541Fd9a4b087)這一meme幣創建流動性時遭到了三明治攻擊。有攻擊者搶跑了該筆交易,提前建立了幣對池並往池中添加了87.90個BNB,這使得Fourmeme往該池中添加流動性時的價格產生了顯著偏離,隨後攻擊者在後置交易中撤回了87.9個BNB的流動性,並賣出持有的Mubaraking(262.3M MubaraKing → 20.26 BNB)。這些Mubaraking的買入價為9.06個BNB,攻擊者在本次攻擊中獲得11.2個BNB的利潤。
毫無疑問,三明治攻擊為Meme使用者帶來了糟糕的體驗,拿走了本該屬於Meme使用者的蛋糕。

圖2:2025.3.18 Four.meme平台添加流動性池時遭到三明治攻擊
BSC三明治攻防簡史
三明治攻擊在許多鏈上都長期存在,這裡我們著重關注BSC。為了更清晰的闡述BSC鏈上三明治機器人的發展演變情況,我們將其劃分為三個不同时代:

野蠻時代
我們將這一時代定義為BSC上安全RPC應用出現並推廣之前。
野蠻時代的普通交易幾乎都通過mempool發送,鏈上幾乎不存在專門針對三明治攻擊的防護,只有三明治機器人之間的橫向競爭與機會挖掘。
野蠻時代可以根據BSC-PBS(即BEP 322協議實施)進展進行再次細分:
BEP 322實施前
此時的三明治攻擊主要通過GasWar實現。GasWar是一種基於Gas Price的區塊空間競價現象,使用者通過不斷提高Gas Price來提升交易的競爭力,使交易能夠更快被打包進入區塊並取得更靠前的位置。這種現象被三明治機器人用於三明治攻擊,便形成了GasWar三明治——三明治機器人在捕獲到受害者交易後,提交一筆高Gas Price的搶跑交易,使得買入交易在區塊中的位置落在受害者交易之前,從而完成搶跑。
0x00…e534是一個典型GasWar三明治機器人,下面的圖表是一個典型的GasWar攻擊案例。受害者交易0xfd…68ca的Gas Price為3 Gwei,攻擊者構建了一筆買入交易0xad…e7e3,設置的Gas Price高達32.743267649 Gwei,使得該筆交易在區塊中的排序高於受害者交易。之後,攻擊者再構造了一筆賣出交易,設置Gas Price為3 Gwei,將買入交易中買入的幣種全額賣出,獲得利潤。例子中的搶跑交易之所以有極高的Gas Price,是因為同一個機會被多個三明治機器人盯上,這些機器人之間通過不斷提升Gas Price來競得該次機會,最終0x00…e534贏得了本次GasWar。


圖3:Gas War三明治攻擊在區塊中的交易排序情況示意圖
BEP 322實施后
PBS的實施是一個漸進的過程,最初鏈上有多個MEV解決方案供應商,分別與一定數量的驗證者集成,由於解決方案實現細節不同,BSC驗證者集成的MEV解決方案覆蓋度並不高。在BEP 322實施後,驗證者集成了統一的MEV解決方案,Builder服務趨於統一,三明治機器人可通過監聽Mempool交易後直接構造Bundle進行攻擊,其開發成本與攻擊成本均有所下降,導致這一階段的三明治機器人極其猖獗。
下圖是一個典型的原子三明治攻擊例子:0x52…1798是鏈上頭部的原子化三明治攻擊合約,它通過mempool監聽到0x9e…300a這筆交易需要買入5M的BDOG,於是構造了兩筆交易——一筆為買入BDOG,一筆為賣出BDOG,並使用SendBundle方法將三筆交易按照買入交易-受害者交易-賣出交易的順序發送給Builder,在攻擊成功的情況下,便可獲得利潤。如果攻擊失敗,則買入交易和賣出交易將不會被打包出塊,攻擊者為此次攻擊支付的成本為0。

圖4:原子化三明治攻擊在區塊中的交易排序情況示意圖

圖5:TOKEN交易視角下的原子三明治攻擊示意圖
由於這一時期的攻擊成本極低,鏈上有大量活躍的原子化三明治攻擊合約,例如0xB6...6C95、0xb4…83b7、0xB5…9D95等合約地址,自合約創建以來均可觀察到大量的三明治攻擊,對使用者體驗造成了惡劣影響。
RPC時代
在以BlockRazor Scutum為代表的安全RPC誕生並推廣之後,通過安全RPC實現上鏈的交易能夠避免被三明治機器人監聽並組成捆綁交易,從而避免攻擊。這一時代的三明治攻擊手法並無太多改變,只是RPC的隱私保護減少了三明治的機會總量。然而,由於多方面原因,僅有不到40%的交易通過RPC獲得了保護,大部分交易依然面臨著三明治攻擊風險。
- 許多交易Bot、錢包Swap並未意識到為使用者配置三明治保護的重要性(這麼做對bot、錢包本身沒有顯著的經濟收益),導致交易Bot、錢包Swap成為三明治攻擊的重災區。
- 部分早期RPC在上鏈速度方面存在較為顯著的延遲,造成使用者交易體驗不佳,給使用者留下了RPC會會導致交易變慢的刻板印象。在追求速度的主要目標下,這些使用者只能冒著被三明治攻擊的風險繼續使用Mempool。
GWA時代
為進一步解決BSC鏈上的三明治攻擊問題,Binance官方聯合BlockRazor、48 Club等機構組建了GoodWill Alliance(善意聯盟)。善意聯盟成員在Builder中引入三明治檢測工具,將檢測到的三明治攻擊進行排除,從而減少區塊中的三明治攻擊數量。
在3月20日,Blockrazor、48Club引入三明治檢測後,BSC鏈上可檢測到的三明治攻擊顯著下降,但也直接導致一些頂尖的三明治機器人開始嘗試更為隱蔽、複雜的三明治攻擊方法:非原子三明治攻擊。這種三明治攻擊的思路是將買入交易與賣出交易偽裝成普通的Swap交易,通過一定方法控制其與受害者交易之間的排序關係來完成攻擊。
單交易捆綁三明治
原子化三明治中,Bundle由買入交易-受害者交易-賣出交易一共3筆交易組成。在單交易捆綁三明治中,Bundle由買入交易-受害者交易(買入捆綁)或受害者交易-賣出交易(賣出捆綁)組成。攻擊者有兩種攻擊方式:①通過買入捆綁確保買入交易在受害者交易之前,再單獨提交一筆Backrun的賣出交易;②通過賣出捆綁確保賣出交易在受害者交易之後,並通過其他方式(單交易Bundle或高Gas Price)操縱排序完成買入交易搶跑。
無捆綁三明治
其思路與野蠻時代的GasWar類似,通過單交易bundle或高Gas Price的方式,確保買入交易排在受害者交易之前,而賣出交易在受害者交易之後,下圖所示的例子即為一次無捆綁三明治攻擊。

圖6:無捆綁三明治攻擊在區塊中的交易排序情況示意圖

圖7:TOKEN交易視角下的無捆綁三明治攻擊示意圖
跨塊三明治
除了同塊三明治攻擊之外,我們甚至還觀察到了一些跨塊三明治攻擊,在這種攻擊類型下,買入交易與受害者交易在一個塊中並滿足買入交易在受害者交易之前,而賣出交易則出現在下一個塊中。如下圖例子中買入交易與受害者交易均包含在48344362號區塊,而賣出交易則被納入48344363號區塊。

圖8:跨塊非原子三明治攻擊在區塊中的交易排序情況示意圖

圖9:TOKEN交易視角下的跨塊三明治攻擊示意圖
為什麼三明治難以解決?
三明治問題是一個鏈原生問題,與區塊構建、DEX交易密切相關。
區塊構建
交易廣播
Mempool交易具有全網可見性,使得三明治機器人能夠發現獵物。
交易排序
我們在《BSC MEV101》一文中已經討論,為在有限區塊空間中最大化區塊價值,從而為鏈的基礎設施供應方(提議者)提供回報,交易將基於價值排序而非時間排序,這為三明治攻擊創造了排序空間。
交易捆綁
交易捆綁機制使得三明治攻擊能夠原子化——如果三明治攻擊沒有成功,那麼攻擊者的交易將不會出現在區塊中,這使得攻擊成本變得非常低(攻擊成功時,攻擊者總能獲取利潤,而攻擊失敗時,攻擊者甚至無需為此次攻擊支付gas費用,因為捆綁交易會被取消而不是執行失敗)。在Goodwill Alliance成立後,交易捆綁機制不再為三明治攻擊者提供便利——要判斷一個捆綁是否為三明治攻擊十分簡單,Builder會直接將這些捆綁交易排除在外。
DEX交易
滑點引起的價格空間
DEX交易需要設置滑點,以保證交易順利執行。滑點代表可接受波動範圍,也表示使用者可接受的剝削範圍——利用交易排序,搶跑使用者買入交易,使價格落在使用者可接受的最大範圍內完成交易。
三明治治理是一個經濟性問題
在不打破鏈原生框架的情況下,三明治的治理將轉變成一個經濟性問題——如何讓三明治攻擊不再有利可圖。RPC時代,通過RPC發送的隱私交易對攻擊者不可見,減少了三明治的機會總量。GWA使三明治機器人攻擊成功率下降,並陷入三明治檢測攻防,提高了三明治攻擊的顯性成本。(由於失敗率的存在,非原子三明治攻擊是一種數學期望遊戲)。這些治理方式使三明治市場的格局發生改變(一些典型的三明治機器人停止了交易,但我們並不能確認其是否真的完全退出了三明治遊戲),在新的市場空間下尋找再平衡點。

圖10:野蠻時代的典型三明治機器人(0x00…e534)在2024年1月已經停機

圖11:RPC時代的典型三明治機器人(0x52…1798)在2025年3月18日已經停機
如何儘量避免三明治?
正如我們在上一節中所討論的一樣,三明治難以根除,因此我們使用儘量避免,而非絕對避免一詞。我們認為目前對三明治的防禦主要包括以下幾個方面:
避免交易被三明治機器人捕獲
使用RPC隱私交易
這是生態方面的解決方案,使用成本極低,適用於錢包、交易平台等。RPC會在使用者允許的情況下將交易進行拍賣,可能導致潛在的信息洩露,進而招來三明治攻擊。這種防禦方式依賴於RPC服務商、構建器與驗證者的Reputation,如Solana上由於驗證者作惡使得發往jito的三明治保護交易遭受到了三明治攻擊[3]:Jito為使用者提供了防夾功能,使用者可以通過添加防夾小費的方式獲得Jito提供的防夾服務來避免三明治攻擊。然而在驗證者作惡的情況下,這種保護沒有任何作用——儘管Solana基金會在過去一年中花費了大量精力,但驗證者作惡現象導致的三明治攻擊依然大量存在。

圖12:Solana三明治示意圖

圖13:Solana三明治機器人GHPC…T29e在24小時內的攻擊分布情況揭示了驗證者作惡現象的存在
直接將交易發送給Builder
這是目前安全性最高的一種方式。相較於隱私RPC,Builder不會將交易進行拍賣,因而能夠保障交易的全隱私性。對於安全性要求高的使用者可以自行對接Builder的Private接口:BlockRazor Send-Privatetransacion。另外,Scutum的全隱私模式也支持直接將交易發送給Builder,不具備接口對接能力的使用者可選擇直接使用Scutum全隱私模式。
從區塊生產鏈路進行治理
BSC為我們示範了通過builder、驗證者形成善意聯盟的方式能夠極大程度打擊三明治機器人。自善意聯盟成立以來,BSC上的三明治數量明顯下降,但由於三明治攻擊的基礎條件依然存在,仍然無法100%避免,一場三明治機器人與治理方的技術攻防戰已經拉開帷幕。

圖14:三明治攻擊在GoodWill Alliance成立後顯著下降(https://dune.com/bnbchain/bnnbchain-mev-sandwich-status)
潛在的治理方向:DEX優化
為進一步解決三明治機器人問題,沿著經濟性問題的治理思路,我們認為CowSwap提出的FM-AMM函數[4]是一種潛在的治理方向:FM-AMM是一種可調幅自動做市商函數,它使得一組Swap交易完成之後的幣對價格與該組Swap的執行價格相等,從而減少了在DEX交易中的向三明治機器人暴露的價格空間。

圖15:FM-AMM函數下,交易價格等於交易執行後的幣對價格[4]
參考資料
[1] Four.Meme再次被黑:流動性漏洞“吞噬”174,000美元——meme幣還安全嗎? https://www.binance.com/zh-CN/square/post/21785190931170
[2]Sandwich trades status on BNBChain: https://dune.com/bnbchain/bnnbchain-mev-sandwich-status
[3]近期部分Jito驗證者存在洩露數據導致使用者區塊被夾問題:https://www.binance.com/zh-CN/square/post/21318544332170
[4] Arbitrageurs’ profits, LVR, and sandwich attacks: batch trading as an AMM design response :https://arxiv.org/pdf/2307.02074