金色硬核 | 一文讀懂DeFi上的閃電貸(附如何利用閃電貸套利)

2020-12-08 金色財經

金色財經近期推出金色硬核(Hardcore)欄目,為讀者提供熱門項目介紹或者深度解讀。

2月16日,bZx被爆遭到「攻擊」,「攻擊者」操縱多個DeFi項目上的代幣價格,從而實現15秒內套利36萬美元。涉及多個DeFi明星項目如Compound,DyDx,Uniswap,kyber,bZx。這個「攻擊」利用了DeFi上最新的閃電貸(flashloans)功能。正如bZx所說,這種「攻擊」是所見過的最複雜的攻擊之一,只有對每種DeFi協議及其各種工具有非常深入的了解才有可能,傳統金融體系中沒有類似的東西。

什麼是閃電貸(flashloans)?怎麼利用閃電貸(flashloans)來套利?本期金色硬核(Hardcore)綜合編譯AbitrageDAO和PeckShield最早和最新的閃電貸套利研究。

AbitrageDAO是Stake資本團隊建立的一個DeFi套利基金,聯合鏈上流動性和鏈下機器人來尋求套利機會。PeckShield為區塊鏈安全公司。

最新進展:2月18日bZx發推宣布再次暫停,疑似再次被「攻擊」,「攻擊」者或獲利2388個ETH。


在交易世界中,套利是一種利用市場之間的價格差異來獲利的策略。套利機會在金融市場中以各種形式存在。加密貨幣也不例外,很多交易所之間有著套利機會。套利有助於減少資產在不同市場中的價格差異,它還有助於提高流動性。

我們(AbitrageDAO)專注於在以太坊上運行的具有合約可填充流動性(Contract Fillable Liquidity ,CFL)的去中心化交易所。有CFL的去中心化交易所包括Oasis,0x relayers,Uniswap,Bancor和Kyber。有CFL的交易所允許交易者在以太坊區塊鏈的一個區塊交易中利用套利機會

什麼是閃電貸(flash loans)

閃電貸(flash loans)是為開發人員設計的,可以在無需提供任何抵押的情況下立即進行貸款。所有這些都要在一個交易(一個以太坊區塊)中完成。開發人員可以從Aave儲備池中借錢(註:flash loans最早討論來自Aave協議,第一筆flash loans也來自Aave),條件是在交易結束之前將流動資金返還到資金池中。如果這種流動性未能及時返回儲備庫,則交易將被撤回,從而確保儲備池的安全。

閃電貸有許多有趣的用例,包括:

這使得更多參與者可以在套利和清算間發揮作用,因為不需要任何資金就可以開始。套利機會通常不需要太多資金(在100-10000美元之間)。另一方面,清算需要大量資金來清算借款人頭寸。Compound或單抵押DAI(SAI)的許多清算需要ETH或DAI超過100萬美元。

ArbitrageDAO是低抵押/無抵押閃電貸的最佳用例。但我們相信,在未來幾個月中,將看到許多使用閃電貸的激動人心的項目。

第一筆閃電貸

ArbitrageDAO於2020年1月18日完成第一筆無抵押的閃電貸。見下圖Camilla Russo的報導。

為了證明閃電貸的巨大潛力,我們決定聚焦於特定的套利策略,但也可應用於許多其他方面。你可以在此處查看ArbitrageDAO從錢包發起的交易:https://etherscan.io/address/0x8645abffe4fad9e0c6c18afff30ef6aea438008c

https://etherscan.io/tx/0x4555a69b40fa465b60406c4d23e2eb98d8aee51def21faa28bb7d2b4a73ab1a9

在上述套利交易中,AbitrageDAO在Aave上借出超過3100個DAI。

更多交易:

截止2020年1月23日,AbitrageDAO總共從Aave借了大約9400個DAI,盈利33個DAI。

最新套利案例:bZx 2月15日閃電貸套利過程全披露

