The Merge 後的 MEV

MEV(一):The Merge 後的 MEV

MEV 以及 The Merge 對 MEV 的影響。

  • 作者:Nic @ imToken Labs

  • 校對:Lambda Guo @ imToken Labs/Ping ChenPeter Lai

  • 封面來源:British Library @ Unsplash

  • 先備知識:

    • 對 MEV 有基本的認識,知道 Flashbot 的角色及 Flashbot 對 MEV 的影響

    • 知道 PoS 機制的基本認識以及 The Merge 帶來的改變


MEV

首先複習一下什麼是 MEV。

Miner Extractable Value 如字面上所述,指的是「礦工可以榨取出的價值」。這個價值指的不是使用者付給礦工請他打包使用者交易到區塊裡的手續費。給予手續費這個動作是經過使用者同意的,使用者可以把手續費調得很低,那他的交易就會很久才會被收入,但至少礦工不能對交易收取任意手續費。

註:現在 MEV 又改稱 Maximal Extractable Value,因為目前的發展 MEV 已不再是礦工所獨佔。

礦工榨取的價值指的是礦工透過改變交易排序、插入自己的交易在被榨取的交易前(或後)來獲得利益。那礦工可以榨取什麼樣的利益?

例如當有某個火熱的 NFT 提供 mint 的名額,只有最快的 100 個人可以 mint 成功,這時和礦工是朋友或是鏈下和礦工達成某種協議的 Carol 就可以確保礦工透過安排交易順序,將她的 mint 交易安插其他人的 mint 交易之前。

礦工會把 Carol 的 mint 交易排在其他人的 mint 交易之前
礦工會把 Carol 的 mint 交易排在其他人的 mint 交易之前

另外常見的 MEV 是夾擊使用者的 AMM 交易,迫使使用者收到(可接受範圍裡)最差的價格,使用者預期的價格與最差價格的價差就是礦工榨取的利益。底下的例子中 Alice 預期用 1 WBTC 換到 21500 USDT,但她知道去中心化世界裡她的交易不一定能第一個被執行,當有其他人在她之前也去進行 WBTC/USDT 的交易,AMM 價格就被改變,1 WBTC 就不一定能換到 21500 USDT,所以她設定了可接受範圍內的一個最差價格 20500 USDT:

Alice 預期用 1 WBTC 換到 21500 USDT,但最差可以接受 20500 USDT
Alice 預期用 1 WBTC 換到 21500 USDT,但最差可以接受 20500 USDT

這時 Eve 發現了 Alice 的交易,並決定搶先在 Alice 的交易之前去賣 WBTC,導致 WBTC 價格跌到剩 20500 USDT,接著再執行 Alice 的交易,Alice 就被迫只能用 20500 USDT 的價格成交。最後 Eve 再將一開始賣 WBTC 所獲得的 USDT 拿去買回 WBTC,此時 WBTC 價格會小於 20500 USDT,也就表示 Eve 完成了一次低買高賣(<20500 買,21500 賣),賺得價差。

礦工 Eve 發現有利可圖,在 Alice 的交易前搶先賣 WBTC,等到 Alice 交易執行完再買回 WBTC 賺價差
礦工 Eve 發現有利可圖,在 Alice 的交易前搶先賣 WBTC,等到 Alice 交易執行完再買回 WBTC 賺價差

去中心化系統一定會有 MEV

在中心化系統裡你可以選擇相信負責排序交易的角色(Operator、Sequencer),相信他們會為了聲譽所以不做會傷害使用者的壞事,或是你可以選擇離開那個系統。這也是目前 L2 的現況,L2 項目方不太可能會自砸招牌去榨取 MEV。但在去中心化系統裡任何人都可以成為礦工,而且我們沒辦法簡單客觀地證明一個礦工的行為是「不好」的,也就表示我們沒辦法有效禁止礦工榨取利益。

