閃電貸原理與範例
原理
透過以太幣交易原子性,要交易全成功否交易全失敗。
調用智能合約也具有原子性,要全調用成功修改數值,否調用全失敗。
不會出現部份成功部分失敗。
保證在同一交易內歸還本金。
全成功還本付息,失敗則當作此交易沒有存在。
理想狀況
閃電貸借入
100000
USDTDEX A(交易所A) 買 2000@50(2000顆$50 token)
DEX B(交易所B) 賣 2000@55(2000顆$55 token)
歸還
100000
USDT + 100 USDT(利息)獲利
9900
USDT
必須要在同筆交易區塊內完成(透過自己撰寫智能合約並調用合約達到一次交易完成)
攻擊步驟
目的: 攻擊有漏洞的智能合約竊取利益
藉由 dydx 借出 10000ETH
5000ETH 抵押到 compound 借出 112 WBTC
1300ETH 轉入 bZx(主要攻擊的漏洞合約) 透過 5 倍槓桿賣出 ETH 買入 WBTC
bZx 為了完成此筆交易,透過 kyber network 協議在 uniswap 內大量拋出 ETH 買 WBTC
uniswap WBTC/ETH 交易對池不夠深 -> 價格被拉升 38.5 -> 109.8
原本 bZx 應該是僅扣除原押 1300ETH 不應該用到自己資金池完成交易(無偵測到風險),但由於合約漏洞導致用到自己資金來完成此筆交易
拋出由 compound 借出的 112 WBTC 到 uniswap 售賣 -> 獲得 6871ETH
6871ETH + 3200ETH(未動用到的借貸) = 10071-10000=71ETH(獲利)(歸還 dydx 貸款)
駭客在 compound 上還有 5500ETH 正在被抵押
由於其他交易市場: WBTC/ETH 還在正常價位 -> 透過 4300ETH 買入 112WBTC -> 換回被抵押的 5500ETH -> 總計獲利 1200ETH + 71ETH =
1271ETH
參考:
https://academy.binance.com/zt/articles/what-are-flash-loans-in-defi