如何透過閃電貸操縱預言機價格?

作者:知魚 | NestFans論壇

描述:近期 DeFi 生態中發生了連續五次閃電貸操縱預言機價格的事故,這究竟是技術問題還是機制問題?

正文:

從今年二月份到現在,閃電貸攻擊頻頻發生。前幾日,知名白帽子 Sam Sun 在推特發文,具體闡述了 DeFi 為何頻繁發生價格預言機操縱攻擊的問題。北京時間 11 月 15 日凌晨,又一次操縱預言機價格的攻擊,去中心化金融協議 Value DeFi 遭遇閃電貸攻擊,攻擊者透過複雜的方式從Value 協議的金庫中轉移走了大約 700 萬美元,隨後歸還了 200 萬美元,並附上了一條帶有嘲諷意味的資訊:“你們真的懂閃電貸嗎?”。而在攻擊發生前一日,Value DeFi 公開宣稱自己是DeFi 領域最安全的協議,並且能夠抵抗閃電貸攻擊。就在筆者撰文的此刻,一則新聞出現,又一次閃電貸攻擊,使得去中心化共享經濟協議 Origin Protocol 損失 700 萬美元。僅僅三週時間,Harvest Finance、Akropolis、Value DeFi、Cheese Bank 和 Origin Protocol 這五個 DeFi 協議接連遭到閃電貸攻擊,均為百萬美元級別以上,最終都是要投資者買單,至此,我們不得不認真去審視閃電貸操縱價格預言機的問題。

閃電貸是什麼?

在 DeFi 的世界中,閃電貸是可以讓任何人無需許可、無需抵押,便可立即借出一大筆資金,在DeFi 各協議之間進行操作套利,但在一個區塊內必須還回去,否則交易回滾,取消此次任務的執行。這相當於,閃電貸可以讓任何人在短時間擁有巨量資金從而具備操縱市場的能力,像巨鯨一樣遊走在各個 DeFi 協議之間。簡單來說,就是你可以只消耗一點 gas 費,無需做任何抵押,便可以擁有鉅額資金, 並在 1 個區塊(13秒)時間內歸還資金。

為什麼會有閃電貸?

早期在 DeFi 的借貸中,是需要超額質押,才能借到一筆錢,資金利用率很低。隨著 DeFi 生態的繁榮,智慧合約之間可以互相支援呼叫,閃電貸也由此誕生。最早討論閃電貸(flash loans)的是 Aave 協議,第一筆 flash loans 也來自 Aave 協議。

其初衷是為了提升資金利用率,確保使用者無需抵押來實現快速借貸。雖然閃電貸極大的提高了加密資金的利用率,但也同時埋下了一些安全隱患。

一筆鏈上交易可以做很多事情,使得使用者可以在借款和還款間加入其它鏈上操作,這就存在了作惡的空間,攻擊者可以惡意的利用閃電貸借入、交換、存入並再次借入大量的 Token,人為地在 演算法定價的 DEX (Uniswap)裡操縱該 Token 的市場價格,這就出現了目前常見的閃電貸攻擊。

應以區塊鏈的視角去看待閃電貸

我們探討閃電貸的問題,需要從本質上去探討,從區塊鏈的本質來探討。在區塊鏈的世界裡,是假定每個人都是作惡者,就像中本聰建立比特幣網路,連自己都假定為作惡者,才能保證系統的安全和去中心化。所以,閃電貸在某種意義上,是讓每一個人都有機會成為“超級作惡者“,這是有必要的。如果這些“超級作惡者”成功作惡,直接的證明了 DeFi 協議的脆弱性,DeFi 是不成立的,是需要進行革新和改進的。因為,這種成功也間接證明了一個真實的“巨鯨”進行此類攻擊也是可以完成攻擊的,如果 DeFi 生態連這一關都過不了,何談系統安全性,如何去承載萬億美金市值的加密市場呢?所以面對閃電貸,DeFi 科學家們需要解決的真正問題是:閃電貸到底攻擊的是什麼?是技術問題還是機制問題?

閃電貸攻擊並不是 DeFi 生態中真正的系統性根源風險,究其本質在於 Oracle(預言機)攻擊,據 samczsun.com 網站研究人員釋出的報告,在 2020 年,針對價格 Oracle 操縱行為非常多,迄今為止已導致逾 3000 萬美元損失,而且沒有放緩的跡象。該報告還指出,多年來基於可重入性的攻擊已經減少,而基於價格 Oracle 操縱的攻擊現在正在上升。這並不是簡單的程式碼漏洞,其本質其實是機制的漏洞,換句話講就是:遭受閃電貸攻擊不是技術問題,而是底層邏輯的機制問題。

關於預言機的探討

DeFi 生態現在需要認清一個現實,價格預言機是 DeFi 生態最為重要的底層基礎設施!如果預言機問題解決不了,那麼程式碼質量再好的 DeFi 協議也都只是空中樓閣。

