揭秘以太坊交易包中未知類型的MEV

嘉賓:Zihao Li,香港理工大學博士生

整理:aididiao.eth,Foresight News

本文為Web3 青年學者計劃中香港理工大學博士生Zihao Li 視頻分享的文字整理。 Web3 青年學者計劃由DRK Lab 聯合imToken 和Crytape 共同發起,會邀請加密領域中知名的青年學者面向華語社區分享一些最新的研究成果。

大家好,我是Zihao Li,香港理工大學三年級博士生,今天分享的主題是《揭秘以太坊交易包中的MEV 活動》。簡單來說就是如何通過交易包發現以太坊網絡中未知類型的MEV 活動。首先我會做一個比較基礎的背景介紹,比如MEV 概念、交易包機制以及我們工作的背景。然後我會詳細介紹完整工作流以及一些設計思路,例如基於什麼樣的設計原則來設計的工作流;我們的數據集有哪些;我們使用了哪些工具在哪些指標上評估我們的工作流等。最後我會介紹三個應用包括相關的實證分析結果。

背景介紹:MEV、交易包、動機

MEV 活動是指區塊鏈中的套利者通過監控區塊鍊網絡包括區塊狀態等生成套利交易。一些交易信息是在區塊鏈P2P 網絡上傳播,或者說在礦工或者驗證者的交易池中儲存還沒有正式上鍊的一些交易,當套利者監聽到這些交易信息之後,他通過一些策略產生自己的套利交易,然後把套利交易指定在接下來區塊某一個位置,比如說他要在下一個區塊的頭部,或者說在某個交易的後面緊跟著執行策略化交易來傳播一樣的套利交易。這樣去指定某個位置的套利活動,我們可以把它認為是MEV 活動。比如套利者監控到資產價格發生了波動,它就可以在價格低的交易池中購買到相應的資產,然後在另外一個價格高的資金池中高點賣出,這樣我們認為是一個MEV 的活動。

揭秘以太坊交易包中未知類型的MEV

MEA 活動目前來說主要是套利者圍繞DeFi 生態展開的,因為DeFi 生態目前主要聚集著資產,到目前為止,以太坊包括其他鏈DeFi 生態已經吸引了超過400 億美元的資金量。這裡需要提一個關於DeFi 生態的概念,稱之為DeFi action,它對應的是一個DeFi 應用提供的原子化服務操作,比如像我們知道AMM 支持不同類型的資產之間進行兌換,用戶可以出售一筆USDC,然後得到一筆ETH,這樣的一個操作可以被定義為DeFi action。我們可以用DeFi action 將MEV 活動表示出來,例如一個用戶監測到不同AMM 上面資產價格有些差距,用戶就可以通過低買高賣的方式,最終獲得這筆價差利潤。我們可以將這個MEV 活動表示為兩個DeFi action。

揭秘以太坊交易包中未知類型的MEV

目前學術界對於MEV 活動的研究主要分三類,分別是三明治攻擊、反向套利和清算,在我們工作的數據集裡面,我們發現這三種MEV 活動出現次數超過100 多萬筆。這裡其實有一個問題,在我們知道這些MEV 活動的定義之後,要怎麼去識別活動的發生。如果我們想要識別這些MEV 活動,我們就需要識別套利者的全部活動,比如說套利者產生哪些交易,這些交易裡面又有哪些類型的套利,然後我們才能確定當前是哪個類型的MEV 活動在發生,而整個過程嚴重依賴於我們對已知MEV 活動的定義。以三明治攻擊舉例,我們知道三明治攻擊的定義之後,想要確定三明治攻擊的套利值,還有它對應的套利交易,我們需要從定義出發設置非常多的規則,然後通過這些規則篩選出候選三明治攻擊的套利值和交易。當通過這種方式去識別已知MEV 攻擊類型時,這裡會有兩個問題,第一個問題是我們已知三種常見的MEV 活動是否能夠代表所有的MEV 活動?顯然是不能的,因為DeFi 生態一直在發展,新的應用也一直在開發,而這些套利者本身的策略其實也是在一直迭代的。第二個問題是我們怎麼才能去發現這些未知的MEV 活動。我們抱著這樣的問題來看一下交易包機制。

揭秘以太坊交易包中未知類型的MEV

