在將智能合約帶入到這個世界上之后,這個世界也需要被帶入到智能合約中。
預(yù)言機(jī)將會把智能合約帶入到新的發(fā)展階段 — Original Photo by Donald Giannatti
分布式賬本和智能合約將通過進(jìn)一步消除人類生活中的嫌隙而帶來前所未有的創(chuàng)新,但在這些智能合約可以無需信任地接受鏈外輸入之前,創(chuàng)新將會受到限制。去中心化預(yù)言機(jī)是智能合約與外界互動的門戶,同時避免對單一事實來源的依賴,這將帶來另一波激動人心的創(chuàng)新。
本文將對一下內(nèi)容做詳細(xì)介紹:
為什么預(yù)言機(jī)服務(wù)是去中心化技術(shù)棧中的核心服務(wù),
對無信任服務(wù)的需求,
預(yù)言機(jī)會遇到的各種挑戰(zhàn)和攻擊方式,
8個致力于這方面研究的工程介紹。
I. 為什么我們需要預(yù)言機(jī)
公共區(qū)塊鏈項目(例如Ethereum, Dfinity)上的智能合約在對抗環(huán)境中執(zhí)行,其中僅通過傳播確定性事務(wù)(即可由所有節(jié)點驗證的事務(wù))來保證安全性。智能合約被設(shè)計為接收輸入→執(zhí)行業(yè)務(wù)邏輯→更新區(qū)塊鏈相應(yīng)的狀態(tài),這個過程是不可逆的;區(qū)塊鏈?zhǔn)澜缰袥]有Ctrl+Z。
允許智能合約接受來自區(qū)塊鏈外部的輸入是一把雙刃劍;通過允許與外部世界進(jìn)行交互,會極大地增加應(yīng)用案例數(shù)量,同時也會引入信任問題。公鏈上的礦工無法確定性地驗證所有外部輸入,因此將執(zhí)行與智能合約的預(yù)定義標(biāo)準(zhǔn)相匹配的任何內(nèi)容。
讓我們來看一個簡單的例子:假設(shè)有這樣一個智能合約,Alice和Bob打賭,猜倫敦時間2019.1.3下午兩點的比特幣價格。Alice和Bob都向智能合約抵押了1ETH;如果屆時比特幣價格高于4,200美元,Alice將會得到2ETH,否則,Bob將會得到2ETH。智能合約對于比特幣的價格沒有概念,所以我們必須找到一個方法來向合約報告正確的價格,特別是一旦這個賭約的結(jié)果確定了,就無法更改了。為了達(dá)到這個目的,我們需要預(yù)言機(jī)。
預(yù)言機(jī)是一個聲明真實世界狀態(tài)的實體。比如,一個預(yù)言機(jī)可以報告2019.1.3日Coinbase上BTC/USD價格,或者2019年歐洲冠軍聯(lián)賽的獲勝者。這些信息將通過一個或多個預(yù)言機(jī)哪里來獲取或聚合,這些預(yù)言機(jī)從一個或多個可信的數(shù)據(jù)源獲取具體數(shù)據(jù)。
在深入探討無信任的預(yù)言機(jī)的各種技術(shù)挑戰(zhàn)之前,我們想提出我們預(yù)見的5個基于預(yù)言機(jī)的智能合約關(guān)鍵應(yīng)用案例。
金融產(chǎn)品
智能合約非常適合許多金融產(chǎn)品:利率掉期交易,期權(quán)現(xiàn)金結(jié)算,去中心化杠桿交易。所有這些都需要無信任的數(shù)據(jù)來源,以確保正確的鏈上執(zhí)行結(jié)果。
現(xiàn)在已經(jīng)可以利用的金融產(chǎn)品預(yù)言機(jī)的項目示例:CDx,dYdX,MakerDAO,Vega Protocol,0x protocol。
保險智能合約
憑借無信任和可靠的事實來源,一些保險產(chǎn)品可以通過智能合約以編程方式購買和結(jié)算。保險公司最大的損失是騙保,所以,預(yù)言機(jī)在此時也是非常關(guān)鍵的。智能保險的幾個例子包括:
· 通過Etherisc和Fizzy在航班延誤時自動支付。
· 鼓勵本地的預(yù)言機(jī)在本地驗證聲明,并在與Nexus Mutual一起發(fā)布索賠之前向區(qū)塊鏈報告。
· 人工智能與地理數(shù)據(jù)相結(jié)合,用于FlyingCarpet的創(chuàng)新和程序化保險。
運輸
GPS并不總是適合需要可靠位置來自動完成付款的dApp,因為它可以通過偽造造成中心化的單點故障。以FOAM為例,它可以降低中心化的位置服務(wù)信任標(biāo)準(zhǔn),并依靠去中心化的網(wǎng)絡(luò)來保證聲稱的位置,此處需要地理預(yù)言機(jī)來充當(dāng)該角色。
抵押借款和穩(wěn)定幣
需要獲得關(guān)于抵押品價值的可靠數(shù)據(jù),以決定何時清算資產(chǎn),或在它離開預(yù)期價值太遠(yuǎn)何時重新確定穩(wěn)定幣的價值。例如,Maker DAO公司的DAI是一種基于以太幣的穩(wěn)定幣(很快會基于多資產(chǎn)),他擁有多個預(yù)言機(jī)來報告以太幣價格,以便能知道合適貸款抵押不足,需要因此進(jìn)行清算以保護(hù)系統(tǒng)。這些預(yù)言機(jī)由Maker代幣持有者選擇和得到補償。
這也可以應(yīng)用到與Ethlend或Dharma等無信任的p2p借貸平臺。
預(yù)測市場:
利用人們的已有知識,去中心化預(yù)測市場(Augur, Gnosis)會將人類的協(xié)作推向前所未有的高度。這些市場需要依靠一個或多個預(yù)言機(jī)來進(jìn)行鏈下事件結(jié)算。
II. 確保預(yù)言機(jī)誠實可信
區(qū)塊鏈被設(shè)計為與外部世界和可信第三方分離。但是,大部分的事件仍然發(fā)生在區(qū)塊鏈外部,所以我們需要(在區(qū)塊鏈和外部世界之間)建立一個橋梁,但又不能在抗審查方面有所妥協(xié)。事實上,dApp的可信程度取決于它最薄弱的環(huán)節(jié),所以單一的信息來源是不夠可靠的。使用多個事實來源會更安全,但同時也會帶來更高的成本。目前沒有一個通用的解決方案,我們可以期望應(yīng)用程序采用基于自身風(fēng)險判斷的方法來確定需要少從多少個來源處為應(yīng)用程序獲取信息。
比如,如果智能手機(jī)應(yīng)用可以容忍較粗的精度的話,倫敦的氣溫可以通過一個單一的預(yù)言機(jī)(比如API)來轉(zhuǎn)發(fā)得到,但是如果溫度報告是用來結(jié)算一筆1千萬美元的保險合同的話,我們使用多個(很多?。╊A(yù)言機(jī):衛(wèi)星數(shù)據(jù)、本地傳感器數(shù)據(jù)等等。
因此,預(yù)言機(jī)可能會提供一系列解決方案,根據(jù)所涉及的在成本和去中心化之間權(quán)衡取決于所涉及的價值。
瑞士奶酪模型
第三方機(jī)構(gòu)很難保證永遠(yuǎn)值得信任。為了在中心化的世界中解決這個問題,我們使用多層級的保護(hù):合同、責(zé)任公司、保險、法律……只要其中一個層級按照預(yù)想的起作用,正確性就可以得到保障。然而,如果所有層級都出現(xiàn)了問題,攻擊就會成功(瑞士奶酪模型)。
一個過分依賴中心化預(yù)言機(jī)的例子是LIBOR丑聞。倫敦銀行同業(yè)拆借利率(London Interbank Offered Rate, LIBOR)是一種銀行間利率,通常用于計算專業(yè)和個人抵押貸款利率,以及其他金融產(chǎn)品,這些利潤總共支撐了300萬億美元的貸款。據(jù)說,從2005年或2003年開始,交換交易商多年來相互勾結(jié),操縱這一利率。倫敦銀行同業(yè)拆借利率也被用作衡量銀行健康狀況的指標(biāo),而導(dǎo)致2007–2008年金融危機(jī)期間的利率被操縱,使得一些金融機(jī)構(gòu)看起來比實際情況更健壯……
這里的結(jié)論再次證明,單個(未經(jīng)審計的)事實來源是一個薄弱環(huán)節(jié),會損害依賴它的整個系統(tǒng)。
雖然萬無一失的系統(tǒng),但我們可以將多層保護(hù)概念同樣地應(yīng)用于去中心化預(yù)言機(jī),作為最少信任機(jī)制。
A.多數(shù)據(jù)源
降低錯誤數(shù)據(jù)報告的可能性的最簡單的方法是讓預(yù)言機(jī)聚合多個數(shù)據(jù)源。在這種情況下,只有兩種方式會收到錯誤數(shù)據(jù):大多數(shù)數(shù)據(jù)源出現(xiàn)故障,或者是預(yù)言機(jī)自身出現(xiàn)故障(單點故障)。
B.多預(yù)言機(jī)
通過增加預(yù)言機(jī)的數(shù)量,它們在概率上不太可能全部都是惡意的,因此只要大多數(shù)人是誠實的,系統(tǒng)就是安全的。但是,所有預(yù)言機(jī)都存在有意或無意地傳遞錯誤信息的風(fēng)險(如果來源本身就已經(jīng)被破壞了)。
C.利益攸關(guān)【譯注】
去中心化網(wǎng)絡(luò)可以加入某些激勵機(jī)制,以確保其參與者的行為符合網(wǎng)絡(luò)的利益,并因此而得到補償。這就是為什么礦工獲得大量獎勵的原因,也是為什么股權(quán)證明(PoS)需要削減條件以對抗女巫(Sybil)攻擊和無抵押(nothing-at-stake)攻擊的原因。
讓去中心化的匿名身份扮演預(yù)言機(jī)的角色是非常危險的,特別是當(dāng)他們的不良行為會帶來財產(chǎn)損失但卻無法合法索回的時候。通過在項目中使用代幣,去中心化的預(yù)言機(jī)網(wǎng)絡(luò)可以強制節(jié)點以網(wǎng)絡(luò)的原生貨幣存入資金/存款,以便有機(jī)會為網(wǎng)絡(luò)執(zhí)行工作。如果他們表現(xiàn)良好,他們會為自己的工作獲得回報。如果他們行為不端,他們就會失去一定比例的股份。這確保了預(yù)言機(jī)有正確的激勵來傳播準(zhǔn)確的數(shù)據(jù)。
【譯注】原文為 Skin-in-the-Game
D.可信執(zhí)行環(huán)境(Trusted execution environment)TEEs
英特爾最近推出的Software Guard eXtensions(SGX)或ARM的TrustZone就是TEE的典范。這種機(jī)制的原理是類似的,我們將以英特爾的解決方案為例。
簡單來說,SGX允許應(yīng)用程序在稱為安全區(qū)的環(huán)境中執(zhí)行,該環(huán)境為用戶級代碼提供硬件保護(hù)。首先,安全區(qū)保護(hù)應(yīng)用程序(數(shù)據(jù),代碼和控制流)的完整性,以防止其他進(jìn)程的破壞。其次,安全區(qū)保護(hù)應(yīng)用程序的機(jī)密性,這意味著其數(shù)據(jù),代碼和執(zhí)行狀態(tài)在理論上對操作系統(tǒng)的其它部分是不透明的。然而,它可以在安全區(qū)外讀取和寫入存儲器。SGX旨在保護(hù)應(yīng)用程序,即使是程序運行在懷有惡意操作系統(tǒng)或是節(jié)點管理員的情況下。
在安全區(qū)運行預(yù)言機(jī)并分發(fā)證明可以提供一個強有力的保證,保證預(yù)言機(jī)正在執(zhí)行特定應(yīng)用程序,因為SGX系統(tǒng)是否正在運行可以被遠(yuǎn)程證明。
值得一提的是,在英特爾SGX中連續(xù)發(fā)現(xiàn)了兩個漏洞(2018年3月和2018年7月),還有更多漏洞被發(fā)現(xiàn)。雖然第一個漏洞已經(jīng)修復(fù),但這凸顯了單獨使用TEE會出現(xiàn)單點故障的情形,并且當(dāng)智能合約從一個或多個預(yù)言機(jī)產(chǎn)生輸入并自主執(zhí)行時,針對單點故障的多個保護(hù)層是至關(guān)重要的。
這些防護(hù)屏障在單獨使用時是不起作用的,但它們在組合時顯然會更有效。在下一節(jié)中,我們將介紹去中心化預(yù)言機(jī)的主要攻擊方式,接下來將是利用這些實際項目的示例。
責(zé)任編輯;zl
評論
查看更多