除了常見的三明治攻擊、反向套利和清算,通過 ActLifter 和 ActCluster 工具,我們在 600 多個以太坊交易包中又發現了 17 個未知類型的礦工可提取價值(MEV)。
(前情提要:MEV賽道總覽:重要性被低估了嗎? )
(背景補充:MEV發展及潛在機會在哪?一覽市場規模、價值鏈與產業格局 )
本文為 Web3 青年學者計劃中 香港理工大學博士生 Zihao Li 分享的文字整理。Web3 青年學者計劃由 DRK Lab 聯合 imToken 和 Crytape 共同發起,會邀請加密領域中知名的青年學者面向華語社群分享一些最新的研究成果。
大家好,我是 Zihao Li,香港理工大學三年級博士生,今天分享的主題是《揭祕以太坊交易包中的 MEV 活動》。簡單來說就是如何通過交易包發現以太坊網路中未知型別的 MEV 活動。
首先我會做一個比較基礎的背景介紹,比如 MEV 概念、交易包機制以及我們工作的背景。然後我會詳細介紹完整工作流以及一些設計思路,例如基於什麼樣的設計原則來設計的工作流、我們的資料集有哪些、我們使用了哪些工具在哪些指標上評估我們的工作流等。最後我會介紹三個應用包括相關的實證分析結果。
背景介紹:MEV、交易包、動機
MEV 活動是指區塊鏈中的套利者通過監控區塊鏈網路包括區塊狀態等生成套利交易。一些交易資訊是在區塊鏈 P2P 網路上傳播,或者說在礦工或者驗證者的交易池中儲存還沒有正式上鏈的一些交易,當套利者監聽到這些交易資訊之後,他通過一些策略產生自己的套利交易,然後把套利交易指定在接下來區塊某一個位置,比如說他要在下一個區塊的頭部,或者說在某個交易的後面緊跟著執行策略化交易來傳播一樣的套利交易。
這樣去指定某個位置的套利活動,我們可以把它認為是 MEV 活動。比如套利者監控到資產價格發生了波動,它就可以在價格低的交易池中購買到相應的資產,然後在另外一個價格高的資金池中高點賣出,這樣我們認為是一個 MEV 的活動。
MEV 活動目前來說主要是套利者圍繞 DeFi 生態展開的,因為 DeFi 生態目前主要聚集著資產,到目前為止,以太坊包括其他鏈 DeFi 生態已經吸引了超過 400 億美元的資金量。
這裡需要提一個關於 DeFi 生態的概念,稱之為 DeFi action,它對應的是一個 DeFi 應用提供的原子化服務操作,比如像我們知道 AMM 支援不同型別的資產之間進行兌換,使用者可以出售一筆 USDC,然後得到一筆 ETH,這樣的一個操作可以被定義為 DeFi action。
我們可以用 DeFi action 將 MEV 活動表示出來,例如一個使用者監測到不同 AMM 上面資產價格有些差距,使用者就可以通過低買高賣的方式,最終獲得這筆價差利潤。我們可以將這個 MEV 活動表示為兩個 DeFi action。
目前學術界對於 MEV 活動的研究主要分三類:分別是三明治攻擊、反向套利和清算,在我們工作的資料集裡面,我們發現這三種 MEV 活動出現次數超過 100 多萬筆。
這裡其實有一個問題,在我們知道這些 MEV 活動的定義之後,要怎麼去識別活動的發生。
如果我們想要識別這些 MEV 活動,我們就需要識別套利者的全部活動,比如說套利者產生哪些交易,這些交易裡面又有哪些型別的套利,然後我們才能確定當前是哪個型別的 MEV 活動在發生,而整個過程嚴重依賴於我們對已知 MEV 活動的定義。
以三明治攻擊舉例,我們知道三明治攻擊的定義之後,想要確定三明治攻擊的套利值,還有它對應的套利交易,我們需要從定義出發設定非常多的規則,然後通過這些規則篩選出候選三明治攻擊的套利值和交易。
當通過這種方式去識別已知 MEV 攻擊型別時,這裡會有兩個問題,第一個問題是我們已知三種常見的 MEV 活動是否能夠代表所有的 MEV 活動?顯然是不能的,因為 DeFi 生態一直在發展,新的應用也一直在開發,而這些套利者本身的策略其實也是在一直迭代的。
第二個問題是我們怎麼才能去發現這些未知的 MEV 活動。我們抱著這樣的問題來看一下交易包(Bundle)機制。
深挖交易包 (Bundle) 機制
交易包機制最早是在 2021 年提出的,簡單來說就是使用者可以組織交易佇列,這個交易佇列的長度可以是一個交易,也可以是若干個交易,然後使用者將這些交易發給區塊鏈網路中的中繼者,中繼者將這些交易收集之後直接並且私密地發給相關的礦工或者驗證者。
目前中繼者會執行交易包去承接中繼任務。交易包機制有一個非常重要的特徵,這些使用者在構造交易包的時候,他可以將其他人還沒有上鏈的交易放到一個交易包,並且交易包中的交易順序是可以任意操縱的。
這個時候交易包的使用者或者說使用交易包的套利者就可以設計他的套利規則。
比如說他可以設計更復雜的並且獲利更多的 MEV 活動策略。以三明治攻擊為例,如果沒有使用交易包,一個三明治攻擊的套利者至少需要產生一對交易才能實現套利,而這一對套利交易只能針對這一筆交易。這個攻擊交易產生套利需要必須是以一定順序執行才能確保它能夠套利成功。
但是如果一個套利者使用交易包時,他就可以收集很多筆可以套利的交易,只需要用一對相應的套利交易就可以同時對多筆交易產生套利。這個交易包只要上鏈,它就一定套利成功,並且因為它同時對多筆可套利的交易進行套利,所以說它的套利結果也是收益更多的。
交易包的特性是有非常豐富且複雜的 MEV 活動。因為使用交易包的使用者將自己完整的交易封裝在交易包中,然後發給 P2P 網路的中繼者,最後發給相應的礦工和驗證者。
我們通過交易包可以準確且完整的去識別到全部活動。因此我們是可以通過交易包媒介去比較準確的識別到一些未知的 MEV 活動。
工作流與設計思路
接下來具體介紹一下我們的工作流。我們是怎麼通過交易包這樣的媒介去發現未知的 MEV 活動的呢?核心工作流包括兩個工具,首先我們在中繼者收集到交易包之後使用 ActLifter 工具將交易包中的每一筆 DeFi actions 識別出來,在拿到結果之後,再將這個交易包中所有行為表示出來。
然後用 ActCluster 工具通過聚類的方法將有著相似活動的交易包聚集到一起,通過聚類出來的結果,更快地發現新的 MEV 活動。如果我們想要發現未知的 MEV 活動,那麼不可避免地需要人工最終確認 MEV 活動是不是一個未知型別,當然我們工作設計的目標儘可能的讓人工工作量最小化的,並且讓整個過程是儘可能自動化地開展。
目前已經有一些工具可以從交易中識別 MEV 活動。我們可以粗略分為兩類,第一類是純人工總結規則;第二類是純啟發式規則,也就是用一個純自動化的啟發式規則識別特定型別的 MEV 活動。
例如它識別到目前的一些轉帳資訊之後,檢查有沒有滿足啟發式規則,如果滿足之後,就能夠識別到對應的活動。第一種純人工總結規則的方法能達到比較好的精度,因為這個過程完全是人工分析特定的應用,然後它可以保證檢測結果是準確的,但是分析任務需要涉及到非常大的工作量,所以不能覆蓋到各個 DeFi 應用。
第二個工作雖然說可以實現純自動化,但是啟發式規則也只能覆蓋到一些特定型別。另一方面啟發式規則在設計上是有些問題的,導致它的識別精度不能讓人滿意。
我們綜合兩類方法的優點設計了我們工作流程。我們可以識別到十種目前比較主要的 DeFi action。我們只需要人工確定出來 DeFi 應用裡面哪一個事件在發起之後是對應著哪一個型別 DeFi action 之後,我們就可以不需要人工分析,後面就可以完全交給自動化分析。
第二類方法可以完全自動化識別到 DeFi action,但是它不能確定分析的物件是和 MEV 活動相關的。比如說我們識別到 SWAP 轉帳,它可能會將兩個完全不相關的轉帳組合去識別成一個 DeFi action,自然它識別的結果是錯誤的。但我們可以藉助這個資訊去篩選出來真正和 DeFi action 相關的資訊。而拿到這些資訊之後,我們可以通過自動化方法規避掉像第二類方法中發生的一些錯誤情況。
比如這裡有一筆交易一共涉及到了四筆轉帳,它們的發生順序、資金數量和類別等用序號標示出來。在這個過程中,AMM 其實是發起了一個和 Swap action 相關的事件。
第一類方法在確定到這個事件發起之後,它要通過事件的一些引數來恢復出來當前的內容。例如它需要看 699 合約的程式碼、業務邏輯和一些函式變數恢復出來當前的內容。
我們在拿到這些資訊之後,針對它特有的資產轉帳特徵設計了一個規則,比如說我們提煉的規則就是當前操作 DeFi 的合約是有收到和轉出不同型別資產,當我們發現有兩筆這樣的資產轉帳是符合這樣的特徵之後,我們就可以恢復出來對應的一個 Swap action 內容。
第二類方法就直接去匹配兩筆資產轉帳,這兩筆資產轉帳帳戶是收到和轉出了不同型別的資產。第一筆和第五筆這兩筆轉帳它就會認為是一對相關的轉帳,並且認為中間的帳戶是一個 AMM,顯然我們可以很直觀看到識別結果是不準確的。
我們通過人工分析總結出來的規則是相關事件對應的 DeFi action 型別的,雖然說結果是通過人工分析總結出來的,但是我們還是儘量把人工分析的過程提煉成一個半自動化的過程,從而確保我們整個過程的可靠性。
我們會從 DeFiPulse.com 和 Dapp.com 官網查詢 DeFi 應用的官網、開發者文件,包括一些合約原始碼。我們開發解析工具能夠從這些涉及到的材料中提取出關於事件在文件中的一些描述,例如這個事件是怎麼用代幣定義的以及在哪些函式裡面,這些事件被使用的程式碼片段和程式碼註釋。
我們把這些東西提取之後,通過我們人工分析加討論,最後確定出來有 88 個事件分別對應著不同型別的 DeFi action。
我們將待分析的交易輸入這個字典當中,從交易中解析它發生了哪些事件。然後當事件在這個字典中出現之後,我們根據相應的規則提取出關鍵資訊,例如是哪個合約在操作這個 DeFi action,然後這個 DeFi 的型別是什麼,以及哪些資產轉帳是和這個 DeFi action 相關的。
在拿到這樣的內容之後,我們會對應總結出來資產轉帳的特徵規則,然後用這個規則匹配最終的 DeFi action。我們從十個 DeFi action 定義出發,將資產轉帳的特徵規則做了總結。我們在前一步收集到這些資訊之後,我們會用這些匹配規則進行匹配,最終幫助我們識別到這個交易中有哪些 DeFi 發生了哪些具體內容。在 ActCluster 識別出來交易包中的每一筆交易之後,我們就可以表示出交易包的行為。
我們先了解一下 ActCluster 設計原則。我們知道人工分析在這個過程中是不可避免的,它必須要依賴人工才能確定出來交易包的活動是不是一個未知型別的 MEV 活動。基於這點,我們的基本思路是通過聚類的方式,將一些活動相似的一些交易包聚到一起。
對於每個聚類,我們只需要隨機抽樣一個或者是幾個交易包分析,就能加速人工分析的過程,最終發現不同型別的 MEV 活動。我們使用聚類分析對交易包進行聚類時,會面臨一個兩難的問題。當我們把交易包的聚類力度設定的比較粗時,包含著不同型別活動的交易包會被聚到一起,這個時候雖然說聚類出來的數量是變少了,相應的人工分析任務也是變少了,但是有一些新的 MEV 活動會被漏掉。
假如說我們把聚類的力度調的比較細的話,雖然說我們能區分出來一些相似但是不同的 MEV 活動對應的交易包,但是相關涉及到的人工分析的工作量大大增加了。
基於這樣的一個問題,我們設計了迭代聚類分析的方法,它會多輪迭代地進行聚類分析。每一輪我們會把包含著已知的前幾輪發現了新 MEV 活動交易包剔除出去,然後對接下來剩下的交易包提升聚類的力度。我們不能直接使用傳統的聚類方法對交易包進行聚類的,因為交易包其實是包含著多筆交易,而一筆交易裡面又可以包含著多個 DeFi action。
整個交易包我們如果把它表示出來,它的結構其實是異構,是分層的。這個時候我們就用了表示學習的方法將這個交易包的內容表示到一個定位空間裡面。我們使用表示學習的優點就是我們不需要對我們要分析處理的資料進行深度學習和理解,也不需要很豐富的領域知識,我們只需要單純的做資料導向處理就可以了。
比如說我們只需要對交易包用標籤標註一下交易包裡面包含哪些 MEV 活動。如果知道一個 MEV 活動定義的話,我們是比較容易設計相應的規則,能夠自動化的檢測出來它有沒有存在。
我們可以自動化對這些要表示學習的交易包進行標籤標註。我們的聚類分析是一個迭代型別的,而在每次迭代之後,我們可以發現新的 MEV 活動,這個時候我們其實是可以將這些新發現的 MEV 活動對應的標籤豐富到我們表示學習的過程中。
當我們表示學習過程中使用的標籤被豐富的時候,整個表示學習模型訓練的效能和效率是可以迭代提升的,而且這個表示學習對交易包的活動表示能力也可以迭代提高。一個交易包裡面其實是可以有多筆交易的,而一筆交易裡面其實也是可以有多筆 DeFi action 的,我們需要將交易包需表示出來。
首先對於每一類的 DeFi action,我們定義出一個標準化引數,比如哪個合約在操作在進行的,然後收到的和轉出的資產的數量和型別是什麼?我們通過這種方式去定義出每種 DeFi action。如果我們識別到一個交易裡面有多個 DeFi action,我們將它們用 action block 表示出來,從而能夠將這個交易對應的 transaction block 表示出來,包含著交易的源資訊,比如這個交易誰發起的,這個轉向又是發給誰的等。
交易裡面發生 DeFi action,我們會按照順序去用 action block 做填充。其中的每一筆交易用 transaction block 做一個表示,最後我們獲得的交易包的結構,而這個可以認為是一個矩陣。在這個交易包表示出來之後,我們就可以拿去做表示學習。每個交易包是一個統一結構,然後我們就可以用模型進行批量處理了。
效能評估
接下來分享我們用了哪些方法來評估工作流效能。我們整個分析過程的資料集是通過 Flashbots 提供的 API,並且收集了 2021 年 2 月到 2022 年 12 月的交易包資料,包括了超過 600 萬個交易包以及 2600 萬個交易。
我們設計了一些工具用來比較 DeFi action 的精度和完整度。這裡需要注意的是,在這些鏈上工具裡面,目前只有 Etherscan 可以通過它的網頁和它的提供的資訊恢復出來交易裡面的 DeFi action。
而像 DeFiRanger,我們是根據他們的論文復現出來他們的方法。在此之外,我們設計了一個叫做 EventLifter 工具,嘗試直接從交易事件去恢復出來 DeFi action。我們在不同的配置下測試了 ActLifter,同時用了多樣工具去比較識別的精度。對於 ActCluster 來說,我們主要思路是採用消融學習的方式,我們對於能夠識別到的新活動,在消融掉 ActCluster 一部分模組之後,我們如果還想識別到沒有發現的一些新活動,我們需要人工分析多少交易包或者說我們人工分析的工作量是有多大。
比如我們對 ActCluster 表示學習模組中的動態標籤更新做了一個消融,我們其實就是把整個過程消融掉了。我們從 600 萬個交易包中去隨機抽樣,然後看我們要人工分析多少個交易包才能發現同樣數量的新 MEV 活動。
我們的工具在配置統一的情況下是能夠達到接近百分之百的精度和完整度。但是像其他工具如 Etherscan 雖然它的精度能達到百分之百這比較滿意的情況,但是會有漏掉非常多的 DeFi action。Etherscan 本身是沒有開源方法的,我們推測它可能是用人工分析的方法總結規則來識別 DeFi action,它相應的會漏掉一些人工無法覆蓋到的型別。
這裡需要注意一點 Etherscan 其實是沒有提供自動化介面,如果你想去做大規模識別,其實是不能直接完成這樣的任務。完全使用潛規則識別的 DeFiRanger 在精度和完整度上不能讓人滿意。我們對 ActCluster 做實驗之後,發現可以通過四輪迭代分析,一共只需要分析 2000 個交易包就可以找出來 17 個未知 MEV 活動。像我們將其中的一些模組進行消融之後,我們最多可能需要人工分析 17 萬個交易包,才能把剛剛提到的 17 種未知 MEV 活動識別出來。
實證分析和應用
我們這樣能夠識別到未知型別 MEV 活動的方法有哪些具體的應用呢?第一它是否能夠增強當前存在的 MEV 緩解措施,能夠去防禦一些 MEV 活動。第二個是利用分析結果,我們是否能夠更全面的分析 MEV 活動對區塊鏈生態的影響,包括對區塊林分叉重組和使用者金融安全的影響。
我們前面有提到過 MEV boost 網路攻擊者會執行工具將交易包從使用者這裡拿到,然後最後分發給連線他們的這些礦工和驗證者。中繼者會把他們收到的交易包中包含著 MEA 活動的交易包剔除出去,他們通過這樣的方式能夠減少 MEA 活動對區塊鏈的一些負面影響。
這個環節主要的思路是通過已有的 MEV 活動的定義設計相應的規則去檢測交易包裡面有沒有包含 MEV 活動。顯然這些中繼者是無法排除掉一些包含未知 MEV 活動的交易包。基於我們的工作流,我們就設計了一個 MEVHunter 工具,這個工具可以把我們檢測到的新型別 MEV 活動從交易包裡面檢測出來。
檢測結果顯示有 100 多萬個交易包裡面是包含反向套利 MEV 活動的,另外 600 萬個交易包裡面有 30% 的交易包是包含三種已知的 MEV 活動。對於我們新發現的 MEV 活動,我們發現接近一半的交易包是隻包含這些新 MEV 活動的。如果中繼器用 MEVHunter 工具的話,可以幫助他們篩選出來 300 萬個包含著 MEV 活動的交易包,然後可以選擇把這些交易包去剔除出去,降低 MEV 活動對區塊鏈的負面影響。
第二個應用是我們去探究新型 MEV 活動對區塊鏈分叉和重組的影響。之前的一些研究有報導說一些金融性的礦工會被一些 MEV 活動的收益所激勵,從而去分叉和重組當前的區塊鏈,自己去進行 MEV 活動並享有收益。比如當一個區塊的 MEV 活動的收益是區塊獎勵的 4 倍時,就會有不少於 10% 的礦工對這個區塊進行分叉和重組。
我們首先根據剛剛提到的 MEVHunter 工具識別到哪些交易包包含新的 MEV 活動,然後通過這些交易包中礦工的收益去預估這些 MEV 活動相應的強度。這裡需要介紹一個概念,在交易包機制裡面,這些套利者為了確保自己的套利交易包能夠上鏈,通常會將 MEV 活動收益的一部分分享給礦工,然後礦工最終會選擇收益最高的交易包上鏈。我們用這一筆收益是可以統一預估出來每個交易包中 MEV 活動的。
根據我們的統計結果發現 MEV 收益是區塊獎勵的四倍到八倍的區塊一共有 900 多個,另外有一個區塊的 MEV 獎勵甚至是區塊獎勵的 700 多倍。我們用馬爾科夫決策的框架確定給定一個 MEV 收益,最少能夠激勵多少礦工進行區塊分叉和重組。我們最終發現有 1000 多個區塊是可以激勵不少於 10% 的礦工去做區塊分叉和重組。而像最嚴重的區塊,有不少於萬分之六比例的礦工去做區塊分叉和重組的。
第三個應用是探究 MEV 活動對區塊鏈使用者金融安全的影響。MEV 活動其實是可以導致區塊鏈使用者的交易在交易池或者 P2P 網路上等待上鏈的時間會被延長,這也是 MEV 活動對使用者的金融安全主要威脅之一。如果使用者的交易被延遲上鏈了,那麼套利者就可以有更多的時間設計更復雜且獲利更多的 MEV 活動。第三個應用是比較 MEV 活動對於使用者交易最後上鏈需要等待時間的影響。
第一步我們同樣是收集交易的等待時間。我們主要是通過在網路上部署節點,然後記錄第一次發現在網路上發現這個交易的時間,以及這個交易最終上鏈的時間,最後算出它需要等待的時間。我們用每個區塊中所有交易的等待時間的三個四分位點去做統計,這樣我們就可以以每個區塊為單位將交易的等待時間整理成一個時間序列。然後對應每個區塊裡面的 MEV 活動也是用每個區塊裡面礦工從包含著新 MEV 活動的交易包中獲得的收益刻畫出來,這樣的話我們就拿到了多條時間序列。
我們通過格蘭傑因果測試評估 MEV 活動對於交易時間的影響,因果測試可以確定一條時間序列裡面的波動是否導致另外一條時間序列的波動,以及它在多長範圍內影響或者導致了另外時間序列裡面的波動。當 MEV 活動發生波動的時候,它是否導致使用者的交易的等待時間變長,以及在後續的多少個區塊範圍內影響是存在的。
因果測試的 P 值小於等於 0.5 時,意味著這個區塊內的交易等待時間被之前的 MEV 活動影響而延長了。根據分析結果可以發現當發生 MEV 活動時,後續兩個區塊內 50% 的交易等待時間會被延長。當 MEV 活動發生之後,接下來 30 個區塊內 25% 的交易等待時間會被延長。礦工或者驗證者會把 Gas 費比較低的交易放到封裝區塊的尾部,使用者交易 Gas 越低,受到 MEV 活動的影響範圍就會越大,等待時間會被延長的更久。
最後總結,我們首先分享瞭如何通過工作流找到未知的 MEV 活動,以及工作流中兩個模組的詳細設計,然後我們通過實證分析驗證了工作流的有效性,同時列舉了三個應用。目前,我們用工作流發現了 17 種新的 MEV 活動。
📍相關報導📍
探究「黑暗森林」: 以 Uniswap 為例詳解 MEV 對 AMM 的長期影響