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

5步輕鬆看懂:如何利用DeFi漏洞獲利36萬美金

CortexLabs
特邀专栏作者
2020-03-20 08:36
本文約2742字,閱讀全文需要約4分鐘
在本文中,我將逐步引導讀者一步一步完成“破解”操作,並在一些關鍵步驟中做出進一步解釋。
AI總結
展開
在本文中,我將逐步引導讀者一步一步完成“破解”操作,並在一些關鍵步驟中做出進一步解釋。

正文

正文

  • 正文

正文

  • 正文

  • 第3步:dZx保證金槓桿交易:1300 WETH充值到dZx合約,5倍槓桿做空。具體操作可簡單理解為,從bZx借出5637.623762 WETH,並通過KyberSwap在Uniswap中賣出,賣成為51.345576 WBTC。

這一步其實是將Uniswap中的WETH/WBTC的價格砸穿。

正文

正文

  • 正文

正文

  • 第5步:FlashLoan還:FlashLoan借出來的10000 WETH中還有未使用的3200 WETH,再加上第4步中用112 WBTC買回的6871 WETH,共10071.4127388 WETH。 10000 WETH進行Flash Loan歸還。還剩餘71.4127388。

到這一步,整個操作就結束了。

只要這些交易在以太坊的一個區塊時間內發生,並且被以太坊的下一個區塊打包確認,那麼這些交易就會按照發起的時間,進行執行。關鍵點:由於Flash Loan的條件達成,在一個區塊內歸還,那麼整個這些步驟的交易就都可以實現。

那麼我們來看下,Joe的收益情況:

從這5步操作,Joe看起來像是只獲得了71.4127388 WETH。

但不要忘記:在Compound里和bZx裡,Joe還有兩個倉位。

第一個是Compound裡面的抵押借貸。抵押了5500 WETH,借出了112 WBTC。

另一個是bZx裡面的保證金槓桿交易,抵押了1300 WETH,5倍槓桿賣出做空。剩餘51.345576 WBTC。

由於bZx採用的是Uniswap中的WETH/WBTC價格作為餵價,而Uniswap中的WETH/WBTC價格又被Joe操控。所以,按照常規理解,bZx中Joe的這個倉位理應是被爆倉的。而實際情況是,這個倉位裡只剩餘了第3步操作中獲得的51.345576 WBTC。

這個倉位,Joe顯然並不想理會。哪怕剩餘的51.345576 WBTC被扣掉。 (事實上bZx也確實扣掉了這51.345576 WBTC。)

而Compound中的倉位,Joe更有興趣。按照此時ETH/BTC的正常價格大約為0.025974,Joe只要從市場上花費4300 WETH,就可以買到112 WBTC。然後歸還給Compound,就可以贖回5500 WETH。這一下可以收益大約1200 WETH。

二級標題

1200+ 71.4127388 = 1271.4127388 WETH。

二級標題

那麼問題到底出在哪裡?

綜合上面的細節步驟來看,問題出在了bZx的保證金槓桿交易智能合約中。

首先,bZx採用了Uniswap中的WETH/WBTC價格作為餵價。而Uniswap裡面的深度又不足。

後記:

後記:

後記:

此文目的並非是在事件發生後,再去指責任何DeFi產品的漏洞或者對這位我們稱之為Joe的黑客有什麼褒貶。

此文目的,僅僅是為了讓更多普通加密貨幣領域參與者對DeFi產品邏輯有更進一步的理解,並且是通過盡可能簡單易懂的方式。

同時也希望讓大家看到,導致此次事件的根本原因是什麼,開發者在後續進行其他DeFi產品設計的時候,也應該從中吸取到教訓。

再昇華一下,此次事件其實也引起了DeFi領域關於DeFi產品到底要不要設置所謂“管理員權限”的討論。此文作為一個引子,我們後續可以繼續針對此類內容分享給Cortex中文社區。

CortexLabs註釋1:Flash Loan,中文直譯名稱為閃電貸。 “閃電貸”是在一個區塊內在不同DeFi 借貸平台發起多筆交易的方式,也就是不同資產和債務之間的轉貸。 “閃電貸”也是一種無需抵押物的借貸方式,前提是貸款的發行和償還必須在以太坊同一個區塊內完成,按照目前以太坊的出塊速度,大約13 秒。

DeFi
歡迎加入Odaily官方社群