BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

鮮為人知的財富密碼:搶跑機器人有多厲害? |烤仔星選

讲道李
特邀专栏作者
本文約5261字,閱讀全文需要約8分鐘
區塊鍊是科學家的提款機,這話不是吹的。
AI總結
展開
區塊鍊是科學家的提款機,這話不是吹的。

以太坊黑暗森林可謂是野獸橫行,這絕對不是駭人聽聞。這些搶跑機器人可以靠分析合約的調用,從而發現潛在的賺錢機會。

大部分人對於搶跑機器,可能還聞所未聞,所以我們先來簡單介紹下概念、分析行為,並且我們還研究了它們的效率、成功搶跑交易的概率,還用了很多方式來嘗試抵禦它們。

什麼是搶跑交易?

首先介紹下概念,通常搶跑交易指的是,在一個已知的未來交易發生前,將另一個交易插入執行隊列的第一位。

舉個例子🌰,交易所的交易過程。比方說有人準備在Uniswap 上購買大量ETH(足夠拉盤的那種),一種獲利的方法就是趁價格還沒漲趕緊買,等到拉盤以後再賣。

搶跑也不僅限於上面提到的這個方式,還有其它很多,比如清算、購買稀有的NFT,或者是製造一些用戶錯誤。這裡要給大家引入一個概念:MEV,礦工可抽取價值——一個交易或一組交易的可抽取價值。

在ETH鏈上要搶跑交易,可以通過提供調高轉賬手續費,比目標交易略高一點,激勵礦工在打包時把自己的交易排在前面。因為gas 價格高的交易會優先執行,所以,如果有兩筆交易都想從同一個合約調用中獲利,這兩筆交易被打包到同一個區塊了,那肯定是看誰的gas 費給的越高,誰能排在前面,才能成功搶先套利。

所以話說回來,搶跑交易某種程度上也算是套利。

動物行為學

在Dan Robinson 和Georgios Konstantopoulos 共同編寫的文章《以太坊是黑暗森林》中,提到了一個概念:價值抽取。故事講述了一次拯救價值12,000 美金token 的過程中,被套利機器人(“捕食者”)截胡的經歷。這些套利機器人非常先進,非常強大,它們能夠追踪以太坊交易池裡的套利交易,通過搶跑,就是上文我們提到的,來獲取利益。

黑暗森林這篇文章挺有意思的,建議大家有空可以讀一讀。如果看過的讀者可能會覺得文章講的太匪夷所思了,不敢相信:像Uniswap 這種被大量機器人監控的平台,竟然還能有“超級捕食者機器人”能虎口奪食,從眾多套利者手中搶錢?這些所謂的機器人是不是也是一群普通的套利者?

不過,你不知道不代表沒有。它們不是普通的機器人,它們可以調用之前從未被調用過的智能合約函數來搶錢,而且還是在原始交易被代理智能合約混淆的情況下。

能做到這個份上,至少應該引起大家的警覺了。因為能夠監視交易池中交易,就相當於擁有了一個大武器。但是比較讓人擔心的是,現在已經有一些服務商開始公開提供“暗池” 交易層了。

所謂的“暗池”交易層,不需要使用Infura 之類的服務,甚至都不需要搭建私有節點,它會直接發送交易給礦工,承諾不會將交易廣播給網絡中的其它節點,這樣,交易就不會套利機器人發現,可以保護交易躲過“捕食者”。

有一個很出名的白帽子叫samczun,他和自己的很多小伙伴也採用了同樣的方法,成功從一個出現漏洞的合約中拯救了960 萬美元。所以不難想像,礦工也會開始運行搶跑交易機器人,同時只為支付額外費用的trader 提供安全通道。

這些機器人只在以太坊主網上運行,和以太坊的其它部分不同,比如說有的智能合約可以在開發環境或測試網中測試。除了一些初步實驗之外,讓搶跑機器人去搶跑測試網交易沒什麼必要,賺不了錢。此外,它們不需要跟其他人一樣遵守規則,因為它們的邏輯是隱藏的。

我們還不清楚搶跑機器人在什麼樣的情況下會出手,什麼情況下罷手。所以,現在去追踪這些機器人有點像在尋找珍惜野生動物,很難,也很有挑戰性。而且我們也無法找到所有類型的機器人,這裡只針對特定的、廣義的機器人。

為了實現上面提到的“找到特定的、廣義的機器人” 的目標,我們需要去設一個特殊的陷阱——一個新的智能合約,由一個秘密字符串的SHA256 哈希值創建,並且在合約中放一些資金,只有提供秘密字符串的人才能取出合約裡的資金,然後一旦有人發送取款交易,資金會直接發給交易的發送方。

