動態

詳情 返回 返回

MEVless,MEV解決之道 - 動態 詳情

什麼是MEV

MEV攻擊(最大可提取價值攻擊)是一種利用對交易排序的控制,通過重新排序、插入或排除特定交易,來獲取額外利潤的區塊鏈行為。
最常見的形式是三明治攻擊,攻擊者在用户的買入交易前後分別插入自己的交易,利用價格操縱實現套利,導致用户支付更高的價格。其他形式包括搶先交易、清算套利等。

需要指出的是,三明治攻擊、front-running攻擊對於區塊鏈生態而言基本算是百害而無一利的。因為它會導致用户交易的利潤受損以使自己受益, 它和三角套利這樣的不同,三角套利本身是可以對區塊鏈帶來流動性的;而三明治攻擊和搶跑攻擊本身是傷害流動性的,當沒有交易發生的時候, 這兩類攻擊也就隨之消失。由此可見,三明治攻擊和搶跑攻擊對區塊鏈(尤其是defi)的負面作用極大,堪稱業界毒瘤。

MEVless協議

前提

MEVless 適用的攻擊場景:

  • 三明治攻擊
  • front-running攻擊

MEVless適用的鏈:
在這裏,筆者不建議在L1公鏈這一層(尤其是通用的區塊鏈,像ETH,solana)使用MEVless協議,因為MEVless需要對區塊本身做一些針對性修改,這是專門為了抗MEV而設計的,未必適用於 其他業務類型(尤其是不需要抗MEV的業務類型)。 筆者建議將MEVless放在一些專用的defi應用鏈 或者 L2上,然後最後回到ETH L1上進行結算。

原理

MEVless的原理在於約束礦工對交易定序的行為,我們的做法是在排序的時候不讓礦工看到具體的交易內容。 並且在看不到交易內容的情況下進行交易排序,此時由於不知道具體交易內容,則即使是礦工 也無法進行MEV攻擊,排完序之後需要將該順序發佈到公網中使其他節點和用户也獲悉。此時交易順序已然定型併入塊,那麼之後提交具體交易內容的時候便會強制按照這個共識的順序執行,不再有MEV的操作空間了。

我們將鏈上的區塊分成兩個類型:

  • 定序區塊,定序區塊只完成三件事:接收交易hash,扣除用户的預付款,給出交易定序的承諾,定序區塊的出塊間隔時間可以短於執行區塊
  • 執行區塊,執行區塊與尋常區塊無異,只需要按照之前的定序區塊裏承諾的排序執行交易即可

這兩種區塊交替出塊,比如創世區塊之後,單數塊高的區塊即為定序區塊,雙數塊高的區塊即為執行區塊

流程

MEVless流程

  1. 區塊N(定序區塊)開始出塊
  2. 用户將交易hash發送到鏈上,並支付一定的預付款。預付款有兩部分構成:
    1)交易Hash的gasFee: 用作交易Hash的存儲和排序時的計算費用,這部分費用一般是固定且必須有的
    2)額外小費:用户為了該交易能夠排序儘可能靠前而支付的額外費用,該部分數額不固定且可以沒有
  3. 鏈節點收到交易hash之後,會完成如下步驟:

    • 檢查交易賬户是否有足夠的錢支付預付款
    • 根據預付款的金額的大小對交易hash進行從高到低排序
    • 扣除交易賬户的預付款金額
    • 把排好的交易順序作為承諾存入區塊中並公佈到P2P網絡
  4. 用户訂閲查詢到自己剛剛發出的交易Hash在鏈上承諾的排序序號之後,發送具體的交易內容到鏈上 和DA(DA為可選項)
  5. 區塊N+1(執行區塊)開始出塊
  6. 鏈節點收到交易內容之後,會完成如下步驟:

    • 從DA拉取交易內容(如果此時上個區塊裏所有承諾排序的txHash都有對應的交易內容,那麼跳過該步驟)
    • 檢查交易內容是否與之前承諾定序的txHash匹配,如不匹配則捨棄
    • 按之前承諾的順序執行交易

    依此下去周而復始

DA的作用(可選)

在該方案中,可能會出現當交易內容發往鏈上之後,礦工看到該筆交易有利可圖,於是可能會惡意扣下該筆交易以使得交易無法上鍊然後等待用户下次重新發送相同的交易再來進行攻擊, 此時不僅用户的交易利潤依然會被侵蝕,還會因為之前發送的交易hash白白多交一筆預付款。