交易包機制最早是在2021 年提出的,簡單來說就是用戶可以組織交易隊列,這個交易隊列的長度可以是一個交易,也可以是若干個交易,然後用戶將這些交易發給區塊鍊網絡中的中繼者,中繼者將這些交易收集之後直接並且私密地發給相關的礦工或者驗證者。目前中繼者會運行交易包去承接中繼任務。交易包機制有一個非常重要的特徵,這些用戶在構造交易包的時候,他可以將其他人還沒有上鍊的交易放到一個交易包,並且交易包中的交易順序是可以任意操縱的。這個時候交易包的用戶或者說使用交易包的套利者就可以設計他的套利規則。比如說他可以設計更複雜的並且獲利更多的MEV 活動策略。以三明治攻擊為例,如果沒有使用交易包,一個三明治攻擊的套利者至少需要產生一對交易才能實現套利,而這一對套利交易只能針對這一筆交易。這個攻擊交易產生套利需要必須是以一定順序執行才能確保它能夠套利成功。但是如果一個套利者使用交易包時,他就可以收集很多筆可以套利的交易,只需要用一對相應的套利交易就可以同時對多筆交易產生套利。這個交易包只要上鍊,它就一定套利成功,並且因為它同時對多筆可套利的交易進行套利,所以說它的套利結果也是收益更多的。

揭秘以太坊交易包中未知類型的MEV

交易包的特性是有非常豐富且複雜的MEV 活動。因為使用交易包的用戶將自己完整的交易封裝在交易包中,然後發給P2P 網絡的中繼者,最後發給相應的礦工和驗證者。我們通過交易包可以準確且完整的去識別到全部活動。因此我們是可以通過交易包媒介去比較準確的識別到一些未知的MEV 活動。

工作流與設計思路

揭秘以太坊交易包中未知類型的MEV

接下來具體介紹一下我們的工作流。我們是怎麼通過交易包這樣的媒介去發現未知的MEV 活動的呢?核心工作流包括兩個工具,首先我們在中繼者收集到交易包之後使用ActLifter 工具將交易包中的每一筆DeFi actions 識別出來,在拿到結果之後,再將這個交易包中所有行為表示出來。然後用ActCluster 工具通過聚類的方法將有著相似活動的交易包聚集到一起,通過聚類出來的結果,更快地發現新的MEV 活動。如果我們想要發現未知的MEV 活動,那麼不可避免地需要人工最終確認MEV 活動是不是一個未知類型,當然我們工作設計的目標盡可能的讓人工工作量最小化的,並且讓整個過程是盡可能自動化地開展。

揭秘以太坊交易包中未知類型的MEV

目前已經有一些工具可以從交易中識別MEV 活動。我們可以粗略分為兩類,第一類是純人工總結規則;第二類是純啟發式規則,也就是用一個純自動化的啟發式規則識別特定類型的MEV 活動。例如它識別到目前的一些轉賬信息之後,檢查有沒有滿足啟發式規則,如果滿足之後,就能夠識別到對應的活動。第一種純人工總結規則的方法能達到比較好的精度,因為這個過程完全是人工分析特定的應用,然後它可以保證檢測結果是準確的,但是分析任務需要涉及到非常大的工作量,所以不能覆蓋到各個DeFi 應用。第二個工作雖然說可以實現純自動化,但是啟發式規則也只能覆蓋到一些特定類型。另一方面啟發式規則在設計上是有些問題的,導致它的識別精度不能讓人滿意。

我們綜合兩類方法的優點設計了我們工作流程。我們可以識別到十種目前比較主要的DeFi action。我們只需要人工確定出來DeFi 應用裡面哪一個事件在發起之後是對應著哪一個類型DeFi action 之後,我們就可以不需要人工分析,後面就可以完全交給自動化分析。第二類方法可以完全自動化識別到DeFi action,但是它不能確定分析的對像是和MEV 活動相關的。比如說我們識別到SWAP 轉賬,它可能會將兩個完全不相關的轉賬組合去識別成一個DeFi action,自然它識別的結果是錯誤的。但我們可以藉助這個信息去篩選出來真正和DeFi action 相關的信息。而拿到這些信息之後,我們可以通過自動化方法規避掉像第二類方法中發生的一些錯誤情況。

揭秘以太坊交易包中未知類型的MEV

