header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP
Partnered With:

Mempool中套利的機器人,以太坊黑暗森林中的超級掠食者

閱讀本文需 19 分鐘
衆所周知以太坊區塊鏈是一個危機四伏的環境。如果能通過抓住某一智能合約的漏洞牟利,總會有人這麼幹的。新黑客攻擊的頻率表明,一些非常聰明的人花費大量時間來尋找有漏洞的合約。

原文作者:Dan Robinson 和 Paradigm 研究合夥人 Georgios Konstantopoulos

翻譯:Perry Wang


這是一個恐怖故事。


挑戰


像普通人一樣,我在 Uniswap Discord 的 #support 頻道中花費了大量時間。(信息披露:Uniswap 是 Paradigm 參與投資的公司之一。)


週三下午,有人提問:如果把代幣誤發送給對智能合約本身的代幣交易對,是否有可能把代幣拿回來?


我最初的想法是這些代幣將永遠被鎖定。但是那天深夜,我突然意識到,如果代幣仍然在那兒,它們可能會被拿走——被任何人拿走。

真實存在的以太坊 DeFi「黑暗森林」:mempool 套利機器人吞噬了我的交易


當任何人在 Uniswap 核心合同上調用焚燬 burn 功能時,該合同將衡量自身的流動性代幣餘額並進行 burn ,將提取的代幣返給調用方指定的地址。這是 Uniswap v2 預期行爲的核心部分(基本機制在 Uniswap v2 白皮書的第 3 章 第 2 節中進行了描述)。


我找到了該合同。流動性代幣仍然存在,價值約 12,000 美元。


這意味着三件事:


-存在一個滴答作響的時鐘。即使沒有其他人注意到這筆免費的資金,任何人都可以隨時撤走自己的流動資金,意外地從合同中收到代幣。

-我可以扮演白帽黑客,嘗試爲將代幣誤發送到 Uniswap 合約的人找回代幣。非常簡單,只需要在資金池中調用 burn 函數,並將代幣傳遞到自己的地址。

-除非……我知道它不是那麼簡單。


黑暗森林


衆所周知以太坊區塊鏈是一個危機四伏的環境。如果能通過抓住某一智能合約的漏洞牟利,總會有人這麼幹的。新黑客攻擊的頻率表明,一些非常聰明的人花費大量時間來尋找有漏洞的合約。


但是與內存池 mempool(待處理、未確認的交易集)相比,這種暗藏殺機的環境不值一提。如果這條區塊鏈本身是戰場,那麼 mempool 更糟糕:那就是一片黑暗森林。

真實存在的以太坊 DeFi「黑暗森林」:mempool 套利機器人吞噬了我的交易


《黑暗森林》The Dark Forest 是我個人最喜歡的科幻小說。正是因爲這本書而有了「黑暗森林」這一概念——在這環境中高級掠食者不斷製造殺戮。在這種環境中,暴露某人的藏身之處無異於直接毀掉他 / 她。(這一概念也是以太坊測試網中黑暗森林 Dark Forest 遊戲的靈感來源。)


在以太坊 mempool 中,這些超級掠食者是以「套利機器人」形態存在。套利機器人監視着待處理交易,試圖從這些交易造成的每個牟利機會中敲骨吸髓。最深諳這些機器人的白帽黑客是 Phil Daian,這位智能合約研究者與其同事撰寫了 Flash Boys 2.0 論文,創造了「礦工可提取價值」(MEV)這一概念。


Phil 曾對我描述過一個宇宙級的恐怖殺手,他稱其爲「廣義搶跑者」。套利機器人通常會在 mempool 中查找特定類型的交易(例如去中心化交易所 DEX 的交易或預言機更新),並嘗試根據預定算法搶先截胡。廣義搶跑者尋找能夠從中賺錢的任何交易,迅速複製其交易並用自己的地址替換原交易中的地址。它們甚至可以執行交易並複製由其執行軌跡生成的有利可圖的內部交易。


這就是爲什麼我說要救回上述那筆誤發送的資金並非如此簡單的原因。任何人都可以調用這一 burn  功能。如果我提交了一項 burn  交易,那就像是霓虹燈般的「免費資金」標誌,直接向外界宣告了這個獲利機會。如果這些恐怖殺手確實在 mempool 中,就會看到這一交易,迅速複製,移花接木並接管我的交易,在我的交易之前拿走了錢。


請注意,這種環境比以太坊區塊鏈狀態本身還要殘酷得多。這些免費資金已經在以太坊區塊鏈上呆了大約八個小時而未被發現,靜待某個 burn  者席捲。但是任何試圖拿走這筆錢的嘗試都會迅速在空中被準確狙擊。


拯救


