Blocknative已經找出了MakerDAO在?3月12日和13日時的清算活動乃是有人刻意為之的證據。這些證據是從“Mempool”,即礦工打包區塊時候的備選交易池,中來的。交易內存池是一個以太坊生態中經常被人忽略——也不受大家重視——的部分。
作為交易內存池分析專家,Blocknative?運營著一個由遍布全球且配置各不相同的Geth節點和Parity節點組成的網絡。這一基礎設施使我們能部署實時的交易監控服務,我們可以捕捉、規范化和歸檔內存交易池的狀態變化。Blocknative在“黑色星期四”時捕捉到了3000萬行數據,使我們能做一項開放式的研究;迄今為止,我們已經發現了數個似乎已被利用過的“漏洞”。
雖然很多人都已寫過“黑色星期四”的結果,但在本文中我們會首次披露Blocknative內存池存檔中的數據,用新的數據和理論說話。我們也把分析要用的底層內存池交易數據集合開放出來了,供大家審閱。
如果你是一位安全研究員,想了解更多我們的發現,或想發現其它潛在的交易池異常,請聯系我們。
總結
Blocknative的內存池法醫報告顯示,內存池中有三大因素影響到了3月12日和13日的事態:
被阻塞的交易?——內存池的擁堵極大地提高了交易卡殼率,讓同一地址連續發出的多筆交易都被卡住、不能得到處理;
交易池“壓縮”?——交易池中可上鏈部分比重的大幅減少,可能影響到了Gas價格的估計;
“Hammerbot”?——自動化的交易系統加劇了交易池堵塞,因此與交易池壓縮效應相疊加;
我們出版這份分析以及相關的數據,是為了引起大家對動態交易風險的關注,這種風險在區塊鏈網絡擁堵期間可能會迅速出現。
背景:“黑色星期四”概況
在2020年3月12日,密碼學貨幣市場上出現了有史以來最大的拋售潮,幾個小時里面,ETH價格暴跌43%,BTC的價格跌掉了39%。隨著價格下跌,一個負反饋循環出現,多種DeFi合約內都開始出現流動性降低和強制清算活動。在此期間,這種下行的壓力使得每一個嘗試在網絡上發送交易的個體都遇到了嚴酷的挑戰。
-UTC時間2020年3月12日到13日期間按小時加權的ETH平均價格。數據來源:cointelegraph.com-
迅速的價格變化導致了以太坊交易池的持續擁堵,因為自動化的交易系統總是按照程序對波動性機械地作出反應。
如此堵塞情形的一個負面后果是?MakerDAO債倉清算活動中出現了“0價格拍賣”現象。在“黑色星期四”期間的3994個清算拍賣中,有1462個債倉的擔保品是被0價格拍走的。在大概12小時的時間里,鎖在債倉中、總計832萬美元的擔保品被0價格拍走,沒有讓系統回收到一分錢。更多細節請看MakerDAO自己發布的《2020年3月12-13日的價格暴跌及其對MakerDAO的影響》一文。
1.由交易池堵塞導致的交易卡殼
分析 | BTC鏈上活躍度小幅回落 但算力保持緩速上升:據TokenInsight數據顯示,BTC 24h成交額為$472億,活躍地址數較前日下降0.57%,轉賬數較前日上升1.17%。分析師認為,BTC鏈上活躍度小幅回落,但算力保持緩速上升,短期或將盤整蓄力。[2020/2/20]
3月12日時ETH價格的迅速變化導致用戶大量發送交易,產生了交易池內部的擁堵。對價格波動自動作出反應的機器人的活動加劇了這一情形。
-進入交易池的待打包交易計數vs.打包上鏈的交易計數-
結果就是大量的交易通過網絡傳播,迫使使用默認交易池設置的節點通過下列手段來保護自己的系統資源:
刪除,或者說丟棄掉許多有效的交易;
拒絕,或者說無視掉許多有效的交易。
交易池通常會用最低手續費門檻來選擇放棄哪些交易。雖說這些被丟掉的交易并沒在整個網絡中“完全丟失”,但被丟掉的交易可能會遭遇顯著的時延,直至網絡條件回歸正常。
-2020年3月11日至3月14日期間,到達交易池的被丟棄掉的交易和卡殼交易計數-
更重要的是,丟棄交易還會帶來一個副作用:增加交易卡殼的可能性。
刪掉一筆交易之后,該節點不會留下關于該筆交易的任何信息,比如發送地址和交易nonce。因此,當同一個地址的一筆新的交易到達交易池,該節點會發現該地址已處理交易和這筆新交易之間有nonce空缺,因此也不能處理這筆新交易。受此效果影響的交易就只能放到該節點的交易池中無法處理的隊列中。這些交易,無論所支付的交易手續費有多高,都一概會被卡住、無法處理。
想了解更多細節,請看我們此前講解交易排序的文章:《節點是你通往內存池的網關》。
與此同時,網絡的堵塞導致進入內存池的GasPrice門檻隨之迅速提高,因此最初的一些交易現在會因為GasPrice太低而被拒絕。而且,因為之前被刪除的交易不能回到交易池中來,交易的nonce空缺問題又變得更嚴重了。事實上,一些節點實現會在一段時間內主動無視掉這些被拒絕的交易,以保護自己不受點對點網絡中的泛濫攻擊影響。所以,nonce空缺實際上會鎖住這些受影響的地址,使得他們無法完成新的交易。
卡殼交易更有可能影響會發出許多新交易的地址,包括自動化交易系統、支付網絡,甚至交易所。這些系統想回到正軌,但通常會加劇擁堵,因為越來越多交易被推遲處理。
有沒有解決辦法?你得主動發現自己何時開始遭遇卡殼。這可能有點年,因為你的交易可能僅在某些節點處是卡殼的,但并不是在所有節點處都面臨卡殼。因此,你必須確定第一筆被丟棄、導致nonce空缺的交易,然后立即用可以得到打包的GasPrice?加速讓這筆交易上鏈。最后,你還得繼續監控一開始發現卡殼的交易,確保它從不能處理的隊列中移回到了交易池的待打包部分中,并成功上鏈。如果你的交易還是卡殼,重復上述加速步驟,直到你可以確認所有導致nonce空缺的交易都已成功上鏈。當然,這也是我們開發并運營我們的?NotifyAPI?的理由之一。
分析 | BTC人氣沖高回落,鏈上活躍度保持在近3月底部盤整:據TokenInsight數據顯示,反映區塊鏈行業整體表現的TI指數北京時間01月10日8時報571.35點,較昨日同期下跌12.11點,跌幅為2.08%。此外,在TokenInsight密切關注的10大行業中,24小時內漲幅最高的為廣告行業,漲幅為1.2%;24小時內跌幅最高的為其它行業,跌幅為9.43%。
據監測顯示,BTC 24h成交額為$236億,活躍地址數較前日上升12.41%,轉賬數較前日下降6.06%。Coinwalle分析師Jeffrey認為,BTC人氣沖高回落,鏈上活躍度保持在近3月底部盤整,短期調整需求加大。
另據Bituniverse智能AI量化分析,今日行情可開啟BCH/USDT網格,區間141.270-305.820 USDT,高拋低吸,賺取收益。
注:以上內容僅供參考,不構成投資建議。[2020/1/10]
2.壓縮內存池中可上鏈的部分
網絡阻塞的出現——及其導致的交易卡殼——使得交易池中可上鏈交易的比重迅速縮減。我們管這叫“交易池壓縮”。
礦工的激勵分兩部分:區塊獎勵和交易的GasPrice;所以收益最大化需要打包GasPrice最高的那部分交易,挖礦時要根據交易池——即候選交易——的情況來決定打包哪些交易。
在交易池擁堵時,多種行為會導致交易池壓縮,對礦工來說值得考慮的交易比重越來越小:
資源耗盡:在某些節點實現中,卡殼交易數量的迅速上升會消耗掉可觀的交易內存池資源。這又反過來導致節點處理有效pending交易的可用資源進一步減少。
不斷升高的GasPrice:ETH價格的下跌導致許多交易變得“高度緊急”,因為這些交易在構造時是希望能夠趕在ETH進一步下跌時上鏈確認的。這使得個體用戶也好、自動化機器人也好,都趕緊提高GasPrice。因為不是所有參與者都這樣密切關注著堵塞情形,待打包交易總體包含了反常比例的低價——因此不可能被打包的——交易。
反應慢半拍的定價算法:交易池中待打包交易的GasPrice分布,以及近期被打包交易的GasPrice,使得一些預測合適GasPrice的服務的測算出現扭曲。但這就導致更多GasPrice過低的新交易出現,又進一步加劇了測算值與實際值的不一致。
交易池堵塞出現時,讓交易打包上鏈所需付出的GasPrice會升高是意料中的事情。但是,因為并不是所有人都跟蹤到了GasPrice這種迅速的提高——包括,尤其是那些有GasPrice報告功能的服務——?
上鏈所需的平均Gas價格開始偏離進入交易池的交易平均Gas價格。而一般的出價上漲跟不上當時的價格上漲速率。
在3月12日,我們的數據平臺發現了交易手續費定價的明顯偏離。在3月13日,交易池中部分交易的GasPrice與上鏈交易的GasPrice差額在可預料范圍內,但在3月12日,已挖出交易和未挖出交易的Gas出價簡直是天壤之別。
不能上鏈的交易要成為可以上鏈的交易,一般來說標準的操作就是提高GasPrice。但是,在3月12日,這樣做根本就沒用。因為,大量交易池資源被以幾乎同樣的GasPrice重發的交易消耗掉了。
動態 | 前eToro分析師通過Cointelligence網站提供加密貨幣交易課程:據CoinDesk 12月5日消息,金融市場分析師Mati Greenspan上個月從加密投資平臺eToro辭職,創辦了自己的研究和咨詢公司。他計劃通過Cointelligence網站提供有關比特幣和其他數字資產交易的培訓視頻。[2019/12/6]
-2020年3月12日至13日每小時的GasPrice箱型圖。每個小時的箱型都劃分了1分位值和3分位值,兩者中間的線表示中值,而箱頂和箱底的線表示最大值和最小值。已忽略掉了異常值-
這張圖反映了真實情形嗎?還是說這些出價過低的交易本身就是為了堵塞掉交易池呢?如果真是有意為之,為什么呢?
3.Hammerbot交易導致內存池失真
我們的內存池存檔數據暗示,機器人成功地提高了堵塞情形,并扭曲了交易池中交易的Gas價格分布,而且還沒有導致交易手續費的相應提高。
這樣做的凈效果就是交易卡殼率的提高和GasPrice報告服務扭曲,結果是交易池一場,使天平偏向了某些特定的交易——即,提高了清算CDP倉位的交易以0價格成功競拍的幾率。
機器人用本來就無意提交上鏈的交易捶打交易池。這些Hammerbot通過發送置換率極高的交易消耗掉了交易池的資源。但是,交易池還有一種設計,是要求重發交易至少要提高10%的Gas價格,本身就是用來防止此類行為的。那這些交易是如何實現置換的呢?
答案很簡單:異常高的交易丟棄率導致節點“失憶”。
Hammerbot等待著——或者僅僅是預估——自己發出的交易從交易內存池中丟棄,然后立即用相同的Gas價格重發交易。因為節點“忘記掉了”之前被丟棄的交易,自然就盡職地把這些置換后的交易當成有效交易接了過來。當然,結果就是進一步的擁堵。
Hammerbot?用顯然是“自動化”的方式讓自己的交易變得畸形,每一次置換都包括了稍微更改過的合約輸出。因此,每一筆Hammerbot交易都有一個獨特的哈希值,可以繞過所有節點的點對點網絡協議中的泛濫攻擊過濾保護。
如下圖中重點標出的粉色線所示,從UTC時間3月12日9點開始,我們的交易池數據平臺發現根本不可能被打包的待打包交易數量急劇上升。35分鐘后,此類不可能上鏈的交易產生的速度翻了一倍,在10點之后才降為線性增長的模式。
-從UTC時間8點到10點期間達到交易池的交易計數,以分鐘計。藍線表示最終上鏈了的交易計數;而橙線表示根本沒有上鏈的交易計數。-
即使這些交易似乎沒有上鏈的意圖,這些從未被打包的Hammerbot交易的GasPrice還是顯得太低了:在市場要求給出30Gwei乃至更高價格時,這些交易幾乎總是只給5Gwei。Hammerbot交易既沒有像套利機器人經常做的那樣加速交易,又高效地消耗掉了節點的交易池資源。
分析 | EOS利空引發大盤下跌,比特幣支撐守住仍有回旋余地:合約帝入駐實盤分析師One love認為,隨著EOS會議結束后的弱勢回調,比特幣價格跌到幣安8300美金支撐位附近,并在8326美金企穩。目前下方強支撐為8145美金,上方壓力位為8565美金,短線進入震蕩行情。目前整體上漲趨勢沒有破壞,投資者無需恐慌,調整過后可以逢低買入BTC,保持幣本位,無需在意片刻金本位浮虧。[2019/6/3]
從整體上來看,雖然進入交易池的交易數量急劇增加,交易池中還是有很大一個比例的交易GasPrice被人為壓低了。
-從UTC時間8點到10點間的交易GasPrice箱型圖。藍線表示最終上鏈的交易的情形。橙線表示從未上鏈過的交易的情形。-
拿出一筆Hammerbot交易作為例子,可能有說明價值。這里是最終的交易哈希值:
0x5b00c13020b82c9e8a098393564feca976dbbd2e8da6c54263f6e492be56fbfb。
僅僅用你慣用的區塊瀏覽器檢視這筆交易并不能給出除了其區塊確認信息以外的洞見。表面上來看,這筆交易平平無奇。但Blocknative的交易池數據平臺檢測到了這筆交易上鏈之前使用這個nonce值的418筆獨特交易。這些交易都是在一個小時內出現的,也就是這些置換交易平均每6.86秒重發一次,而某些置換交易之間的時間差不超過0.1秒。
-地址0x5cf2fa4e0c84e71fd2e4fa86d2fa64b7a50a6fc0從UTC時間9點開始在相連的4個nonce上發起的置換交易次數-
大多數置換交易都使用同樣高的GasPrice,都是因為節點的交易丟棄機制才作為“新”交易成功進入到節點的交易池內。只有最后一筆想要上鏈的置換交易才需要給出更高的GasPrice,然后被打包到區塊內。
-地址0x5cf2fa4e0c84e71fd2e4fa86d2fa64b7a50a6fc0從UTC時間9點開始在相連的4個nonce上的平均GasPrice-
這種模式使我們很難說這些Hammerbot交易到底是有心還是無意的。實際上,我們的系統在一分鐘之內記錄下了超過20個從UTC時間9:05開始活躍的可能的Hammerbot地址:
地址
Nonce
一分鐘之內的置換交易筆數
0xdd3b6ae71ff420375fefaa2448046a37beeed800
9211
22
分析 | CCN:比特幣盤中價格分析:CCN比特幣盤中價格分析表示,在過去24小時內,比特幣價格經歷了一輪看漲調整,在新的價格走勢下,比特幣中期支撐在6192美元,中期阻力位在6454美元,心理阻力位在6500美元。[2018/8/13]
0x704bf43e578b2b912584495467c3a2210deaec11
7307
20
0x56f0bdbdf48556ed41248021fbc8027f69c41f27
5004
19
0x4a1351523071ed88d20afd1d10cda75d1b34f4e7
6644
19
0x2a7139e98f47c2fc65aec0de9a3adb8ffd46206a
10712
19
0x602bf7ba827a61d708614eb35284e79654c7e58f
8458
18
0xe6919901cef07c15373feac6871046848efd4212
2745
17
0x58500f55ac86a3022703806a7415cac321cce2a1
2587
16
0x6861d397f7ff510a1ab4bb60434d8a9c4dd01240
5837
16
0x5cf2fa4e0c84e71fd2e4fa86d2fa64b7a50a6fc0
3067
15
0x3a711e39640b802d201391d14d5f2d3159f07957
2279
14
0x4769ad67bce2779d1374675069a3b78b8dafbea6
2671
14
0x97e7ba1f2db224dac7e0a812a071474e7c60819a
9715
14
0x124f58b41fd43a498fe7041bc2d9d5813c4f80d7
2379
13
0x124f58b41fd43a498fe7041bc2d9d5813c4f80d7
2379
13
0x82b1e33c6465a9bedefd4af8a2c1cfc1c874bfbe
2516
13
0x3a711e39640b802d201391d14d5f2d3159f07957
2354
12
0x95227df275141c9bbf679f695668a838a31459fc
2435
12
0x5e4f7ce2607c39f4ec08355e2ea48e50f6f77bff
9208
12
0x3046a9743a1b8d967f2ddb014e341b0eca41c191
6193
10
0xb123a59c4e3ff44e57b3113234fa6ebe804e996d
2223
8
0xc1bfbc44536200b02f92aec4dee08ea390fa0535
2187
6
-如果你是上述任一地址的運營者,我們很希望跟您聊聊。請聯系我們-
注意:這些特征明顯的、使用同樣的GasPrice重發被丟棄交易的Hammerbot行為,也可能跟最近大家討論的“backrunning”行為有關。見此處和此處。
交易池漏洞對MakerDAO的影響
MakerDAO的擔保債倉是用戶生成穩定幣DAI時托管被鎖定的擔保品ETH的智能合約。因為ETH的價格有波動,而DAI希望能保持1美元的價格,所以維持一個開放的CDP所需的擔保品數量是不斷變動的。
當3月12日ETH價格暴跌時,大量的CDP立即變成了擔保不足的狀態,需要被強制清算。系統為保證擔保品清算時可以獲得競爭性的市場價格,安排了折價機制:參與清算者可以以折價買到擔保品ETH;這就使得許多人都愿意運營多種多樣的?Keeper機器人。清算活動的表現形式為拍賣。
任何Keeper都可以用?鏈上?出價參與拍賣,而一個看護者出價之后,另一個看護者想要與之競爭必須在10分鐘之內發送競拍價更高的交易。每當有新的競拍交易到達,都會刷新10分鐘的競拍窗口期。如果10分鐘之內系統沒有收到更高的出價,則拍賣結束,最高出價者勝出。
但是,當礦工節點因為網絡喲難度和交易池壓縮而以異常高的比例丟棄交易時,許多看護者的交易都被卡住了,因此根本沒能及時讓清算CDP的競拍交易成功上鏈。結果就是看護者們無法在由0價格競拍交易開啟的窗口中可靠地開展競爭,即使看護機器人正確地發現了0價格拍賣并發送出了更高出價的交易也沒用。
最終,因為擁堵和實際手續費的混淆,看護者無法恰當地解讀出GasPrice的實際上漲幅度,看護者的交易也因此被節點丟棄。接下來是產生nonce空缺、交易在使用默認交易池設置的節點處卡殼。遭遇此種情形的看護者機器人為其他拍賣發出的所有后續競拍交易會全部被卡住,讓該看護者根本無法在10分鐘的競拍窗口內參與交易,最終讓0價格競拍交易得逞。
下面我們用1866號拍賣作為例子來說明上述過程:
一個“0價格競拍機器人”在UTC時間15:59:50時以200Gwei的價格發送一筆0價格競拍交易。該交易在26秒后成功上鏈,10分鐘倒計時就此開始。
一個“誠信看護者機器人”在16:08:01時以450Gwei的GasPrice發送一筆競價交易。這筆交易是在10分鐘內發出的——之隔了8分11秒——而且Gas價格還是最初那筆0價格競拍交易的2.5倍。如果能在接下來的1分49秒內被打包到區塊中,1866號拍賣就會像大家預期的那樣進行。但是,這筆競拍交易因為這個好機器人之前發送的一筆交易被丟棄而被卡住了。
這個好機器人在16:15:31又發出一筆4500Gwei的競價交易。但是哪怕GasPrice提高了10倍也無濟于事,因為這個地址被nonce空缺鎖死了。再然后,等到競價交易不再被卡的時候,已經過了10分鐘的窗口期,交易自然就失敗了。
上述模式可能重復了一整天,最終導致總計832萬美元的擔保品被0價格拍走。值得指出的是,大多數Hammerbot的活動似乎都在當天較早的時候發生,這樣就造成了后來影響到Keeper機器人交易的擁堵情況。
GasPrice的迅速上升、導致Gas價格估計失靈的交易池壓縮,同樣對其它價格信息傳輸機制造成了負面影響。這導致了定價方面的混亂,也有可能使得面臨清算風險的CDP持有者推遲了添加擔保品的決定。
總結
總結一下,我們對“黑色星期四”交易池狀況的事后檢驗暗示了下述情況:
多種Hammerbot的活動導致挖礦節點的交易池飽和。這推高了以太坊網絡的擁堵程度并使之不斷上升。
發送許多以同樣的GasPrice發出的置換交易在點對點gossip層和節點本身產生了巨大的開銷。
正常交易的傳播受到阻礙,大量的交易被挖礦節點丟棄或者拒絕。
這又反過來提高了出現nonce空缺和卡殼交易的幾率,還扭曲了對GasPrice的估計。
雖然自動化的交易系統通常被設計成會自動提高交易的GasPrice,許多交易系統并不能很好地處理nonce空缺問題——甚至是完全束手無策。
以上就是我們在研究過程中的發現。我們的數據集可能還能揭示出更多的證據以及/或者新的發現來支持或證否我們的結論。
為加速這個發現過程,我們現在把那兩天的交易池存檔數據開放給社區,我們希望這能促進對交易池在“黑色星期四”及以太坊網絡其它類似事件中所扮演的角色的研究。
建議:保護好你自己,以及你的用戶
交易池是區塊鏈生態系統非常關鍵的一環,雖然它瞬息萬變,常常被忽略。因此,交易池中藏著很多開發者和用戶“完全無知的未知之物”。
現在,我們并不知道有多少人在開發這樣的利用交易池弱點的技術——只是顯然有人在利用交易池的特點。我們也不知道有多少這樣的弱點存在——只是那些復雜的利用方法似乎已經在現實中證明了其有效性。
因此,我們建議所有交易、所有協議、所有錢包供應商和交易員:
持續監控交易池的情況,注意發現交易池開始變得擁堵的時機;交易丟棄率和拒絕率的變化。
理解交易nonce排序的細微差別。即使合理構造的交易也可能被卡在網絡的某個角落。
主動觀察被卡殼的交易,并且要知道加速先前的哪一筆交易能使發送交易的地址脫困。
基于交易池中對礦工有吸引力的部分來計算GasPrice。還需要知道你所依賴的GasPrice報告服務所用的算法。
在高度擁堵期間,不要假設交易待打包的情形是可以預測的。先防范,你要監控每一筆交易,了解每一個細節,包括Gas是否充分,交易是不是被丟棄、被卡殼,會不會被人搶跑,等等。
這些問題,如果你自己動手解決,是非常有挑戰性的、很耗時而且很昂貴的。Blocknative的全球數據平臺一直在往捕捉和規范化去中心化交易池的方向優化——也就是一直在實現上述的五個建議。
我們的基礎設施和API提供了實時的交易池監控服務,保證你的交易能可靠、靈活、可預測地流動。
……
非常感謝評議本文初稿的各位,包括:SarahBaker-Mills、DmitriyBerenzon、SpencerBogart、NicCarter、Hsin-JuChuang、TomaszDrwi?ga,?AndyGray、HudsonJameson、JonKol、CalvinLiu、JustinMart、GavinMcDermott、TaylorMonahan、AndraNicolau、CharlieNoyes、SimonaPop、AlexPruden、AustinRoberts、CuySheffield、LarrySukernik、ChrisWhinfrey,等等。我們非常感謝你們的反饋、洞見和指導。
原文鏈接:?https://blog.blocknative.com/blog/mempool-forensics作者:?Blocknative翻譯:?阿劍
本文來源:?小吒閑談 DeFi的異常火爆,離不開以UniswapBalancer為代表的AMM模式DEX.
1900/1/1 0:00:00區塊鏈的世界,2020年不出意外,可以被稱為DeFi之年。DeFi當前兩大最為火爆的項目,一個是借代,一個是DEX.
1900/1/1 0:00:00這幾天數字貨幣市場繼續保持積極向上的趨勢,最近的趨勢有個很明顯的特征,就是以太坊的漲幅開始明顯領先與比特幣.
1900/1/1 0:00:00以太坊基金會將為ETH2.0建立一個專門的安全團隊,以研究下一代以太坊網絡中任何潛在的網絡安全和加密經濟問題.
1900/1/1 0:00:008月11日,黃金遭受了7年來最大的單日跌幅,比特幣與黃金的關聯性創下歷史新高,比特幣等主流幣種也同步下跌.
1900/1/1 0:00:00北京時間8月4日晚上21:00,以太坊2.0第0階段的最終測試網Medalla正式上線,這意味著以太坊2.0的主網已近在咫尺.
1900/1/1 0:00:00