比如這裡有一筆交易一共涉及到了四筆轉賬,它們的發生順序、資金數量和類別等用序號標示出來。在這個過程中,AMM 其實是發起了一個和Swap action 相關的事件。第一類方法在確定到這個事件發起之後,它要通過事件的一些參數來恢復出來當前的內容。例如它需要看699 合約的代碼、業務邏輯和一些函數變量恢復出來當前的內容。我們在拿到這些信息之後,針對它特有的資產轉賬特徵設計了一個規則,比如說我們提煉的規則就是當前操作DeFi 的合約是有收到和轉出不同類型資產,當我們發現有兩筆這樣的資產轉賬是符合這樣的特徵之後,我們就可以恢復出來對應的一個Swap action 內容。第二類方法就直接去匹配兩筆資產轉賬,這兩筆資產轉賬賬戶是收到和轉出了不同類型的資產。第一筆和第五筆這兩筆轉賬它就會認為是一對相關的轉賬,並且認為中間的賬戶是一個AMM,顯然我們可以很直觀看到識別結果是不准確的。

揭秘以太坊交易包中未知類型的MEV

我們通過人工分析總結出來的規則是相關事件對應的DeFi action 類型的,雖然說結果是通過人工分析總結出來的,但是我們還是盡量把人工分析的過程提煉成一個半自動化的過程,從而確保我們整個過程的可靠性。我們會從DeFiPulse.com 和Dapp.com 官網查詢DeFi 應用的官網、開發者文檔,包括一些合約源碼。我們開發解析工具能夠從這些涉及到的材料中提取出關於事件在文檔中的一些描述,例如這個事件是怎麼用代幣定義的以及在哪些函數里面,這些事件被使用的代碼片段和代碼註釋。我們把這些東西提取之後,通過我們人工分析加討論,最後確定出來有88 個事件分別對應著不同類型的DeFi action。

我們將待分析的交易輸入這個字典當中,從交易中解析它發生了哪些事件。然後當事件在這個字典中出現之後,我們根據相應的規則提取出關鍵信息,例如是哪個合約在操作這個DeFi action,然後這個DeFi 的類型是什麼,以及哪些資產轉賬是和這個DeFi action 相關的。在拿到這樣的內容之後,我們會對應總結出來資產轉賬的特徵規則,然後用這個規則匹配最終的DeFi action。我們從十個DeFi action 定義出發,將資產轉賬的特徵規則做了總結。我們在前一步收集到這些信息之後,我們會用這些匹配規則進行匹配,最終幫助我們識別到這個交易中有哪些DeFi 發生了哪些具體內容。在ActCluster 識別出來交易包中的每一筆交易之後,我們就可以表示出交易包的行為。

揭秘以太坊交易包中未知類型的MEV

我們先了解一下ActCluster 設計原則。我們知道人工分析在這個過程中是不可避免的,它必須要依賴人工才能確定出來交易包的活動是不是一個未知類型的MEV 活動。基於這點,我們的基本思路是通過聚類的方式,將一些活動相似的一些交易包聚到一起。對於每個聚類,我們只需要隨機抽樣一個或者是幾個交易包分析,就能加速人工分析的過程,最終發現不同類型的MEA 活動。我們使用聚類分析對交易包進行聚類時,會面臨一個兩難的問題。當我們把交易包的聚類力度設置的比較粗時,包含著不同類型活動的交易包會被聚到一起,這個時候雖然說聚類出來的數量是變少了,相應的人工分析任務也是變少了,但是有一些新的MEV 活動會被漏掉。假如說我們把聚類的力度調的比較細的話,雖然說我們能區分出來一些相似但是不同的MEA 活動對應的交易包,但是相關涉及到的人工分析的工作量大大增加了。

基於這樣的一個問題,我們設計了迭代聚類分析的方法,它會多輪迭代地進行聚類分析。每一輪我們會把包含著已知的前幾輪發現了新MEV 活動交易包剔除出去,然後對接下來剩下的交易包提升聚類的力度。我們不能直接使用傳統的聚類方法對交易包進行聚類的,因為交易包其實是包含著多筆交易,而一筆交易裡面又可以包含著多個DeFi action。整個交易包我們如果把它表示出來,它的結構其實是異構,是分層的。這個時候我們就用了表示學習的方法將這個交易包的內容表示到一個定位空間裡面。我們使用表示學習的優點就是我們不需要對我們要分析處理的數據進行深度學習和理解,也不需要很豐富的領域知識,我們只需要單純的做數據導向處理就可以了。

揭秘以太坊交易包中未知類型的MEV