設置這個陷阱最初的設想是,發起一筆提供正確秘密字符串的“誘餌” 交易,看看有沒有會去複制這個字符串,並且自己發送一筆提供含有這個字符串的交易取走資金。如果有人能在“誘餌”交易之前取走,那說明有人能分析交易、複製相關內容,並且自己給出秘密合約裡的內容。

實驗結果很有意思,機器人能向一個之前從沒見過的合約提供之前從沒見過的秘密字符串,然後資金就被撬走了,這就是真正的廣義的特定的搶跑機器人呀!

搶跑機器人是怎麼工作的?

下面我們來了解下搶跑機器人的工作機制。但是我們只能通過它們的行為來逆向推導,因為大家想想,如果是你,製造了一台賺錢機器,你可能會把它分享到Github 上嗎? Of course not!

首先需要兩個組件:

1. 以太坊賬戶,帶不帶有智能錢包代理都行

2. “後端”,也就是整個操作的大腦,通常發生在鏈下

機器的運營者可以通過某種技術來檢查交易池子裡的每筆交易,並且解析、替換參數(比如替換交易調用方)、得出結論(這筆交易是否有利可圖,這一單值不值得做)。

上圖為搶跑交易機器人的工作流程

一個理性的機器人模式不會去搶跑一筆交易費超過潛在收益的交易,而且交易手續費可能會很高,尤其是在gas fee 很高的情況下。所以要想引機器人上鉤,我們至少需要設定一定的利潤。

此外,交易池中有很多筆交易,機器人要對每筆都做個分析,時間緊迫。一個以太坊區塊平均大概12 秒產出,那麼如果交易手續費足夠高,搶跑機器人必須趕在下一個區塊挖出前迅速分析,然後趕緊替換掉原交易。

這個過程也有一定的概率。比方說,一筆交易被廣播後,區塊立即就被挖出了,機器人根本沒有時間去分析,就沒有機會了。

考慮到上面的這些因素呢,我們做了下面這套吸引搶跑機器人上鉤的方法。重點來了! 👇

設下陷阱

我們在合約中設置的初始balance 是0.035 ETH,按當時的價格算,總價值約20 美元。任何人,只要能提供合約中存儲的哈希值的正確原像,也可以說是秘密合約,就能拿走這筆錢。然後呢,拿走這筆資金的交易會觸發搶跑機器人行動,另一個賬戶taker 會試圖通過提供正確的秘密合約來提走這筆錢。

第一回合失敗:直接調用合約

為了確保我們設下的陷阱能正常工作,我們首先使用taker 賬戶來調用智能合約。當時gas fee 比較高,我們成功取回了合約中的資金,沒有吸引到搶跑機器人。

反思下原因,可能是因為利潤太低了,對於搶跑機器人來說沒有任何吸引力;也可能是因為包含交易的這個區塊很快就被挖出,搶跑機器人還來不及反應。

我們調整了一下,準備開始下一回合。

第二回合成功:給搶跑機器人多餘留一些時間

這一次,我們把潛在利益提高了,合約中的資金增加到了0.04 ETH;並且降低了交易手續費,所以包含交易的區塊沒有很快被挖出,給機器人多一些時間去捕捉。

這次,我們成功了!

等了大概三分鐘,這筆交易還沒被挖出,沒能拿到合約中的資金。然後我們把合約中的所有內部交易認真地看了一遍,發現資金已經被其他人給取走了。

我們的taker 賬戶發起的交易用了25 Gwei,搶跑機器人用了25.000001111 Gwei,就只比我們多了0.000001111 Gwei,而且,兩筆交易還被打包進同一個區塊了。

复盤第二回合:尋找機器人的線索

好了,既然我們花了0.04 ETH和一些手續費已經抓到它了,這下我們可以好好分析下了。

首先,搶跑機器人沒有直接調用合約。它沒有復制taker 的交易並通過自己的賬戶發送交易,而是將交易發送給代理智能合約,由代理智能合約充當智能錢包來執行交易。

接下來,我們就可以去追踪這個機器人的地址了,看下它到底成功搶跑了多少筆交易,研究一下它的運作原理。

上圖為搶跑機器人自己的代理合約,我們對這個代理合約進行反編譯,發現主要有兩個函數:

Withdraw:將合約中的所有資金發送給該運營者。另一個函數負責接收參數:需調用的合約、參數清單、傳遞值參數。

有了取款函數,代理合約就可以成為運營者的智能錢包。除了能夠執行調用外部函數的作用之外,還可以確保交易開始時的餘額不低於結束時,否則交易是可以還原的,從而避免了因調用未知合約造成潛在的損失,當然這裡的損失是不包括gas fee 的。

我們還監控了這個機器人自2018 年5 月開始運行以來的戰績。