bZx 2月15日閃電貸套利過程來自安全公司派盾的分析。

這不是預言機攻擊。相反,這是一個非常聰明巧妙的套利,它確實利用了bZx智能合約中的一個錯誤,以允許本應鎖定的bZx資金流向Uniswap,並進一步將洩漏的資金吸收到Compound頭寸中。

套利五步驟

交易在這裡0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838,它是在2020-02-15 01:38:57 + UTC的區塊高度9484688上。如上圖所示,此次「攻擊」可以分為五個不同的步驟:閃電貸借款、吸籌、槓桿拉盤、出貨、償還閃電貸(Flashloan Borrow, Hoard, Margin Pump, Dump, Flashloan Repay)

1:閃電貸借款。這一步利用了dYdX的閃電貸功能借入10000個ETH。

執行此步驟後,「攻擊」者資產負債如下資產,無收益。

2:吸籌。利用借來的貸款,「攻擊」者將5500 ETH存入Compound作為抵押品,借入112 WBTC。這是正常的Compound操作,此吸籌的WBTC將在步驟4中出貨。

完成此步驟後,「攻擊」者的資產負債表如下,仍然無收益。

3:槓桿拉盤。吸籌之後,此步驟利用bZx保證金交易功能以賣空ETH兌得WBTC(即sETHwBTCx5)。具體來說,「攻擊」者存入1300 ETH並調用bZx保證金交易功能,即mintWithEther(連續調用marginTradeFromDeposit)。保證金交易功能利用KyberSwap將借入的5637.623762 ETH交換為51.345576 WBTC。請注意,5倍槓桿借入ETH。實質上將1 WBTC的兌換率提高到109.8 WETH,大約是正常兌換率(~38.5 WETH/WBTC)的三倍。

具體來說,為完成此交易,bZx將訂單轉發給KyberSwap,後者隨後會查詢其儲備金並找到最佳匯率,實際上KyberUniswap儲備庫。此步驟實質是將Uniswap中的WBTC價格提高了三倍。

此步驟應由內置的完整性檢查阻止,此操作可驗證掉期後頭寸不會變為默認值。但是,此攻擊發生時,沒有進行此檢查,我們稍後將在智能合約錯誤部分中檢查詳細信息。

完成此步驟後,「攻擊」者的資產負債表如下,仍然無收益。

4:出貨。隨著Uniswap中WBTC價格的飆升,「攻擊」者將Uniswap中從Compound中借來的112 WBTC賣出換成WETH。

此出貨步驟獲得6871.4127388702245 ETH的淨收益,平均兌換率為1 WBTC = 61.4 WETH。執行此步驟之後,攻擊者獲得可觀的利潤,資產負債表如下:

5:償還閃電貸。「攻擊」者使用從112 WBTC出貨中獲得的6871.4127388702245 ETH,將10000ETH的貸款償還給dYdX,從而完成閃電貸。

這一步後,可以重新計算一下資產負債。最終,「攻擊」者獲得71個ETH的套利,外加兩個頭寸,一個頭寸為Compound(+ 5500WETH / -112WBTC),另一個頭寸為bZx(-4337WETH / + 51WBTC)。當bZx頭寸處於預設狀態時,Compound頭寸非常有利可圖。在利用漏洞之後,「攻擊」者立即開始安排償還Compound債務(112BTC)來贖回抵押品(5500WETH)。對於bZx頭寸,「攻擊」者不再顯示任何興趣。

考慮到1 WBTC = 38.5WETH(或1 WETH = 0.025BTC)的市場均價,「攻擊」者可以獲得112 WBTC等價的4300 ETH。結果,「攻擊」者獲得了71 WETH + 5500 WETH -4300 ETH = 1271 ETH,大約35.59萬美元(假設ETH價格為280美元)。

bZx智能合約錯誤

