Fomo3D過去的一週內賺足了噱頭,一場光明正大的「龐氏」遊戲瘋狂吸金,在鏈得得此前的報道中提到「Fomo3D的開發者,是對生態有深入理解的現實主義者。Fomo3D鼓勵黑客去黑掉智能合約,來證實以太坊有多脆弱。」Fomo3D核心成員Justo直指v神:「我已經發現了能夠毀滅以太坊虛擬機(EVM)的‘核武器漏洞’。」詳情請見《【鏈得得獨家】龐氏遊戲」Fomo3D的真實意圖:黑掉脆弱以太坊》。編程
開發者雖然狂妄,可是卻被看做是足夠聰明的人。不過,以太坊基金會的核心成員peter szilagyi在twitter上表示,Fomo3D的空投機制要被智能合約自身存在的漏洞戲弄了。架構
來源:peter szilagyi的twitter函數
鏈得得注:Fomo3D玩家購買的key金額高於0.1ETH時,有機會得到空投。例如,文字顯示:「下次購買0.1ETH時有5%的機會得到一個ETH !」空投的ETH直接打入你的投注地址。接收空投的機會從0%開始,每一筆超過0.1ETH總額的Key訂單會增長0.1%的概率。。區塊鏈
可是因爲智能合約自己的漏洞,羊毛黨能夠準確捕捉到這個「隨機數」,從而在投入很小的前提下得到將近100%的空投。PeckShield研發總監吳家志告訴鏈得得做者,這是一個成功薅羊毛的案例。世界上是作不到徹底隨機的,一般是利用時間看成種子計算出一個相對隨機數,可是在區塊鏈中能夠預測到這個「相對隨機數」。測試
吳家志說:「每個智能合約的運做必然發生在某一個塊中,塊的時間能夠運算出,加上FoMo3D計算種子裏使用的錢包地址,能夠被僞形成可預測的合約地址,因此能夠把小几率事件變得很大。」設計
Fomo3D在合約的最初設定中把「投注者的錢包地址」放到監測名單,他們知道地址能夠生成不少,可是攻擊者不可能用不一樣的地址去測試、押注空投的獎池,這是一個成本很是大的事情。而這個事件中最核心就是Fomo3D在判斷錢包地址中存在的差錯,這也是Peter關注到的地方。遊戲
Peter做爲跟隨V神多年的以太坊核心成員,他十分了解以太坊的技術架構。攻擊者能夠經過把錢包地址看成隨機計算的部分來避開Fomo3D的判斷。吳家志告訴鏈得得做者,設計Fomo3D的人沒有想到,在其合約的airdrop函數中,產生隨機數的種子是經過當前塊信息(例如,第1416行的timestamp、第1417行的difficulty等)和msg.sender一塊兒計算出來的(隨機變得不隨機),攻擊者能夠在攻擊airdrop函數以前在合約中預先計算出結果(必然會開獎)。事件
若是可以獲得一個針對當前airDropTracker_的可用種子,攻擊者老是可使airdrop函數返回true(第1424行),從而在正確時間點實施「薅羊毛」行動。(合約地址能夠不停嘗試新的合約地址,試到能夠時即可進行精準投注,這樣就會確保必定能獲得空投,其隨機性就遭到抑制,因此就會變得很像挖礦)。以下圖:事務
Fomo 3D的airdrop函數開發
PeckShield研究人員觀察到,攻擊者經過利用Fomo3D的空投機制在兩天時間內薅了近60個ETH。這種獲利能力,能夠比擬1000臺以上GPU顯卡礦機的挖礦能力。最關鍵的是這個行爲無法制止,若是有好的編程能力,這是一個比挖礦還容易的「賺錢」方式。
事實上,在Fomo3D推出以後,市面上頓時出現大量的以FOMO Short、FOMO Lightning和RatScam等爲表明複製版Fomo3D。他們也僅是對Fomo3D的合約進行了複製,因此都會存在這樣的問題。
攻擊者發起的事務
但這種漏洞既然存在,爲何沒法停下來?PeckShield吳家志告訴鏈得得做者,基於智能合約的遊戲一旦運轉起來就沒法更改,除非有一天沒人繼續玩了,遊戲會按照合約設定停下來。不過,Fomo3D遊戲如今炙手火熱,不少玩家投注很多在其中,且獎勵池金額不斷刷新,在鉅額獎勵誘惑下,每一個人都在爭搶作最後一名投注者,因此暫時還看不到停下來的可能。