所以,我們需要DA(比如 ETH Blob)來確保用户發送出來的交易一定能夠上鍊,這樣哪怕出塊節點惡意扣留了該筆交易,其他的驗證節點和全節點也能夠收到該筆交易內容, 並在後續的出塊過程中執行該筆交易。這樣,出塊節點為了防止自己跟其他節點出現狀態不一致的情況就會不得不把該筆交易也包含到自己出的區塊中。

在這個過程中,DA是為用户多提供了一層保障,並不是必選項,如果用户覺得該交易在P2P網絡中已充分傳播到足夠的全節點,也可以不使用DA。

引入DA也可以防止該鏈的礦工羣體以聯合壟斷的方式扣留用户交易。

優勢

  1. 相較於加密內存池而言,MEVless方案的開銷更小,不需要解密這種對CPU、內存而言的高耗能操作,並且MEVless
    只先對交易Hash定序,一個hash只有32字節長度,甚至可以更短,定序完成之後傳播 對 網絡帶寬的負擔也很輕。
  2. 相較於PBS而言,MEVless從MEV攻擊的源頭交易定序權開始進行約束,因為在定序前屏蔽了攻擊者對交易信息的情報,封殺了攻擊者進行MEV攻擊的先決條件
  3. 有利於去中心化執行和結果可驗證。所有抗MEV的方式步驟都是寫死在代碼層,只要全節點按照該代碼執行,結果即是確定的,很難在黑箱操作中進行MEV攻擊
  4. 與隱私內存池節點不同的地方在於,隱私內存池並不會在知曉具體交易內容前將承諾的交易順序發佈到全網節點進行共識,而MEVless會將承諾的交易順序發佈到全網讓每個全節點共識後寫入區塊中以確保交易會按承諾的順序執行

投機性MEV

前文我們討論了普通的MEV攻擊,但是如果攻擊者無法看到具體的交易內容無法定點狙殺交易的時候,他們可能會採取另一種方式來攻擊,即投機性MEV攻擊。

這種攻擊方式具體體現在:在MEVless中,攻擊者可以提前埋伏好一個交易 並把該交易的hash提交到鏈上,等待執行區塊開始時,大家都提交交易內容的時候,攻擊者可以根據其他用户提交的交易內容 來判斷並計算自己是否有攻擊收益,如果有則提交自己的交易內容,如果沒有的話就選擇拒絕提交自己的交易內容,實現三明治攻擊。

這種方式在MEVless協議中很難成立, 因為投機需要成本,而當攻擊者發現無利可圖選擇放棄提交自己的交易內容的時候,他之前提交txHash時候所支付的預付款便等於白白浪費了,並且攻擊者越想讓自己的交易在排序中靠前, 那麼他所需要的預支付的成本就越大。

那麼,一定會有讀者疑惑,如果是出塊節點自己進行MEV攻擊,那麼這部分預支付款相當於是自己給自己,完全彌補了攻擊成本,這種情況下,又該如何解呢?

共識層優化

確實,當出塊節點自己進行MEV攻擊時,這部分預支付款會被自己的出塊獎勵所覆蓋,所以不會存在攻擊成本的浪費。那我們削弱這種投機方式的思路是:讓礦工無法預測下一個區塊是否輪到自己出塊,這樣他投機成本就會陡增。為此,我們需要在共識層去增添如下設計:

  • 准入共識:proof of Burn L1-token,人們必須在 L1 上燒掉一些 L1 代幣(ETH/usdt/usdc)才能獲得加入礦工組的權利。
  • 出塊共識:VDF based on L1 hash,我們使用 ETH L1上最新區塊的hash作為輸入,以 VDF 生成隨機輸出值,並比較所有礦工的輸出值,獲得(輸出值 * 銷燬L1代幣數量)最大值的節點將成為該輪區塊的出塊節點。
  • 最終共識:將上面步驟中出的區塊每3個ETH slot為一個週期上傳到ETH L1上,並在選擇(輸出值 * 銷燬L1代幣數量)數值最大的那一個分叉作為finalized分支,一旦在ETH上finalized,並不可回滾。

並且,這種共識設計,在去中心化越來越高的情況下抗MEV效果越好,因為礦工越多,那麼每個礦工節點就越難預料自己是否是下個出塊節點,他們投機式MEV的風險就越高。

原作者:魏文侯
原文:https://lawliet-chan.github.io/2025/09/20/MEVless/
user avatar wennuandedasuan_c6gnoc 頭像
點贊 1 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.