MEVless,MEV 解決之道

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 的風險就越高。

免責聲明:作為區塊鏈信息平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論