什么是 Front-running
要介紹MEV,就繞不開Front-running(直譯為搶跑),也稱為Priority Gas Auctions (PGAs),實(shí)際上是一個(gè)意思。
我們都知道,常規(guī)意義上,在以太坊上提交交易是一個(gè)看似有序的過程,現(xiàn)在重新審視一下這個(gè)過程:
-
用戶需要在錢包構(gòu)建交易,并簽名,錢包后端會(huì)將該交易廣播到 P2P 網(wǎng)絡(luò);
-
該交易首先會(huì)進(jìn)入各個(gè)節(jié)點(diǎn)的 mempool,按照一定的順序排列;
-
礦工從 mempool 中選取合適的交易進(jìn)行打包,挖礦出塊,該交易就成功上鏈了。
然而事實(shí)并非如此,和看似有序的交易打包過程相比,以太坊更像一個(gè)?黑暗森林?[1]。
由于每個(gè)以太坊全節(jié)點(diǎn)均會(huì)維護(hù)一個(gè) mempool,上面的未打包交易是清晰可見的。有這么一群人,這群人會(huì)不分晝夜地審視 mempool 中未打包的交易,通過某些技術(shù)手段判斷這些交易執(zhí)行是否是有利可圖的,并利用較高的 gasPrice 搶先執(zhí)行交易。舉個(gè)最直接的例子,當(dāng)這些人發(fā)現(xiàn)某鯨魚地址提交了在 Uniswap 大量買入某數(shù)字貨幣的交易,他們會(huì)利用更高 gasPrice 發(fā)布一個(gè)買入交易。通常情況下,礦工會(huì)優(yōu)先打包 price 更高的交易,將搶跑者的交易插入到鯨魚交易的前面,這樣鯨魚地址的買入就為搶跑者”抬了轎子“,通過這種方式獲得利潤。
部署蜜罐合約認(rèn)識(shí)搶跑
我們引用之前其他人做過的實(shí)驗(yàn),通過部署一個(gè)蜜罐合約來研究搶跑行為。部署蜜罐合約如下,用戶必須調(diào)用合約中的 take 方法,并正確提交 secret 才能拿走合約中的 ETH:
當(dāng)發(fā)起交易的時(shí)候,該交易會(huì)首先提交到 mempool 中,搶跑者會(huì)不斷讀取 mempool 中的交易。并且對這些交易模擬執(zhí)行,當(dāng)發(fā)現(xiàn)有利可圖時(shí),比如執(zhí)行完之后發(fā)現(xiàn)可以獲取到一定數(shù)量的 ETH 或者 ERC-20 代幣,則將該交易進(jìn)行搶跑。
可以看到,在發(fā)起的第一筆正常交易時(shí),指定了 33 gwei 的 gasPrice:
該交易調(diào)用了蜜罐合約的 take 方法,但是交易執(zhí)行完之后,卻沒有收到 ETH獎(jiǎng)勵(lì)。而查看合約的 event 之后,我們發(fā)現(xiàn)不止有一個(gè)和該蜜罐合約進(jìn)行了交互,并且緊跟在初始交易的后面發(fā)生:
除了 0xe0c3dc 交易,其他的交易都是搶跑者發(fā)起的交易,其中只有一筆交易成功提走了合約的獎(jiǎng)勵(lì) ETH。
-
0x15becbfbd33237bb28c8925870bedbf8b80cbe9967e89ea72239d418e931d5c7(失敗,122.425344303?Gwei)
-
0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f(成功,122.425344305 Gwei)
-
0x2f5e7b565e8280826af0a9f492d53fac1b690848df39b98b22f614143d633a4d(失敗,43 Gwei)
可以看到,最終 gasPrice 最高的交易成功提走了蜜罐合約的獎(jiǎng)勵(lì),哪怕只比別人高了0.000000002 gwei:
那么問題來了,蜜罐合約并沒有發(fā)布源碼,這些搶跑者是如何在如此短的時(shí)間內(nèi)判定該交易值得被頂替呢?或者說如何判定該交易是有價(jià)值的?這里就涉及到交易模擬執(zhí)行技術(shù)。
搶跑關(guān)鍵技術(shù):交易模擬執(zhí)行
搶跑機(jī)器人如何判斷某個(gè)在 mempool 的交易是否是有利可圖的呢?這里需要介紹交易模擬技術(shù)。
交易模擬執(zhí)行本質(zhì)上是給定交易的輸入、給定需要模擬的狀態(tài)樹,通過這兩個(gè)數(shù)據(jù),由 EVM 模擬執(zhí)行一次并輸出 trace 結(jié)果。
實(shí)現(xiàn)起來其實(shí)并不難,如果我們維護(hù)一個(gè) archive 節(jié)點(diǎn)或者 trace 節(jié)點(diǎn),RPC中會(huì)有 trace_call 這個(gè) endpoint,通過 tace_call 我們可以實(shí)現(xiàn)交易的模擬執(zhí)行,可以看到交易中的內(nèi)部交易、狀態(tài)變化等。
比如我們需要模擬執(zhí)行交易:0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f,并且需要在歷史狀態(tài)上執(zhí)行,我們則需要首先維護(hù)一個(gè) parity 的 archive 節(jié)點(diǎn)(archive 節(jié)點(diǎn)會(huì)保存全部的歷史狀態(tài)),并且執(zhí)行以下命令:
市面上甚至有一些商業(yè)產(chǎn)品專門提供模擬執(zhí)行功能,如 blocknative [2]、tenderly 等,其本質(zhì)就是在 trace_call 的基礎(chǔ)上包裝一層前端,獲得更好的用戶體驗(yàn):
基于交易模擬執(zhí)行,搶跑者會(huì)按照下面的步驟判斷是否搶跑:
-
會(huì)持續(xù)監(jiān)控 mempool 中的各種交易,甚至是其他搶跑者的交易
-
將這些交易進(jìn)行 EVM 模擬執(zhí)行,獲取模擬執(zhí)行結(jié)果
-
一旦發(fā)現(xiàn)這些未提交到區(qū)塊的交易有利可圖,則發(fā)起新的交易設(shè)置更高的 gasPrice 頂?shù)?mempool 中的交易
實(shí)際上,交易模擬執(zhí)行技術(shù)用途非常廣泛,遠(yuǎn)不止僅做搶跑前的準(zhǔn)備,對于高頻交易、模擬交易評估、判斷蜜罐合約、研究黑盒交易等作用。
從 Front-running 到 MEV
搶跑本質(zhì)上是通過交易順序的排列來獲取額外的利潤。實(shí)際上,對于礦工來說,完全可以自己當(dāng)搶跑者,因?yàn)榈V工完全有能力重新組織交易順序。這樣一來,礦工除了傳統(tǒng)意義上的出塊獎(jiǎng)勵(lì)、交易手續(xù)費(fèi),還多了一些額外收益,這些收益就叫做 MEV(Miner extractable value),稱為礦工可提取價(jià)值。
MEV 主要有兩種形式:
-
Frontrunning:致力于將交易插入到某些交易的前面執(zhí)行,比如針對鯨魚交易的套利行為,或者搶先執(zhí)行一些套利者的交易。
-
Backrunning:致力于將交易插入到某些交易的后面執(zhí)行,比如針對搶 Defi 清算,將清算交易插入到 oracle 更新之后來搶清算。
可以預(yù)見的是,隨著以太坊使用量的激增,MEV 最終造成以太坊共識(shí)機(jī)制的不穩(wěn)定。
正常情況下,以太坊提供了交易 gas 競價(jià)模式,出價(jià)高的會(huì)被礦工優(yōu)先打包,如果礦工從某些利益出發(fā)去排列交易,實(shí)際上會(huì)造成一種混亂的局面,引發(fā) P2P 網(wǎng)絡(luò)擁堵或者區(qū)塊空間的擁堵。
對于MEV緩解措施,業(yè)內(nèi)涌現(xiàn)了諸如 flashbots 和 EDEN 等技術(shù)方案,
下圖為 flashbot 的架構(gòu)圖:
Flashbots生態(tài)中由三個(gè)角色組成:
-
searcher:交易發(fā)起者,可以是普通用戶、也可能是套利機(jī)器人等對暗池交易有需求的以太坊用戶
-
relayer:轉(zhuǎn)發(fā)者,監(jiān)控自己的mempool,將用戶發(fā)起的交易bundle模擬執(zhí)行,確認(rèn)無誤后,直接轉(zhuǎn)發(fā)給礦工
-
miner:礦工,接受relayer bundle交易,并直接將其打包到區(qū)塊中
其實(shí)本質(zhì)上就是在以太坊用戶和礦工之間構(gòu)建一條有序的通道,通過自建交易暗池來繞開mempool機(jī)制,這樣做可以使得MEV更加透明、有序,從而保護(hù)以太坊的相關(guān)機(jī)制。
etherscan上標(biāo)注flashbots的暗池交易
此外,flashbots中有很多有趣的技術(shù),比如可以使批量交易原子化,再比如除了傳統(tǒng)的gasPrice拍賣入塊機(jī)制,用戶甚至可以配置在交易滿足某些條件的情況下直接給礦工打款,從而避免交易revert造成的gas損耗。
NOTICE:如果對flashbots技術(shù)感興趣,筆者強(qiáng)烈建議精讀[3]和[4],后續(xù)會(huì)出系列文章解讀flashbots。
總結(jié)
引用 ”Ethereum is a Dark Forest“ [1] 中作者的一句話:
It’s?no?secret?that?the?Ethereum?blockchain?is?a?highly?adversarial?environment.
隨著 Defi 的興起,以太坊上每一個(gè)新交易的產(chǎn)生、每一個(gè)合約的部署都蘊(yùn)含著大量的價(jià)值,因此有無數(shù)”獵人“ 虎視眈眈,他們有著強(qiáng)大的毅力和時(shí)間攫取每一份能攫取的利潤。
然而,加密貨幣領(lǐng)域永遠(yuǎn)不乏激動(dòng)人心的創(chuàng)新者,隨著 MEV 賽道的日漸有序化和成熟,相信黑暗森林最終會(huì)往透明化、有序化方向發(fā)展。
參考
[1]https://medium.com/@danrobinson/ethereum-is-a-dark-forest-ecc5f0505dff
[2]?https://www.blocknative.com/blog/what-is-simulation
[3]https://github.com/flashbots/mev-research/blob/main/resources.md文章來源:http://www.zghlxwxcb.cn/news/detail-490276.html
[4]?https://arxiv.org/abs/1904.05234文章來源地址http://www.zghlxwxcb.cn/news/detail-490276.html
到了這里,關(guān)于深入淺出以太坊MEV的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!