我們不該期待礦工都會是「好人」,而是要擔心如果一個礦工因為 MEV 越賺越多,並用來投資更多礦機讓他規模越來越大,導致他能淘汰掉其他競爭者,結果就會是在一個去中心化系統只有一個礦工的困境,最終他將能任意施加個人的喜好規則到使用者的交易上。而這也是 Flashbot 出現的原因。

Flashbot

為了避免 MEV 影響礦工去中心化的程度,Flashbot 將 MEV 打造成一個公開的市場,礦工和專業的 MEV searcher 合作並分享 MEV,同時礦工和 MEV searcher 各自之間又有著高度的競爭。透過這樣的競爭和合作關係,礦工和 MEV searcher 都能各自專注在自己的專業,MEV searcher 也不需擔心礦工有可能搶走自己的套利機會或是故意不收自己的交易。

Searcher 從公開交易池中找交易套利並為自己的 Bundle 競標收入權,送給 Flashbot 後再由礦工挑選
Searcher 從公開交易池中找交易套利並為自己的 Bundle 競標收入權,送給 Flashbot 後再由礦工挑選

中心化風險

不過 Flashbot 仍然有缺點在,所有 MEV searcher 的套利交易都要經由中心化的 Flashbot 伺服器,Flashbot 伺服器可以搶走套利機會或審查套利交易。除了 Flashbot,市場上也出現了像是 Eden Network 的項目。它和 Flashbot 架構基本上一樣,除了自己發幣搞無謂的 Staking 、區塊內交易優先等級及額外的競標機制等。不過至少當 Flashbot 開始作惡時,礦工和 searcher 還有其他選項。

MEV 是一個必須接受的既定事實

不管是協議設計者或使用者都必須要保持對 MEV 的警覺。可以的話將 MEV 納入協議設計中,讓 MEV 變成一個有利的工具是協議設計者接下來在設計機制時必須要好好思考的。後面的文章也會介紹善加利用 MEV 的設計和想法。


The Merge

Ethereum 在 The Merge 後共識切換為 PoS 機制,從用礦機算力競爭的礦工變成質押 ETH 就能成為 Validator 來獲得 propose 區塊的機會,這表示在 PoS 中獲得出塊的門檻降低許多。而獲得出塊機會的門檻降低後其實也影響了 Flashbot 不同角色間競爭合作的關係。

註:這裡 propose 維持用英文,避免 propose block 和 build block 的中文因為意思太接近而看錯。

信任關係的改變

在 PoS 之前,Searcher 是需要相信礦工不會把他的 bundle 內容搶走的,礦工即便搶了,Searcher 也只能透過鏈下的機制去反制,例如提出證據請 Flashbot 將該礦工加入黑名單或是在 Twitter 上發文取暖。不過礦工基本上都非常配合,這是因為礦工和 Searcher 間是屬於長期合作的關係,如果礦工今天為了某一筆 MEV 利益而搶了 Searcher 導致礦工未來收不到任何 MEV 機會,其實是划不來的。

但在 PoS 之後,透過質押 ETH 就能獲得出塊機會,出塊的門檻降低。也因此許多一般人加入成為 Validator,導致獲得出塊的機會也就慢慢被稀釋。相比於 PoW 中投入許多成本成為為數不多且長期經營的礦池,PoS 中 Validator 偶爾才能獲得出塊機會,且其區塊獎賞加上 MEV 的平均年化即便以 10% 計算的情況下,Validator 仍然有非常足夠的動機去搶 Searcher 的 MEV(可以參考 Flashbot 統計的 MEV leader board)。

只要抓住機會搶超過 3.2 ETH 的 MEV 即超過 10% 年化
只要抓住機會搶超過 3.2 ETH 的 MEV 即超過 10% 年化

因此 Flashbot 的架構需要配合這個信任關係的改變及 PoS 機制進行調整,變成了現在的 mev-boost。

mev-boost

