來源/以太坊愛好者
設想一種情形:使用者在 AMM 型別的 DEX 上做交易,無論設定什麼滑點,最終都會在你能接受的最差價格上成交。這可能是個對使用者來說很可怕的場景。
TLDR;
目前的 MEV-Geth 實現機制改變了原本網路中預期的交易排序規則,導致諸多細思極恐的公開公正性問題,並且可能已經對生態中的使用者產生利益損害。
以太坊網路交易池原生規則
當前以太坊網路中,如果使用者透過原生的方式傳送交易,這筆交易會在整個由以太坊全節點組成的點對點網路傳播,並且交易的內容完全透明,這意味著任何網路中任一全節點能看到絕大部分交易的交易內容。
由此,以太坊網路中會出現幾種破壞交易傳送者預期和體驗的情況(通常被認定為某種程度的 “攻擊”),
搶跑(front-running),指透過讓特定交易在同個區塊中排在目標交易(被攻擊交易)前而獲利,主要針對清算和套利交易;
尾隨(back-running),指透過讓特定交易在同個區塊中排在目標交易後而獲利,典型的針對物件是資訊輸入機制(Oracle)交易或大單交易;
三明治夾擊,上述兩種攻擊形式的結合,讓目標交易恰好夾在兩筆特定構造交易中間,從而獲利。三明治攻擊大大拓寬了可攻擊的範圍,哪怕是一筆普通的 AMM DEX 交易,都有可能成為針對物件。攻擊者的第一筆構造交易製造更大的交易價格波動,待目標交易執行完之後緊接著執行第二筆構造交易,換回發動攻擊的代幣完成獲益。
發起攻擊的物件是不確定的。理論上,所有知道了你的交易內容的人都有可能攻擊你,dApp 專案方、專業攻擊者、錢包、礦池,都有可能攻擊你(沒有“可追責性”)。
攻擊的難易程度,與網路的共識規則和生態中普遍可用的基礎設施有關(攻擊難度、“可響應性”);例如,如果大家完全遵守當前的交易池規則,僅透過 Gas Price 競爭來影響出塊者對交易的排序(要求出塊礦池堅守行業自律),則三明治攻擊是比較難發動。
目前,由於能夠直接決定自己所打包區塊中的交易的執行順序,礦工-礦池 一直被當成是最有可能發動攻擊的參與者,這也是 “MEV” (礦工因交易排序能力而獲得的收益)這個概念的由來;但實際由於攻擊機會具備一定時效性,可能轉瞬即逝,攻擊者和礦池更多表現為一種分成合作的關係。
這些背景,正是使我對 MEV-Geth 和其他形式的、礦池直接從事三明治攻擊的現象感到不安的原因。
當前的 MEV-Geth 實現
目前 MEV-Geth 實現(截至 2021-04-10)的功能僅為,搜尋網路中 MEV 機會的搜尋器(Inspect),轉發原子交易包到註冊礦池節點(Relay),出塊節點允許插隊(MEV-Geth client)。構建出僅在註冊礦池和 Relay 伺服器間的簡單網路。
MEV-Geth 是一種特殊定製的以太坊節點客戶端,執行在礦池方,允許透過該客戶端儲存 Relay 分發的 MEV Bundle,並將這些特殊的交易打包到區塊中的佇列頭部位置。
使用者可使用 MEV-Geth 廣播稱為 Bundle 的交易包;一個 Bundle 內包含的資訊有:一個交易列表(指明傳送者希望上鍊的幾筆連續交易),套利計算區塊高度,最小最大超時時間。在單個 Bundle 上鍊的區塊中,傳送者會透過 coinbase 交易(而非透過 Gas Price),向出塊者(即礦池)支付 ETH 作為分傭。
在當前的 MEV-Geth 實現中,每一個區塊只能存在一筆 Bundle,因此出塊者會會選出 coinbase 支付最大的一筆 Bundle 上鍊。
這個當前的實現簡化了實施三明治夾擊的難度。一方面,攻擊者可以顯式地宣告夾擊交易的前後關聯;其次,夾擊者沒有了後顧之憂,即使在與其他夾擊者的上鍊競爭中落敗,其交易也只會在 MEV-Relay 網路中超時無效,不需要付出 Gas 費用。
根據 Flashbots 團隊的公開宣告,他們正在開發允許同一個區塊包含多筆 Bundle的方案,或許我們很快會看到區塊中充滿大量零 Gas 費的三明治夾擊。
找到 MEV-Geth 交易
根據目前的實現,MEV-Geth 交易最顯著的特點就是前後兩筆夾擊交易的 Gas Price 都為 0。
開啟區塊瀏覽器網站 etherchain.org ,檢視任一區塊的交易列表(此列表就體現了區塊內交易的執行順序),如果在列表開頭出現了三明治夾擊,且夾擊交易的 Gas Price 為 0,則這很有可能是透過 MEV-Geth 發起的 Bundle。
- 12200018 高度區塊的列表頭部 -
- 某筆被夾擊交易全過程 -
網路已全面部署 MEV-Geth
當前 MEV 的情況可以透過對 0 gas price 並且 gas used 大於 21000 交易查詢獲得,具體見我臨時建立的 dune dashboard
從圖中可看到,不少礦池都已參與,每天有約超過 3500 筆 MEV 相關交易,大約一千多次 MEV 交易產生。按照平均出塊時間在 12s 來算,每天有 7200 (60x60x24/12) 個區塊,即每天有近 1/3 的區塊中存在 MEV-Geth 交易。還有部分礦池未使用 MEV-Geth,套利者還未切換到這種新的競爭模式。
不同環境下的博弈
我們可以藉助比較幾種交易池運作情形,來了解使用者得到了什麼,又失去了什麼。
公開博弈狀態
如果網路迴歸到原生狀態,而且出塊者恪守行業自律,所有交易全公開,任何人都能透過建立節點或者透過節點服務發現未被打包的交易;那麼,如果想夾擊某筆交易,就需要傳送兩筆交易,並設定 gas price 為被攻擊交易前後來保證夾擊順序,並且在有競爭的情況下還要傳送多份複製交易提高成功率,最後在任意交易執行失敗時要面臨花出礦工費的懲罰。
從使用者方來看,大家都處於平等公開的環境下,當看到自己交易被夾擊或搶跑時,是有機會有方法加速或取消這筆交易來避免潛在損失的。
而且,最終成型的區塊,不僅能顯示出交易池競爭的勝者,還能真實地反映交易池競爭的實際情形。
隱私交易服務
此處的 “隱私交易” 指的是礦池開設專門的通道,由該通道進入礦池交易池的交易不對外廣播,但仍根據 Gas Price 高價優先的形式排序並打包交易。
普通使用者使用隱私交易服務時,其交易對外不公開,因此,除非礦池自身違反保密承諾或參與攻擊,否則使用者不會受到上述攻擊。
再從另外一頭考慮,如果攻擊者透過隱私交易服務攻擊公網可見交易,被攻擊者無法發現事情即將發生,無法做出應對。但是,三明治夾擊仍然受限於交易路由和交易池排序的隨機性,無法輕易實施。
而且,當多人競爭同一個獲利機會時,只要礦池不透露相互競爭的交易,他們便無法瞭解競爭對手出價,只能盲出價格進入排序佇列,這變相提高攻擊成本和難度。
此外,最終成型的區塊,仍然能真實地反映出交易池競爭的全部情形,外部可以觀測到成功失敗及其原因。
若 MEV-Geth 成為主流
MEV-Geth 出現後,套利者搶跑者會將可套利可夾擊的交易提交到這個網路中競價,篩選出上交礦池利益最大的 Bundle 會放到下一個打包的區塊中優先執行,保證被打包交易能達到 100% 成功率。
在當前,如果你也部署了一個 MEV-Geth 節點,Bundle 內容對你來說是透明的,因此如果有人攻擊你,你也能及時響應。
但如果你並不知道什麼是 MEV-Geth,你的情形與有人動用隱私交易攻擊你相同;變得更差的是,攻擊者的確定性提升不少,並且攻擊過程的競價也無法得知,因為成型的區塊將只暴露那筆勝出的交易,而不會暴露競爭的過程。
Flashbots 認為,這會給網路帶來一些好處:套利者競爭博弈的過程被移到另外一個網路,可以緩解以太坊 P2P 網路的負擔;只有勝出者佔據區塊空間,可以緩解區塊擁堵。在 subreddit/EtherMining 上有釋出報告列出目前區塊中的額外獲利情況,但或許長期不一定能趕上礦工費下降帶來的總收入減少,需要更多長期資料跟蹤研究。
去中心願景
原本網路共識預期是,以太坊 Defi 使用者和搶跑者處於同一規則下,並且競爭的過程和結果也是透明地暴露在區塊中。隨著礦池的介入,事情變得更加複雜,隱私交易和 MEV-Geth,都讓網路底層開始明確介入上層業務。而 MEV-Geth 似乎用各種好處正當化了對使用者的三明治夾擊,並且讓競價過程在一個外部無法觀測的網路中發生,網路執行過程變得變得不友好也不透明。
我這裡有幾個問題,
礦池為提供算力的礦工獲得利益出發,部署目前這個階段的 MEV-Geth 去獲取更多利益,這可能無可厚非。但這是否符合去中心和網路的公開公正呢?
Flashbots 之前公開承諾里有提到保護以太坊的開放性去中心化,目前 MEV-Geth 隱私性和公開拍賣競爭問題未解決之前,部署到當前的網路中是否是合適的時機呢?
礦池(礦工)的排序權引申出來的超級能力,可能在去中心化網路中無法被去除,也就是 MEV 是個客觀存在的事物。但對於 MEV-Geth 出現讓 MEV 的濫用變得更加便利,甚至成為正當藉口去夾擊使用者交易,這是否造成長期不良影響?
社羣中也是有不少關於 MEV 或 MEV-Geth 實現的爭議,不少聲音是擔心
康奈爾教授 Ari Juels 在 CoinDesk 上發表的《Miners, Front-Running-as-a-Service Is Theft》
Offchain Lab 聯合創始人 Ed Felten 發表的《MEV auctions considered harmful》,這篇不是針對這個議題,反對的是拍賣一天排序權的這種方法。
Vitalik 有一篇對此的迴應
Ethererum Research 論壇上網友 pmcgoohan 發表的《MEV Auctions Will Kill Ethereum》
Paramdigm 基金合夥人 Charlie Noyes 發表的《MEV and Me》中也提到“MEV Can Harm Users,MEV Can Harm Ethereum”
如果以太坊想成為支撐整個世界的金融基礎平臺,那麼維持使用者資產安全以及交易排序的公平性(隨機性)就非常重要。所有參與方都是按照礦工費競價規則競爭打包佇列位置,執行失敗會失去支付的礦工費。礦池在打包過程中完全忽略交易內容,僅以礦工費高低來為交易排序,網路驗證人和應用參與方隔離開來,互不干涉影響。
MEV-Geth 的全面部署以及礦工對以太坊網路的應用層逐步侵入,讓我感覺到有些不對勁,週末兩天思考和查閱材料,最後寫下了這篇內容,希望能讓更多人來思考這個可能會對以太坊影響深遠的問題,也感謝這幾天幫助校對內容的朋友們,特別感謝阿劍老師不斷對闡述邏輯和順序向我發問讓文章內容更加完善與邏輯完備。
Flashbots 相關內容索引
flashbots/mev-research: Project management for MEV Research
flashbots/pm: Everything there is to know about Flashbots