比如說我們只需要對交易包用標籤標註一下交易包裡麵包含哪些MEV 活動。如果知道一個MEV 活動定義的話,我們是比較容易設計相應的規則,能夠自動化的檢測出來它有沒有存在。我們可以自動化對這些要表示學習的交易包進行標籤標註。我們的聚類分析是一個迭代類型的,而在每次迭代之後,我們可以發現新的MEV 活動,這個時候我們其實是可以將這些新發現的MEV 活動對應的標籤豐富到我們表示學習的過程中。當我們表示學習過程中使用的標籤被豐富的時候,整個表示學習模型訓練的性能和效率是可以迭代提升的,而且這個表示學習對交易包的活動表示能力也可以迭代提高。一個交易包裡面其實是可以有多筆交易的,而一筆交易裡面其實也是可以有多筆DeFi action 的,我們需要將交易包需表示出來。首先對於每一類的DeFi action,我們定義出一個標準化參數,比如哪個合約在操作在進行的,然後收到的和轉出的資產的數量和類型是什麼?我們通過這種方式去定義出每種DeFi action。如果我們識別到一個交易裡面有多個DeFi action,我們將它們用action block 表示出來,從而能夠將這個交易對應的transaction block 表示出來,包含著交易的源信息,比如這個交易誰發起的,這個轉向又是發給誰的等。交易裡面發生DeFi action,我們會按照順序去用action block 做填充。其中的每一筆交易用transaction block 做一個表示,最後我們獲得的交易包的結構,而這個可以認為是一個矩陣。在這個交易包表示出來之後,我們就可以拿去做表示學習。每個交易包是一個統一結構,然後我們就可以用模型進行批量處理了。

性能評估

揭秘以太坊交易包中未知類型的MEV

接下來分享我們用了哪些方法來評估工作流性能。我們整個分析過程的數據集是通過Flashbots 提供的API,並且收集了2021 年2 月到2022 年12 月的交易包數據,包括了超過600 萬個交易包以及2600 萬個交易。

揭秘以太坊交易包中未知類型的MEV

我們設計了一些工具用來比較DeFi action 的精度和完整度。這裡需要注意的是,在這些鏈上工具裡面,目前只有Etherscan 可以通過它的網頁和它的提供的信息恢復出來交易裡面的DeFi action。而像DeFiRanger,我們是根據他們的論文復現出來他們的方法。在此之外,我們設計了一個叫做EventLifter 工具,嘗試直接從交易事件去恢復出來DeFi action。我們在不同的配置下測試了ActLifter,同時用了多樣工具去比較識別的精度。對於ActCluster 來說,我們主要思路是採用消融學習的方式,我們對於能夠識別到的新活動,在消融掉ActCluster 一部分模塊之後,我們如果還想識別到沒有發現的一些新活動,我們需要人工分析多少交易包或者說我們人工分析的工作量是有多大。比如我們對ActCluster 表示學習模塊中的動態標籤更新做了一個消融,我們其實就是把整個過程消融掉了。我們從600 萬個交易包中去隨機抽樣,然後看我們要人工分析多少個交易包才能發現同樣數量的新MEV 活動。

揭秘以太坊交易包中未知類型的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 活動從交易包裡面檢測出來。

揭秘以太坊交易包中未知類型的MEV

檢測結果顯示有100 多萬個交易包裡面是包含反向套利MEV 活動的,另外600 萬個交易包裡面有30% 的交易包是包含三種已知的MEV 活動。對於我們新發現的MEV 活動,我們發現接近一半的交易包是只包含這些新MEV 活動的。如果中繼器用MEVHunter 工具的話,可以幫助他們篩選出來300 萬個包含著MEV 活動的交易包,然後可以選擇把這些交易包去剔除出去,降低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 活動發生波動的時候,它是否導致用戶的交易的等待時間變長,以及在後續的多少個區塊範圍內影響是存在的。

揭秘以太坊交易包中未知類型的MEV

因果測試的P 值小於等於0.5 時,意味著這個區塊內的交易等待時間被之前的MEV 活動影響而延長了。根據分析結果可以發現當發生MEV 活動時,後續兩個區塊內50% 的交易等待時間會被延長。當MEV 活動發生之後,接下來30 個區塊內25% 的交易等待時間會被延長。礦工或者驗證者會把Gas 費比較低的交易放到封裝區塊的尾部,用戶交易Gas 越低,受到MEV 活動的影響範圍就會越大,等待時間會被延長的更久。

最後總結,我們首先分享瞭如何通過工作流找到未知的MEV 活動,以及工作流中兩個模塊的詳細設計,然後我們通過實證分析驗證了工作流的有效性,同時列舉了三個應用。目前,我們用工作流發現了17 種新的MEV 活動。

Total
0
Shares
Related Posts