在 mev-boost 中,原本 Flashbot 介於 Searcher 及礦工之間的 Relay 角色被拆分成兩個,一個是 Builder,一個一樣叫做 Relay 但職責不同。Searcher 將 bundle 交給 Builder,Builder 從多個 bundle 中選出數個 bundle 組成一個區塊,並將區塊交給 Relay,Validator 再從多個 Relay 提交的區塊中選出一個。

Searcher 和 Searcher 競爭,Builder 和 Builder 競爭,Validator 從中挑出最有利的區塊
Searcher 和 Searcher 競爭,Builder 和 Builder 競爭,Validator 從中挑出最有利的區塊

Builder 負責在一個區塊的有限容量中找出最有利的 bundle 組合,希望 Validator 能選中自己的區塊。那 Relay 有什麼用呢?上面提到信任關係已經改變,因此 Searcher/Builder 不能相信 Validator,所以 mev-boost 中 Validator 需要先做出「我會 propose 你的區塊」的承諾才會收到真正的區塊內容。而 Relay 就是作為 Builder 和 Validator 之間的中間人角色幫忙協調: Relay 先保管區塊內容,直到拿到 Validator 的承諾才把 Builder 製作的區塊交給 Validator。

實際的 Ethereum Beacon Chain 術語中 Builder 製作的區塊內容稱做 Execution Payload,Validator 會從 Relay 那收到稱為 Execution Payload Header 的資料,Header 可以視為是 Payload 的 commitment,對 Header 簽名就代表對 Payload 簽名。當 Validator 選好要 propose 哪個 Relay 送來的區塊時,他就會把該區塊的 Execution Payload Header 放進 Beacon 區塊中並簽名,接著把簽名內容交給 Relay 當作證明,最後 Relay 就可以放心將區塊內容給 Validator,讓他 propose 區塊。

Builder 將區塊交給 Relay,Relay 將 Header 交給 Validator
Builder 將區塊交給 Relay,Relay 將 Header 交給 Validator
如果 Validator 選擇該區塊,就會將 Header 放進 Beacon Block 裡並簽名,交給 Relay
如果 Validator 選擇該區塊,就會將 Header 放進 Beacon Block 裡並簽名,交給 Relay
Relay 接著將完整區塊內容交給 Validator
Relay 接著將完整區塊內容交給 Validator

如果 Validator 最後背叛 Relay,選擇 propose 另一個區塊,此時 Relay 就可以將當初 Validator 給他的簽名內容公佈出去,當作證據證明該 Validator propose 了兩個不一樣的區塊,接著 Validator 就會因為違反 Ethereum Beacon Chain 的規則而被懲罰。

Eve 因為 propose 不一樣的區塊導致他被 slash(一部分質押的 ETH 被沒收)
Eve 因為 propose 不一樣的區塊導致他被 slash(一部分質押的 ETH 被沒收)

信任假設

在 mev-boost 中 Validator 反而必須相信 Relay,如果 Relay 最終揭露的區塊內容不合法或是實際 Validator 收到的錢不符預期,或甚至 Relay 直接不公布區塊內容導致 Validator 沒辦法 propose 區塊,此時 Validator 只能透過鏈下的機制去反制,例如讓其他 Validator 知道該 Relay 的惡意行為。

Circuit Breaker

Validator 沒辦法 24 小時都有人監控並介入,所以當 Validator 軟體發現(同一個或多個)Relay 不斷破壞信任時,必須要能做出反應,避免一直因為沒有 propose 區塊而損失收益。例如當發現自己超過五個 Slot 都沒 propose 區塊時,要退回使用自己的節點來製作區塊內容。相關文件可以參考:

Relay Monitor

為了降低 Relay 這個角色作惡產生的影響,Flashbot 社群也在思考設計針對 Relay 行為的監控。相關文件可以參考:

Data Availability Committee

一個防止 Relay 不公佈區塊內容的方式是將區塊資料交給一群節點所組成的 Committee,他們負責保管、確保區塊內容可取得,也就是將區塊內容保管的職責去中心化。

目前有哪些 Builder 和 Relay?

這裡可以看到目前的 Builder 及 Relay:

