Flash Loan 是什麼,為什麼不需要抵押品也能借出大筆資金?
傳統借貸要求抵押品,是因為貸款方需要防範借款人拿錢跑路的風險。Flash Loan 從根本上重新設計了這個問題:它利用智能合約的原子性——整筆交易要嘛完整執行,要嘛完全回滾,沒有中間狀態。
借款人在一筆交易裡可以借出數百萬美元,用這筆錢執行套利、清算或其他操作,然後在同一筆交易結束前把本金加手續費還清。如果還款金額不足,智能合約會讓整筆交易失敗並回滾——連借款這個動作本身都被撤銷,貸款方的資金從未真正離開過,因此根本不存在信用風險。
這個設計讓 Flash Loan 能在無抵押的情況下提供巨額流動性,但要求使用者必須在單一交易內完成整個資金循環。
Flash Loan 攻擊是怎麼運作的,常見的攻擊模式有哪些?
閃電貸款本身是中性工具,但攻擊者可以用它在單一交易內放大資金規模,執行在小額資金下不可能完成的操作。
典型攻擊流程:借出數千萬美元等值的資產 → 利用這筆資金操縱某個流動性較淺的市場或預言機價格 → 在扭曲的價格下套利或觸發不應發生的清算 → 歸還借款,保留利潤,整個過程在一筆交易內完成。
常見模式包括:(1) 預言機操控攻擊——用巨額買單拉高某 DEX 的現貨價,讓依賴這個價格的借貸協議誤判抵押品價值;(2) 治理攻擊——瞬間借入大量治理代幣,通過一項惡意提案後立刻還款;(3) 重入攻擊組合——利用閃電貸款放大資金,配合重入漏洞反覆提款。
Flash Loan 本身是危險的工具嗎,還是有合法的正當用途?
閃電貸款本質上是一個無摩擦的短期資金工具,危不危險完全取決於使用方式。
合法用途包括:(1) 無資本套利——在不同 DEX 之間存在價差時,用閃電貸款完成套利並消除價差,有助於市場定價效率;(2) 無成本倉位調整——持有借貸倉位的用戶可以借出資金償還舊貸款、更換抵押品、再重新借款,整個過程不需要額外資金;(3) 清算——清算者可以借出資金完成大額清算,再用清算獎勵還款。
問題在於閃電貸款讓攻擊者「暫時擁有」巨額資金,能放大針對設計缺陷協議的攻擊規模。閃電貸款不是漏洞,被攻擊的協議設計才是根本問題。
協議如何防禦 Flash Loan 攻擊?
核心防禦策略集中在兩個方向:讓攻擊的利潤空間消失,以及讓攻擊依賴的前提條件不再成立。
主要防禦手段:(1) 使用時間加權平均價格(TWAP)預言機——閃電貸款在單一區塊完成,TWAP 計算多個區塊的平均價,讓攻擊者無法透過單筆操縱扭曲定價基準;(2) 使用 Chainlink 等去中心化預言機——從鏈外獨立資料來源取得價格,不依賴可操控的 DEX 池;(3) 治理合約加入 Timelock——提案通過後必須等待一定時間才能執行,讓借款後立刻執行的治理攻擊失效;(4) 嚴格的重入鎖定——防止在同一筆交易內反覆呼叫合約。
2020 年的 bZx 攻擊是最早的知名閃電貸款攻擊之一。攻擊者在一筆交易內借出 10,000 ETH,用部分資金在 bZx 上開設 ETH 空倉,再用剩餘資金大量買入 WBTC 拉高其相對 ETH 的預言機價格,讓 bZx 誤認空倉的損失比實際小,攻擊者因此獲利約 35 萬美元,整個攻擊在一筆交易、幾秒內完成。
閃電貸款降低了套利和清算的資金門檻,讓沒有大量資本的人也能執行這些有益於市場效率的操作;但同時也讓攻擊者能以接近零成本暫時放大資金規模,對設計有缺陷的協議構成高倍數威脅。兩者是同一個特性的兩面——不可能只保留好處、消除壞處。協議的應對方式是修復自己的設計缺陷,而不是對抗閃電貸款本身。