原理 透過以太幣交易原子性,要交易全成功否交易全失敗。 調用智能合約也具有原子性,要全調用成功修改數值,否調用全失敗。 不會出現部份成功部分失敗。 保證在同一交易內歸還本金。 全成功還本付息,失敗則當作此交易沒有存在。 理想狀況 閃電貸借入 100000 USDT DEX 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://youtu.be/RjI_GKacJ34 https://academy.binance.com/zt/articles/what-are-flash-loans-in-defi