這次「攻擊」背後的魔力是Uniswap WBTC/ETH是如何被操縱至高達61.4的利潤的。如第3步所述,當正常市場價格僅為38左右時,WBTC / ETH價格被拉升至109.8。換句話說,這一巨大價差是被有意操縱的。但是,如此巨大的價差會導致bZx頭寸處於抵押不足狀態。但是為什麼要允許抵押不足狀態存在,這自然導致在bZx智能合約實現中發現隱藏的錯誤。

保證金拉升功能從marginTradeFromDeposit()開始。

如上圖所示,marginTradeFromDeposit()在第840行將第四個參數設置為true的情況下調用_borrowTokenAndUse()

在_borrowTokenAndUse()內部,當amountIsADeposit為true時,在行1348中調用_getBorrowAmountAndRate()。返回的借款金額將存儲在sendAmounts [1]中。

同樣在_borrowTokenAndUse()中,在amountIsADeposit == true的情況下,在1355行中將sendAmounts [1]的值填充為sendAmounts [6](將在後面看到)。稍後,在第1370行中調用_borrowTokenAndUseFinal()。

在第1414行中,_borrowTokenAndUseFinal()通過IBZx接口調用takeOrderFromiToken(),以使交易流進入bZxContract。

下面有趣的部分到了。在第145–153行中,有一個require()調用以檢查該頭寸是否健康。不幸的是,在loadDataBytes.length == 0 && sentAmounts [6] == sentAmounts [1]的情況下,完整性檢查(sanity check)bZxOracle :: shoudLiquidate()被跳過了。這正是觸發漏洞以避免完整性檢查的條件。

如果我們看一下bZxOracle :: shouldLiquidate(),則第514行中的檢查getCurrentMarginAmount()<= loanOrder.maintenanceMarginAmount可以通過捕獲保證金提升步驟來完成這項工作,從而可以防止這種「攻擊」。

參考資料:

Flash Boys | Arbitrage DAO

https://medium.com/@bneiluj/flash-boys-arbitrage-dao-c0b96d094f93

bZx Hack Full Disclosure (With Detailed Profit Analysis)

https://medium.com/@peckshield/bzx-hack-full-disclosure-with-detailed-profit-analysis-e6b1fa9b18fc

聲明:本文系金色財經原創稿件,版權屬金色財經所有,未經授權不得轉載,已經協議授權的媒體下載使用時須註明"稿件來源:金色財經",違者將依法追究責任。

提示:投資有風險,入市須謹慎。本資訊不作為投資理財建議。

