## MEVless 協議
擴展: 針對 Layer2/3 的無需信任的鏈上反 MEV 解決方案
### 先決條件
MEVless適用攻擊場景:
- 夾心攻擊
- 搶先交易攻擊
MEVless適用鏈:
這裡,作者不建議在 L1 公鏈層面(尤其是像ETH和Solana這樣的通用區塊鏈)使用 MEVless 協議,因為 MEVless 需要對區塊本身進行針對性的修改,而這些區塊是專門為抵抗 MEV 而設計的,可能不適合其他業務類型(尤其是不需要抵抗 MEV 的業務)。作者建議將 MEVless 放置在專用的 DeFi 應用鏈或 L2 上,然後返回ETH L1 進行結算。
### 原則
MEVless 的原理在於限制礦工在交易排序過程中的行為。我們的方法是防止礦工在排序過程中看到具體的交易內容。交易排序時礦工無法看到交易內容,因此即使是礦工也無法進行 MEV 攻擊,因為他們不知道具體的交易內容。排序完成後,需要將交易序列發佈到公共網絡,以便其他節點和用戶知曉。此時,交易順序已最終確定幷包含在The Block中,因此當後續提交具體的交易內容時,將按照此共識順序執行,不再進行 MEV 操作。
我們將鏈上區塊分為兩種類型:
- 排序區塊,只完成三件事:接收交易哈希、扣除用戶預付款、提供交易排序承諾
- 執行區塊,與普通區塊無異,只需要按照前一個排序區塊中提交的順序執行交易
這兩類區塊交替產生,例如創世區塊之後,奇數塊高度的區塊為排序塊,偶數塊高度的區塊為執行塊。
### 過程
1. 區塊 N(排序區塊)開始出塊
2. 用戶將交易哈希發送到鏈上並支付一定的預付款。預付款由兩部分組成:
交易哈希的 Gas 費用:用於存儲交易哈希以及下單時的計算費用。該費用通常是固定且強制性的。
額外提示:用戶支付的額外費用,以確保其交易能夠儘早完成。此金額不固定,可以為零。
3. 鏈節點收到交易哈希後,將完成以下步驟:
- 檢查交易賬戶是否有足夠的資金支付預付款
- 根據預付款金額從高到低對交易哈希進行排序
- 從交易賬戶中扣除預付款金額
- 將排序後的交易順序作為承諾存儲在The Block中,併發布到P2P網絡
4. 用戶訂閱並查詢自己提交到鏈上的交易哈希的排序序列號後,將具體的交易內容發送到鏈上,併發送DA(DA為可選)
5. 區塊N+1(執行區塊)開始出塊
6. 鏈節點收到交易內容後,會完成以下步驟:
- 從 DA 中提取交易內容(如果前一個區塊中提交排序的所有 txHash 都有對應的交易內容,則跳過此步驟)
- 檢查交易內容是否與之前提交的排序txHash匹配,如果不匹配則丟棄
- 根據先前提交的順序執行交易
這個過程循環往復。
### DA 的角色(可選)
在這種方案中,可能會出現這樣的情況:交易內容發送到鏈上後,礦工發現該交易有利可圖,可能會惡意扣留該交易,阻止其上鍊,然後等待用戶重新發送相同的交易進行攻擊。此時,用戶不僅交易利潤仍然會被蠶食,還會浪費之前發送的交易哈希的預付款。
因此,我們需要 DA(例如ETH Blob)來確保用戶發送的交易一定會被記錄在鏈上。這樣,即使出塊節點惡意扣留交易,其他驗證節點和全節點仍然可以接收交易內容,並在後續的出塊過程中執行該交易。這迫使出塊節點必須將該交易記錄到自己的區塊中,避免與其他節點的狀態不一致。
在此過程中,DA 為用戶提供了額外的保護,且並非強制性的。如果用戶認為交易已充分傳播到 P2P 網絡中足夠多的全節點,則可以選擇不使用 DA。引入 DA 還可以防止鏈上礦工聯合壟斷和扣留用戶交易。
## 優點
1. 與加密內存池相比,MEVless 解決方案開銷更低,無需執行耗費 CPU 和內存的解密操作。MEVless 只需先對交易哈希進行排序,哈希長度僅為 32 字節(甚至更短)。排序完成後,傳播對網絡帶寬的負擔極小。
2. 相比於PBS,MEVless從MEV攻擊的源頭——交易下單權限上進行約束,在下單前阻斷攻擊者獲取交易信息的權限,消除了攻擊者進行MEV攻擊的前提條件。
3. 有利於去中心化執行和結果可驗證。所有對抗 MEV 的方法和步驟均在代碼層面硬編碼。全節點只要按照此代碼執行,結果就是確定性的,這使得暗箱操作的 MEV 攻擊變得困難。