要想不打草驚蛇、不驚動機器人的情況下提取資金,我需要對交易進行瞞天過海的處理,以便機器人無法檢測到對 Uniswap 交易對的調用。這涉及編碼和部署定製合約。我是 DeFi 領域專業的思想領袖,我以前從未向以太坊實際部署任何合約。


我需要援手,而當時美國時間已經過了午夜。幸運的是,我認識的一些最好的智能合約工程師住在歐洲時區。我的 Paradigm 同事 Georgios Konstantopoulos 同意協助部署合約和提交交易。我們投資的另一家公司 Yield 的首席工程師 Alberto CuestaCañada 自告奮勇執行合約。


一些優秀的以太坊安全工程師幫助我們制定了一個瞞天過海的計劃。除了將調用隱藏爲內部交易之外,我們還將交易分爲兩部分:一個激活我們合約的 set 交易,以及一個拯救激活(如果合約已激活)資金的 get 交易。以如下路徑實現:


1.部署一個 Getter 合約,由其主人調用,只有在激活後纔會做出 burn 調用,否則恢復原狀。

2.部署一個 Setter 合約,由其主人調用,將激活 Getter 合約。

3.在同一區塊提交 set 交易和 get 交易。


真實存在的以太坊 DeFi「黑暗森林」:mempool 套利機器人吞噬了我的交易


如果攻擊者只試圖執行這一 get 交易,就會在不調用 burn 功能的情況下讓合約恢復原狀。我們原本希望的是在攻擊者先後執行 set 和 get 交易,發現內部調用 pool.burn 的指令,然後試圖對我們超車時,我們已經完成了交易。


我們拯救這筆錢的代碼腳本:




但出乎我們意料的是,這個 get 交易會被 Infura 拒絕,即使我們手動覆蓋 Gas 估算器也是如此。經過多次失敗的嘗試後和重新設置後,我們越來越感到時間壓力,抱着一絲僥倖心理,我們讓第二個交易滑進之後的區塊。


這成了一個致命的錯誤。


我們的 get 交易確實被收錄進了較早的區塊,但一個 UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED 錯誤,意味着其在 Uniswap 的流動性消失了。結果我們的 get 交易剛剛進入 mempool 幾秒鐘,就有人執行了調用,捲走了這筆錢。黑暗森林裏的怪獸還是吞噬了我們。


教訓


真實存在的怪獸


之前我們切實知道廣義搶跑者機器人的存在。但在看到它們真正出手之前,大家很可能低估了它們。


我們的希望是,通過一個授權合約、利用內部調用來完成拯救這筆資金的任務,從存儲傳遞一個變量作爲目標地址,也許會保護我們,但實際上並沒有起到作用。


如果你切實陷入了這種困境,我建議你去找 Amberdata 工程副總裁 Scott Bigelow,他是一直研究這一課題的安全研究人員,有一套能更好實現瞞天過海目的的原型實施策略。


不要心存僥倖


即使面臨時間壓力,我們當時也應該堅持原計劃。如果我們在代碼腳本上花更多時間,調整合約(也許將 Getter 合約更改爲不執行任何操作,而不是在激活之前被調用就恢復原狀),或者甚至同步自己的節點以避免使用 Infura,我們可能能夠讓該交易進入同一區塊。


不要依賴常規基礎架構


你的招數越奇怪,越難通過 Infura 這樣的現有基礎架構阻塞它。在我們的案例中,我們試圖基於當前的區塊鏈狀態提交看起來像將失敗的交易,Infura 有合理的保護措施阻止它。使用我們自己的節點可能會避免此問題。


更妙的是,如果你碰巧認識一個礦工(我們不認識),則可以讓他們直接將交易直接打包在一個區塊中,從而完全跳過 mempool,自然也就避開了吃人怪獸。


未來只會更恐怖


這只是一個搶先交易的一個例子。每天發生無數次類似的事情。今天的搶先交易者只是機器人。明天可能會是礦工。


礦工們目前沒有對這些機會下手,把錢留在了賭桌上。將來他們可能會爲了自己的利益而在 mempool 中重新排序並提交交易。更糟糕的是,他們可能會重組其他礦工挖出的區塊,以試圖竊取不屬於自己的 MEV,從而導致區塊鏈的不穩定。


我們認爲這種恐怖的未來是可以被預防的。Optimism (Paradigm 投資的另一家公司)對於 MEV 如何被重新引導以維護生態系統的利益有着雄心勃勃的構想,這是他們 Layer 2 擴容解決方案 Optimistic Rollup 的一部分。


感謝 Alberto Cuesta Cañada, Scott Bigelow, Phil Daian, Charlie Noyes 和 Sam Sun 對本文貢獻的意見。


原文鏈接



歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

举报 糾錯/舉報
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交