假設它始終用同一個代理合約和地址來搶跑,可以算出它到目前為止總共賺了17 ETH 左右。

上圖為我們監控到的機器人的收益,單位是ETH

第三回合探索:搶跑交易機器人有多厲害?

既然我們已經找到機器人了,向大家證明了之前的假設是成立的,那我們來測試下,能不能用第二個合約混淆調用,取回誘餌合約裡的資金。

第二個合約是一個代理合約,會通過調用函數取走誘餌合約裡存放的資金。另外,第二個合約還有“取回” 函數,可以讓我們取回資金。

我們部署了一個ProxyTaker 合約,然後調用函數,嘗試把我們的資金取回來。由於使用代理合約取走資金的成本相對來說比較高,所以我們又將“誘餌” 合約中的資金增加到0.055 ETH。果然,這筆交易馬上又被另一個機器人給搶跑了。

這個機器人有點牛,它不僅可以檢測到我們的取款交易,居然!還能識別出,這個交易來自另一個完全不同的合約的內部調用!而且,它還能在極短的時間完成這一套流程,真的是匪夷所思。因為我們的交易僅僅在幾秒內就被成功挖出了,這個機器人的也是如此,太讓人震驚了。

而且這個機器人的身份也很有意思,它的合約是由一個名為arden43y 的賬戶控制的,這個賬戶在以太坊瀏覽器Etherscan 上寫了一條評論,使我們不禁聯想到之前有白帽子嘗試從有漏洞的Bancor 智能合約中提走用戶資金的行為。

上圖為機器人運營者賬戶在以太坊瀏覽器留下的評論:如果你覺得我偷了你的錢,並且能證明這是個錯誤,我就把錢還給你。

第二個機器人的行為和第一個特別一樣,都是通過調用賬戶的代理合約,然後把資金發給另一個賬戶,所以我們懷疑這個機器人在白帽子的拯救活動中,對白帽子反手就是一個搶跑。

但是第二個機器人比第一個要復雜得多,第一個只聚焦在以太坊鏈上,第二個還對很多其它的套利交易也在執行。

而且第二個機器人賬戶餘額有大概300 ETH,它賺的更多。並且,通過所有流入和流出代理合約地址的資金,可以估算到第二個機器人總計大約900 ETH。

最終回合:這一次,成功抵禦了機器人

這一次,我們用了一個新的代理合約OwnedTaker,這個代理合約只有我們能用,混淆調用。我們又往“誘餌” 合約中放了0.05 ETH。這筆資金同樣會通過交易返回給我們,而不是留在合約中。

在第一次嘗試中,發送到OwnedTaker 合約的交易在大概1 分鐘後才被挖出,我們成功取回了“誘餌” 合約中的資金。

這次實驗又重複了一次。這一次,我們往“誘餌” 合約中重新存入0.06 ETH,這是到目前為止我們放的最大的“誘餌” 了,所以可以排除搶跑機器人不上鉤的可能。

另外,我們還特意將交易費設成一個比較低的值,交易等了大約7 分鐘,但還是成功取回了資金。

所以結論是:使用只能由所有者用來轉發交易的Owned 代理合約,可以有效防止了機器人解析數據並搶跑交易。

上圖為成功取回資金的過程

或許因為只有合約所有者能執行調用,或資金被發送至與調用合約不同的地址,使得我們成功躲避了搶跑交易機器人。

這些機器人很可能被設置成了以自我保護為首位。畢竟,當它們調用未知合約時,該合約有可能執行任意代碼。因此,我們可以合理地假設,在不能保證利潤的情況下,它們會選擇避免不必要的風險或交易費損失。

我們真的成功抵禦住搶跑機器人了嗎?

我們真的贏了嗎?這就取決於你怎麼看了。我們使用了一個新的合約,而且只有我們自己知道秘密字符串。顯然,我們捕獲的兩個搶跑機器人會檢測交易池中的所有交易。從它們所獲得的利潤來看,這確實是它們的強項。

結論

結論

結論

通過這次小實驗,我們證明了搶跑機器人不僅存在,而且還很智能。

當然,我們知道這個實驗並不完整,沒法得出權威的結論。還有很多其它類型的機器人,它們的觸發機制和運行方式各有不同,諸如潛在利潤、通信模式和最小複雜度,比如gas fee 上限等因素也會影響到其運行方式。

但是我們相信,我們的實驗提供了概念證明,並且進一步揭示了這些搶跑機器人的作案手法。

原文作者:Alex Manuskin

原文作者:Alex Manuskin

本文參考:

原文鏈接:https://zengo.com/ethology-a-safari-tour-in-ethereums-dark-forest/

原文作者:Alex Manuskin

ETH
烤仔星选计划
歡迎加入Odaily官方社群