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