可以看到雖然身為 mev-boost 的主要開發團隊,Flashbot 並未擁有主宰的 Relay 地位,這是因為 Flashbot 從一開始便開源開發 mev-boost 且未在 mev-boost 軟體中將自己設為預設 Relay

2023–04–02 針對 mev-boost Relay 的攻擊

一個惡意 Validator 發現 Relay 的漏洞:Relay 只要 Validator 有簽出合法的簽名(不論內容是否合法)就會回傳 Bundle 內容給該 Validator。因此惡意 Validator 簽了一個不合法的內容(Header 某些欄位的值不合法),Relay 回傳 Bundle 內容後 Validator 再偷走 Bundle 裡的套利交易,然後 propose 另一個合法的區塊。Relay 嘗試廣播 Validator 簽的 Header,但因為內容不合法所以被其他節點拒絕,所以大家只看到 Validator 自己 propose 的合法區塊。事後 Validator 因為簽了兩個不同的 Header(給 Relay 的和自己 propose 的)而被 Slash 且被踢出 Validator 名單,但傷害已經造成。

更新後的 Relay 現在會先嘗試廣播 Validator 簽的 Header,如果成功被其他節點收入就表示 Validator 簽的內容是合法的,而且其他節點會先看到 Relay 廣播的區塊,如果 Validator 嘗試偷 Bundle 內容自己 propose 的話,要贏過 Relay 廣播的區塊會更難(因為已經有很多節點看到 Relay 廣播的區塊)。

註 1:解釋這個攻擊的 thread 及相關證據和 Relay 補丁可以參考這個 thread

註 2:惡意 Validator 除了可以偷走 Bundle 裡的套利交易,還可以攻擊進行三明治夾擊的套利者:進行三明治夾擊的套利者會在受害者交易前後插入自己的交易 — 搶先受害者買入,並在受害者買入後再賣出,賺取價差,但夾擊要能成功必須要前後兩筆交易都有執行,否則只有前筆交易被執行的話套利者不但賺不到利差,還會因此賠上自己的資金。

但針對這個攻擊所做的補丁會增加區塊產出的延遲時間,因此在攻擊發生後的數天內 PoS 鏈的 re-org 發生次數明顯上升,目前有數個方案正在設計及實作當中,來避免 MEV-Boost 的出塊延遲反而造成 PoS 網路的不穩定,詳細介紹可以參考這篇


Flashbot/mev-boost 的影響

影響 Validator 投票效率

因為 Flashbot/mev-boost,區塊從生產到真正被 propose 的過程經過了更多的關卡,這導致 Validator propose 區塊的時間延遲,其他負責投票的 Validator 就會更晚收到區塊,也因此他們投票的時間也就被壓縮,這會影響整體 PoS 網路的安全性。

雖然看起來影響不太大:估計投票率減少約 2%、正確投票的 Validator 減少約 1%,不過這是 2022 年 10 月統計的數據,當時只有 1/3 的 Validator 接上 MEV Relay。相關資訊可參考:


總結與重點

  • MEV 的產生無可避免,而礦工擁有開採 MEV 最大的優勢。Flashbot 讓 MEV 的開採變成一個公開市場,避免礦工中心化影響整個鏈的安全

  • mev-boost 因應 PoS 帶來的改變而誕生,mev-boost 反轉 Searcher/Builder 與 Validator 間的信任關係,且讓競爭更為開放:有多個 Builder 彼此競爭,有多個 Relay 彼此競爭,進一步降低 Flashbot 的中心化風險

下一篇將介紹 Proposer-Builder Separation(PBS),將 mev-boost 架構直接整合進 Ethereum 本身的協議裡,而不再是 Validator、Builder 和 Searcher 之間私底下的合作,這會讓整個 MEV 生態變得更加去中心化及安全。

參考資料與推薦延伸閱讀

Special thanks to Lambda Guo, Ping Chen and Peter Lai for reviewing and improving this post

Subscribe to imToken Labs
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.