作者:Daii來源:mirror
上周三(3月12日),一位加密交易者,被MEV攻擊一次性損失21.5萬美元的事情刷屏了。
2.MEV的原理
要理解MEV的工作原理,我們需要先明白Blockchain是如何記錄和更新信息的。2.1Blockchain狀態更新機制
Blockchain可以被看作是一個不斷增長的賬本,它記錄了所有發生的交易。這個賬本的狀態,例如每個賬戶的余額、Uniswap交易池中各種Tokens的儲備量等,都是由之前的交易決定的。
當一個新的區塊被添加到Blockchain上時,這個區塊中包含的所有交易都會被按照它們在區塊中的排列順序逐一執行。每執行一筆交易,Blockchain的全局狀態就會相應地發生改變。
也就是說,不只是區塊的順序很重要,區塊中的交易排序也很重要。那么區塊中的交易排序又是如何決定的呢?2.2驗證者決定交易排序
當用戶在Blockchain網絡上發起一筆交易時,例如這一筆通過Uniswap把USDC轉換為USDT的交易,首先會被廣播到網絡中的節點。經過初步驗證后,這筆交易會進入一個名為“內存池”(mempool)的區域。內存池就像一個等待區域,其中的交易尚未被確認并添加到Blockchain的下一個區塊中。
以前的礦工(在PoW系統中),現在的驗證者(在PoS系統中)有權從內存池中選擇交易,并決定這些交易在下一個區塊中的排列順序。
區塊中交易的順序至關重要。 在一個區塊被最終確認并添加到Blockchain上之前,這個區塊中的交易會按照驗證者(比如bobTheBuilder)確定的順序執行。這意味著,如果一個區塊中包含了多筆與同一個交易池交互的交易,那么這些交易的執行順序將直接影響到每一筆交易的結果。
這種能力使得驗證者可以優先處理特定交易、延遲或排除其他交易,甚至插入自己的交易來最大化利潤。
本次交易的排序,同樣重要,稍有差池就不可能攻擊成功。2.3本次MEV攻擊的交易排序
我們先簡單了解一下,本次MEV攻擊相關的3個交易:
此時這個池的USDC與USDT之間的兌換比例就遠遠不是1:1了,而是1:17了,也就是說此時需要17USDC才能兌換到1個USDT,不過這個比例只是大概,因為這個池是V3的,里面的流動性不是均勻分布的。
還有一點,我要告訴你。實際上攻擊者并沒有一次性動用1865萬的USDC,實際使用的USDC為109萬,連6%都不到。他是如何做到的呢?等我們把攻擊講完了會再詳細講。3.2交易2,執行22萬USDC兌換USDT
點擊上圖交易2的鏈接可以看到下圖。
交易A,將池里的流動性恢復正常,用1732萬USDT換回了交易1860萬USDC;
交易B,分贓準備,將部分收益——20.4萬USDC兌換為105ETH;
交易C,分贓,將100.558ETH支付給驗證者bob-The-Builder.eth。
至此,三明治攻擊結束。
現在來回答上面提到的一個很重要的問題:攻擊者如何用109萬USDC實現了1800萬的攻擊的。4.攻擊者是如何實現1800萬USDC的池攻擊的
攻擊者之所以能只用 109萬USDC 的本金,實現 1800萬美元級別 的攻擊,是因為Blockchain世界存在一個神奇又特殊的機制——UniswapV3的閃電兌換(FlashSwap)。4.1什么是閃電兌換(FlashSwap)?
簡單來說:
閃電兌換允許用戶在同一筆交易中先從Uniswap池中取出資產,再用另一種資產(或同種資產加手續費)償還。
只要整個操作在同一個交易內完成,Uniswap就允許這種「先取貨、再付款」的行為。請注意,必須是在同一個交易內完成。這樣設計,是為了保障Uniswap平臺自身的安全性:
零風險借貸:Uniswap允許用戶無抵押從池子臨時取走資金(類似借貸),但必須在交易結束時立即償還。
原子性(Atomicity):整個操作必須是原子的,要么完全成功(資金歸還),要么徹底失敗(交易回滾)。
閃電兌換的設計初衷是為了更有效地進行鏈上套利(Arbitrage),但卻不幸地被MEV攻擊者利用,成為市場操縱的利器。4.2閃電兌換,是如何助攻的?
下面我們看圖說畫,一步一步來了解一下本次攻擊的閃電兌換是如何實現的,見下圖。
F4攻擊者再將Curve兌換來的1755萬USDC,加上自己原本準備的109萬USDC(Aave借貸所得),共1864萬USDC,一次性還給Uniswap,閃電交換完成;
這筆交易(交易1)過后,攻擊者的賬戶余額減少了109萬USDC,因為歸還給Uniswap的1864萬USDC中只有1755萬USDC是從Curve換來的,其余的109萬USDC是攻擊者的自有資金。
你應該發現了,這一筆交易實際讓攻擊者損失了109萬。但是,后面的交易3,同樣通過閃電交換的手法,不但把109萬USDC拿回頭了,而且,還賺了20多萬。
下面我們根據交易3的數據一步一步來分析一下。
K1攻擊者,用閃電交換取出在Uniswap1860萬USDC;
K2攻擊者,通過用剛剛從Uniswap取出的USDC中的一部分1730萬USDC,換回了1732萬USDT;
K1攻擊者,把從Curve換回來的1732萬USDT還給了Uniswap。閃電交換完成。你需要注意的是,攻擊者通過K2只花了1730萬USDC就獲得了1732萬USDT。余下的130(=1860-1730)萬USDC中,有109萬的自有資金,其余的21萬USDC就是本次攻擊的利潤了。
K3攻擊者,把本金還回AAVE,拿走自己701WETH,同時把20萬USDC兌換成了105ETH,并把其中的100.558ETH發給驗證者作為小費(約20萬美元),自己只留了1萬美元不到的收益。
你或許會驚訝,為什么攻擊者愿意將高達20萬美元的利潤拱手讓給驗證者?4.3為什么要給20萬美元的「小費」?
其實,這并不是慷慨,而是三明治攻擊這種MEV攻擊成功的必要條件:
攻擊成功的核心就是交易順序的精準控制,而控制交易順序的正是驗證者(bobTheBuilder)。
驗證者不僅幫助攻擊者確保受害者的交易處于攻擊交易之間,更關鍵的是驗證者能確保其他競爭的MEV機器人無法插隊或干擾攻擊的順利完成。
因此,攻擊者寧可犧牲絕大部分利潤來確保攻擊成功,并保留一定的利潤給自己。
需要特別說明一下,MEV攻擊也是有成本的,在Uniswap閃電兌換有成本,在Curve交易也有成本,只是由于費率比較低大概是0.01~0.05%,所以與攻擊所得相比可以不值一提。
最后再提醒一下,MEV攻擊的防御其實也很簡單,你只需:設定好滑點容忍度,不要超過1%;大筆交易分幾筆執行。所以,你大可不必因噎廢食,從此不敢在DEX(DEX)交易了。結語:黑暗森林中的警示與啟示
這起21.5萬美元的MEV攻擊事件,無疑是Blockchain世界“黑暗森林”法則的又一次殘酷展現。它生動地揭示了在去中心化、無需許可的環境下,潛藏著利用機制漏洞攫取利益的復雜博弈。
從更高的層面來看,MEV的出現是Blockchain透明性和可編程性雙刃劍效應的體現。
一方面,所有交易記錄公開可查,使得攻擊行為能夠被追蹤和分析;
另一方面,智能合約的復雜邏輯和交易執行的確定性,也為精明的參與者提供了可乘之機。
這并非簡單的黑客行為,而是對Blockchain底層機制的深刻理解和利用,它考驗著協議設計的魯棒性,也挑戰著參與者的風險意識。
理解MEV,認識其風險,才能更好地在這個充滿機遇但也暗藏危機的數字世界中航行。記住,在Blockchain的“黑暗森林”中,唯有敬畏規則、提升認知,方能避免成為下一個被吞噬的獵物。
這也是我想通過本文努力達到的效果。
免責聲明:MEV三明治攻擊全解析:從排序到閃兌的致命鏈條文章轉發自互聯網,版權歸其所有。
文章內容不代表本站立場和任何投資暗示。加密貨幣市場極其波動,風險很高,可能不適合所有投資者。在投資加密貨幣之前,請確保自己充分了解市場和投資的風險,并考慮自己的財務狀況和風險承受能力。此外,請遵循您所在國家的法律法規,以及遵守交易所和錢包提供商的規定。對于任何因使用加密貨幣所造成的投資損失或其他損失,本站不承擔任何責任。
Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM