北京時間 2019 年 6 月 25 日凌晨 1點,區(qū)塊鏈資產(chǎn)平臺 Synthetix 遭遇 Oracle 攻擊,導致平臺上的 sKRW/sETH 匯率出錯,攻擊后不到 1 小時內(nèi)超過 3700 萬枚 sETH 被低價交易,涉及金額近 10 億美元。
這應該是首起 Oracle 預言機攻擊事件,之前很多安全事故是由于智能合約代碼本身有問題導致被攻擊,這次出問題的環(huán)節(jié)變了,去中心化服務平臺的 Oracle,即“預言機”成為了攻擊目標。
那什么是 Oracle 預言機,為何會有如此嚴重的后果呢?
通常,一個強壯的區(qū)塊鏈項目具有數(shù)據(jù)不可篡改的特性(考慮 51% 攻擊情況),這可能是你剛學習區(qū)塊鏈時會頻繁看到不斷被強化的信息;隨著學習的深入,你會發(fā)現(xiàn)比數(shù)據(jù)不可篡改更重要的是數(shù)據(jù)的真實性,一個假的數(shù)據(jù)即使不可篡改又有什么價值呢?
區(qū)塊鏈應用經(jīng)常要獲取來自現(xiàn)實世界的真實數(shù)據(jù),比如你的身份證號碼、一支股票的最新價格、某地房屋的最新成交價,這些數(shù)據(jù)在互聯(lián)網(wǎng)上或許是垂手可得。但對區(qū)塊鏈應用來說,就需要某種方式和機制來調(diào)用。
這種方式,在區(qū)塊鏈里我們稱其為預言機,和直接調(diào)用互聯(lián)網(wǎng)上、某個中心化信息提供方的數(shù)據(jù)接口(如股票信息)不同,去中心化地獲得這些真實數(shù)據(jù),確保其不受篡改,將其安全地傳至區(qū)塊鏈應用是 Oracle 預言機的核心任務。
通過參與者多方投票來產(chǎn)生一個確定性的結(jié)果,是 Oracle 預言機常見的做法之一,適用于一些特定場景比如選舉、世界杯賽事。在這種情況下通過利益來約束投票者。投票者需要抵押 Token 進行投票,投票錯誤者將會損失 Token。比如世界杯決賽結(jié)果中德為 0:2,你押了 100 個 Token 在中德為 2:0,最終投票和多個數(shù)據(jù)源核實后會得到真實結(jié)果,然后你將損失押出的所有 Token。
投票方式有效,但效率并不高,如果是需要數(shù)據(jù)快速上鏈的場景,比如貨幣匯率,投票方式就不適合了。
今年以來,不斷發(fā)展壯大的去中心化金融 DeFi 領(lǐng)域是 Oracle 預言機主要應用場景之一,這些 DeFi 應用需要和鏈下數(shù)據(jù)源進行大量高頻的金融數(shù)據(jù)交互和驗證。在這些情況下,Oracle 預言機需要更快速、可信、高效的數(shù)據(jù)獲取和驗證機制,包括使用更多數(shù)據(jù)源、構(gòu)建二層網(wǎng)絡+隨機節(jié)點組獲取數(shù)據(jù)等。
然而 ,對于金融服務來說如果數(shù)據(jù)出了錯,造成的損失也是“高效”的。在文章開頭的事件中,預言機數(shù)據(jù)受攻擊出錯后,交易機器人立即發(fā)現(xiàn)了問題并開始自動交易,短時間內(nèi)即造成了高額損失,雖然平臺最終聯(lián)系到了交易機器人的所有者,協(xié)商降低了損失,能這樣處理只是因為目前涉及范圍較小。如果是廣泛應用的情況,攻擊成功后帶來的后果或許難想象。