如果想要在鏈上形成一個龐大的 DeFi 市場,首先第一步就是要在鏈上生成價格。但是區塊鏈無法在鏈上自動生成價格資訊,需要依賴外部設施寫入價格資訊,所以,“寫”這個動作就至關重要,如何讓價格資訊以去中心化的方式直接在區塊鏈上生成出來,便是預言機要做的事情。

現在市面上的預言機如 Chainlink、Band 等都屬於間接預言機,只是資料的搬運工,把資料上傳到鏈上,靠的是信譽節點喂價。接入各交易所API,各節點間進行驗證達成某種公允價格,上傳到鏈上供 DeFi 生態使用,這是非常危險的。去中心化的 Oracle 網路,在多個交易所中接入 API 存在交易量和流動性差異,本身就加大了 Oracle 攻擊風險。而且閃電貸系統攻擊也證實了,這種低成本的上傳價格資料,不是在整個市場上進行驗證的價格給 DeFi 協議使用是不負責任的。就像 Sam Sun 所講:“如果選擇使用這些解決方案,你現在已將信任委派給第三方,你的使用者也只能這樣做”。這不是程式碼技術問題,這是經濟邏輯和底層邏輯的問題,“寫”這個動作或者“寫”進去的資料沒有得到全市場驗證。

我們來看一下 NEST 預言機的解決方案

NEST 預言機方案採用了逆向驗證的新思路,報價礦工要拿真金白銀去參與報價,而不僅僅上傳價格資料到鏈上合約中,在承擔風險以及付出報價手續費的情況下,有成本的價格輸出才是值得考量的,並且需要經過市場區塊驗證。有關 NEST 預言機的具體執行機制,我們以 ETH/USDT 價格為例進行說明:

1、任意參與者可以將自己認可的價格傳入到報價合約,比如 1 ETH = 400 USDT,然後將這兩種資產按照價格比例,打入到報價合約裡,初始是30ETH 的規模,並收取 ETH 規模的 0.3% 作為手續費,進行挖礦,獲得 NEST 激勵;

2、打進去後,等待 T0 時間(目前是 25 個區塊,5 分鐘左右),這個時間週期內任何人可以用報價者的價格去買走 ETH 或者 USDT,如果 T0 內沒有人成交,則該報價被系統錄用,有人成交則該價格無效。超過這一時間,資產即可取回;

3、如果有人願意與報價者成交,那麼他成交的同時,也要按照上述標準報一個新的價格進去,這樣就在初始報價 P0 後面形成 p1、p2 … 價格鏈。

4、成交者的報價規模,是他成交規模的 beta 整數倍,其中 beta > 1,這意味著價格鏈一定會隨著規模的擴大而最終終止(停機),並且作惡者的成本幾何級增長,從而對抗攻擊行為。

5、NEST 價值:挖礦手續費及使用預言機需要支付一定的 ETH 費用,統一到分紅合約,分配給所有的流通 NEST 持有人。

這樣的 NEST 分散式價格事實預言機方案在具體結果上的表現為:其資料具備準確性、靈敏性、抗攻擊性,而且能夠對資料進行直接驗證,且驗證者可以是任意第三方,沒有門檻限制;此外,NEST 預言機網路系統是高度分散式的,任何人都可以成為報價礦工,參與報價挖礦,自由進入或退出。在 NEST 報價機制裡面,你用真金白銀去寫入的價格,要交給全市場驗證,只有活過 25 個區塊的價格資料才會被 NEST 預言機系統錄入,僅僅這一點,閃電貸攻擊就無法實現,因為閃電貸必須在一個區塊內及時還款,若想操控 NEST 預言機,幾乎不可能。

最後,我們對當前的預言機現狀和發展趨勢做一個小結:

1、中心化的預言機方案必然存在著中心化系統風險,且無法擺脫。

2、價格資料上鍊的本質不是往鏈上“上傳”資料資訊,而是要在鏈上形成(生成)價格事實;不管是中心化的上傳價格資訊,還是以去中心化的方式上傳,都意味著鏈下價格事實先於鏈上產生。而真正的預言機系統,應該要做到鏈下價格事實同步產生於鏈上。

3、NEST 分散式價格事實預言機給出了一個開創性的預言機方案,其獨特之處在於:直接在鏈上形成一個價格事實,而其他間接預言機系統則只是往鏈上傳了一個價格事實,這是本質差異!

4、此外,預言機價格形成的成本和信用規模,要能夠支撐遠超過該規模的 DeFi ,才是正確的預言機;NEST 分散式價格事實預言機產生的每一條資料都是礦工用真金白銀去驗證的,且其鏈式結構具備高抗攻擊性。

希望更多的 DeFi 生態科學家正視預言機問題,共同參與預言機這一基礎設施的建設,和維護基礎設施的網路安全,促進 DeFi 生態繁榮發展,使其具備能夠承載萬億美金市場的可能性。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读