相關焦點

  • 金色百科丨閃電貸是什麼?
    2020年2月16日,bZx被爆遭到「攻擊」,「攻擊者」操縱多個DeFi項目上的代幣價格,從而實現15秒內套利36萬美元。這件事引起了DeFi圈的廣泛轟動。在這次套利中,「攻擊者」利用了DeFi上最新的閃電貸(flashloans)功能。那麼,閃電貸究竟是什麼?閃電貸(flash loans)是 DeFi 生態的一個新名詞。
  • 為什麼DeFi「閃電貸」攻擊者不斷歸還部分利潤?
    如果黑客利用貸款資本在短期內套利,那麼在歸還借來的本金後依舊還有的賺。但是這些利潤必須有其出處,而儘管每次攻擊事件都是不同且複雜的,簡單來說這些利潤往往來自其他用戶—那些在交易中輸給攻擊者的「失敗者」,利潤由此產生。攻擊者為什麼歸還了部分所得?DeFi 領域內圍繞閃電貸攻擊事件的情緒依然很複雜。
  • 閃電貸與預言機防篡改性的重要意義
    閃電貸與流動性挖礦一樣,都是創新的流動性機制,這兩個概念是近期DeFi生態的熱門話題,引來了廣泛關注。閃電貸用戶可以向鏈上流動性池進行無抵押貸款,條件是在同一筆交易內向流動性池返還借入的資金再加上一小筆交易費。這個創新模式極大豐富了資金的應用場景,將資金面向所有用戶開放,並同時保障流動性池的償付能力。
  • DeFi 挖礦:Balancer遭閃電貸攻擊與金融模型漏洞
    Balancer: 閃電貸+恆定積損失50萬美金2020年6月29日,Balancer遭受閃電貸攻擊,Balancer是使用恆定積進行的AMM市場,池子中的Assets在遵守恆定積的前提下可按池子當時的利率進行交換,本次閃電貸攻擊利用了該原理,將一種Asset掏空後,用另一種Assets以很低的價格獲取,由此獲利接近50萬美金。
  • 圖解DeFi 閃電貸攻防:以 bZx 事件為例
    小編:記得關注哦來源:慢霧科技原文標題:圖解 DeFi 閃電貸攻防:以 bZx 事件為例慢霧科技高級安全工程師 yudan 和 Kong 認為,DeFi 安全形勢嚴峻,安全審計是目前保護項目安全最高性價比的方式。
  • PPmoney及貸、平安i貸、招行閃電貸…
    目前市場上的小額貸款平臺有很多,但卻處於良莠不齊的狀態,那麼問題來了,優質的小額貸款平臺有哪些?借款人選擇哪家小額貸款平臺更好呢?接下來,小編就為大家介紹一下PPmoney及貸、平安i貸、招行閃電貸等幾個口碑較好的小額貸款平臺。
  • 招商銀行青島分行:閃電貸「快閃」活動重磅來襲
    萬眾矚目的2018足球盛典即將盛大開幕,招商銀行閃電貸主題「快閃」活動重磅來襲。而招行閃電貸,徹底打破了這種模式。閃電般速度,最快60秒到帳全線上申請,0紙質材料,最便利的申請體驗招行閃電貸最快60秒就可得知審批結果。而且!申請無需準備任何紙質資料,只需下載招商銀行App或關注招商銀行個人貸款微信公眾號,就可以在線申請。(申請路徑:招商銀行App-借錢-閃電貸)申請只需要個人徵信良好、繳存社保及公積金、正常繳納個人所得稅,或是名下有房產(含按揭房)即可。
  • 招行閃電貸 三步操作60秒到帳
    在同業的眼光還聚焦在餘額寶這樣的負債產品上之時,招商銀行已經率先在資產端發力,推出國內首款移動網際網路的貸款產品——閃電貸。  「之所以叫閃電貸,是客戶不需要提交任何資料,只要符合申請資格就可以在招行手機銀行客戶端直接操作,60秒資金就可以到帳。」招商銀行零售信貸部副總經理趙曉君對記者稱。
  • 聯盟分析-政策法規 | DeFi閃電貸遭攻擊背後——DeFi智能合約安全...
    DeFi產品在區塊鏈平臺上運作,大量且頻繁的交易主要依賴於部署在鏈上智能合約進行自動化處理。比如在以太坊上,數字貨幣的發行和流通、借貸、投票、拍賣等,都使用已有現成的智能合約模塊,當然各種新的智能合約也由程式設計師不停編寫和部署。
  • 借唄、網商貸、微粒貸借錢有何妙招!
    所以,我心目中理想的借款方式必須符合以下特徵:一是閃電放款,立馬到帳;二是隨借隨還,按日計息,借多少天就收多少天的利息。因為是應急或者資金周轉,利息成本不是首先考慮的,只要能隨借隨還,利息稍微高一點也無妨,更何況周轉時間不長,利息本身的絕對值還是能夠接受的。按照這個標準,有幾款產品深得我意,安利一下。螞蟻借唄和網商貸。
  • 網絡小貸新規忽至:不只螞蟻集團承壓,會否出現新監管套利?
    這將給小貸行業帶來運營規則和商業邏輯的重塑。業界多方都將承受合規成本提升所帶來的壓力:大科技平臺推行的聯合貸款業務是否還是一門好生意?網絡小貸牌照會否因此被消費金融搶了風頭,甚至產生新的監管套利?剛經歷完生死劫,走在小貸轉型路上的P2P們,又被政策「撞了一下腰」,再問路在何方?
  • 招商銀行閃電貸款靠譜嗎 招行閃電貸款利息高嗎
    相信很多招商銀行的信用卡用戶,都注意到了閃電貸款這款產品,這是一款網貸產品,一般的信用卡用戶都是可以開通的,並且下款的速度較快,那麼招行閃電貸款怎麼樣?招行閃電貸款真實利率是多少?下文就來帶大家了解一下。   閃電貸款是招商銀行推出的一款網際網路貸款產品,一分鐘即可完成貸款的發放。
  • 加密世界裡的傳播紅利:想爆發 找Keep3r丨DeFi項目方新商機
    普通開發者其實可以利用Keep3r,因為既能從中獲得收入,又可以通過這種方式參與裡面的頂級項目,當然這也對項目方一樣,畢竟對於新誕生的項目來說是一種很好的曝光,也是低成本的廣告。現在AC已經成為DeFi加密世界最有影響力的人物,他的項目自然吸引了全世界的目光,而目前Keep3r裡的項目還很少,這正是新項目品牌曝光、線上推廣的極低成本的最佳模式,例如SUSHI也正準備集成它。
  • DeFi進展|Flash Pool的「借、貸、保」參與規則
    參與方分為:借出方(Supply)、貸入方(Borrow)與保險方(Insurance)。在 Flash Pool 上參與借出方(Supply)、貸入方(Borrow)與保險方(Insurance)的資產均為本體鏈上的 OEP-4類型資產,ONT 需要轉化成 ONTd,其他鏈上資產需要先轉換成本體鏈上 pToken 資產方可參與。
  • 加密世界裡的傳播紅利:想爆發,找Keep3r丨DeFi項目方新商機
    普通開發者其實可以利用Keep3r,因為既能從中獲得收入,又可以通過這種方式參與裡面的頂級項目,當然這也對項目方一樣,畢竟對於新誕生的項目來說是一種很好的曝光,也是低成本的廣告。而第二個目的,則是將常規的池1和池2設計,合併到一個相同的設計結構,並為交易者創造可套利的激勵。獲取LBI的途徑,就是在Uniswap 上提供流動性做市。他自己這樣說到:「我新設計的流動性代幣,有一個不變K值(Uniswap)聯合曲線來鑄造代幣,但是沒有燃燒銷毀。所有用於鑄造代幣的流動性將自動提供給 Uniswap 交易對。
  • 「以貸養貸」不是一招致命,而是慢慢侵蝕,直至吞噬
    量力而行,切勿超負重前行從接觸網貸開始,到「以貸養貸」的地步是需要時間的,不是一蹴而就,更不是「一招致命」。開始網貸肯定是資金所需,但請明白將手伸向網貸肯定是之前個人樹立的金錢觀不對,或者根本沒有這個概念。
  • DeFi項目頻頻遭受損失,bZx最受黑客「青睞」?|得得精譯
    黑客通過閃電貸從dYdX大量借出ETH並轉換為WETH,同時利用STA代幣的通縮功能,即每筆交易消耗1%,不斷地交易WETH和STA,以減少池中STA代幣的數量。當STA的餘額接近於零時,池中其他資產的價格就會飆升,攻擊者可使用STA以極低價交換代幣池中的其他資產,此類攻擊只限於通縮代幣。
  • 交易所支持閃電網絡充提意味著什麼 來看金色財經第一手體驗
    在叫好和質疑交替聲中,閃電網絡(註:一文看懂閃電網絡點這裡)再獲一個重大應用場景。從12月3日起,用戶可以通過閃電網絡在Bitfinex充提比特幣了,這也意味著Bitfinex成為第一家支持閃電網絡的主流交易所。這也是比特幣和閃電網絡的巨大進步。