8月22日訊,區(qū)塊鏈應(yīng)用中,外部世界如何與智能合約交互往往是一個(gè)容易被忽視的問題,很多的智能合約應(yīng)用場景是根據(jù)一些外部事件,輸出相應(yīng)的結(jié)果,而傳統(tǒng)的IT數(shù)據(jù)交互方式實(shí)際上并不能投入真正的工作。例如,按照農(nóng)產(chǎn)品價(jià)格情況來支付投保人賠款的農(nóng)產(chǎn)品價(jià)格險(xiǎn)保單。傳統(tǒng)IT人員一般認(rèn)為是如下的流程:智能合約會(huì)在預(yù)定的時(shí)間,從期貨交易場所獲取農(nóng)產(chǎn)品價(jià)格,然后按照獲取的數(shù)據(jù)采取預(yù)設(shè)的行動(dòng)。聽起來很簡單,但卻不可能實(shí)現(xiàn)。為什么呢?因?yàn)檫@里存在兩個(gè)問題,一是共識(shí)問題,二是受信任方問題。
一、共識(shí)問題
區(qū)塊鏈?zhǔn)腔诠沧R(shí)的系統(tǒng),只有在每個(gè)交易和區(qū)塊處理過后,并且每個(gè)節(jié)點(diǎn)達(dá)到相同狀態(tài),智能合約才能正常運(yùn)行,所有事情必須是精確一致。如果節(jié)點(diǎn)之間對(duì)數(shù)據(jù)狀態(tài)有歧義,整個(gè)系統(tǒng)就無法可信穩(wěn)定運(yùn)行了。在上面的案例中,智能合約由鏈上的每個(gè)節(jié)點(diǎn)獨(dú)立執(zhí)行,因此如果智能合約從外部服務(wù)獲取數(shù)據(jù)的話,這個(gè)數(shù)據(jù)獲取過程是由各節(jié)點(diǎn)重復(fù)和獨(dú)立完成的,假設(shè)這個(gè)區(qū)塊鏈有100個(gè)節(jié)點(diǎn),那么就會(huì)有100條獲取數(shù)據(jù)的請(qǐng)求從每個(gè)節(jié)點(diǎn)發(fā)送到期貨交易場所,但是因?yàn)檫@個(gè)數(shù)據(jù)來源于區(qū)塊鏈外部,價(jià)格是實(shí)時(shí)波動(dòng)的,由于網(wǎng)絡(luò)延遲、節(jié)點(diǎn)處理速度等各種原因,每個(gè)節(jié)點(diǎn)獲取的并不是同一時(shí)刻的價(jià)格,輸入到智能合約的價(jià)格數(shù)據(jù)也就不同,因此對(duì)應(yīng)的各節(jié)點(diǎn)智能合約輸出也會(huì)不同,在這種情況下,整個(gè)區(qū)塊鏈的信任基礎(chǔ)就會(huì)崩潰,無法達(dá)成共識(shí)。
解決的方法其實(shí)很簡單,不通過智能合約發(fā)出外部數(shù)據(jù)獲取指令,而是由第三方發(fā)送一筆區(qū)塊鏈交易,在交易中附加需要的數(shù)據(jù),交易會(huì)將數(shù)據(jù)嵌入?yún)^(qū)塊,并同步到每個(gè)節(jié)點(diǎn),從而保證數(shù)據(jù)的完全一致,因此可以用于智能合約的計(jì)算中??偨Y(jié)就是由第三方將數(shù)據(jù)推送進(jìn)區(qū)塊鏈,而不是由智能合約將數(shù)據(jù)拉取進(jìn)去。
同樣的問題一樣發(fā)生在智能合約調(diào)用外部世界事件的情況。還是上面的例子,很多人會(huì)想象價(jià)格到預(yù)定目標(biāo),智能合約去調(diào)用期貨公司的API接口,實(shí)現(xiàn)賣出期貨的功能,從而鎖定保單風(fēng)險(xiǎn),但是如果每個(gè)節(jié)點(diǎn)都獨(dú)立執(zhí)行智能合約,那么應(yīng)該由哪個(gè)節(jié)點(diǎn)去調(diào)用這個(gè)API呢?如果選擇某個(gè)節(jié)點(diǎn)去執(zhí)行,但是如果該節(jié)點(diǎn)發(fā)生故障了,無論是不是故意的,怎么保證其可靠性呢?而選擇全部節(jié)點(diǎn)去完成API調(diào)用的話,是否每個(gè)節(jié)點(diǎn)都可信,怎么保證API密碼的安全呢?況且一個(gè)API同時(shí)被多節(jié)點(diǎn)高并發(fā)頻繁調(diào)用也是不合適的。
解決方法參考上面的問題,智能合約不需要獲取外部API,而是第三方實(shí)時(shí)監(jiān)控區(qū)塊鏈狀態(tài),然后做出相應(yīng)的反饋。例如,合作的期貨交易所實(shí)時(shí)監(jiān)控區(qū)塊鏈,然后根據(jù)鏈上的交易情況做對(duì)應(yīng)的資金轉(zhuǎn)移,這樣就不會(huì)對(duì)區(qū)塊鏈共識(shí)產(chǎn)生威脅。
二、受信任方問題
前文提到的解決共識(shí)問題方法核心就是區(qū)塊鏈被動(dòng)接收數(shù)據(jù),與外部的交互依賴于第三方,這個(gè)時(shí)候就會(huì)引入第二個(gè)問題,第三方如何信任?第三方如果在數(shù)據(jù)傳輸過程中私自篡改數(shù)據(jù)怎么辦?如何審計(jì)第三方是否從正確的地址獲取的數(shù)據(jù)?為解決可信問題,就需要引入Oracle,它不是甲骨文數(shù)據(jù)庫公司,中文翻譯為預(yù)言機(jī)。預(yù)言機(jī)是一種可信任的實(shí)體,它通過簽名引入關(guān)于外部世界狀態(tài)的信息,從而允許確定的智能合約對(duì)不確定的外部世界作出反應(yīng)。預(yù)言機(jī)具有不可篡改、服務(wù)穩(wěn)定、可審計(jì)等特點(diǎn),并具有經(jīng)濟(jì)激勵(lì)機(jī)制以保證運(yùn)行的動(dòng)力。目前來說,預(yù)言機(jī)有兩種模型,一個(gè)是單一模型,另一個(gè)是多重模型,有時(shí)候多重模型又稱為Oracle網(wǎng)絡(luò)。
單一模型只包含一個(gè)預(yù)言機(jī),這一預(yù)言機(jī)是可信任的,它會(huì)正確地執(zhí)行代碼,合約的參與者能確信它不會(huì)與合約的某一參與方相勾結(jié),單一模型類似于軟件即服務(wù)提供者。對(duì)于大部分應(yīng)用,單一模型已經(jīng)就足夠安全,并且經(jīng)濟(jì)實(shí)惠。目前一個(gè)單一模型的實(shí)例是Oraclize。
多重模型包含多個(gè)預(yù)言機(jī),甚至是預(yù)言機(jī)網(wǎng)絡(luò)。雖然單一可信任的預(yù)言機(jī)對(duì)大多數(shù)用戶來說已經(jīng)足夠了,但是高價(jià)值的資產(chǎn)處理需要更高的可信任度,這就需要用到多重模型。在這一模型中,代碼的執(zhí)行分布在若干獨(dú)立的預(yù)言機(jī)中,例如10個(gè),將這10個(gè)預(yù)言機(jī)的數(shù)據(jù)設(shè)置一個(gè)可信臨界,臨界值數(shù)量的智能預(yù)言機(jī)必須就結(jié)果達(dá)成一致。例如,用戶使用7/10模型,只有當(dāng)?shù)扔诖笥?個(gè)智能預(yù)言機(jī)一致時(shí),合同才能夠執(zhí)行。這一模型留出了3個(gè)緩沖,也許有的智能預(yù)言機(jī)離線,有問題或者被黑客攻擊,只要不多于3個(gè)不影響合同代碼的執(zhí)行。多重模型比單一模型更加復(fù)雜,成本更加高,但是它提供了更好的安全保障。
三、單一模型預(yù)言機(jī)運(yùn)作方式
單一模型預(yù)言機(jī)的一個(gè)典型實(shí)例是Oraclize,由于他的應(yīng)用十分典型,本文以O(shè)raclize為例進(jìn)行講解。
1、Oraclize簡介
Oraclize是一個(gè)獨(dú)立的服務(wù)提供商,目前提供免費(fèi)的數(shù)據(jù)輸送服務(wù),其目的是在區(qū)塊鏈和互聯(lián)網(wǎng)之間建立一道可信的數(shù)據(jù)網(wǎng)關(guān),其目標(biāo)是打破智能合約獲取數(shù)據(jù)的束縛,在保證可信的情況下,使其具有訪問互聯(lián)網(wǎng)數(shù)據(jù)的能力。Oraclize不是想讓智能合約的開發(fā)者信任這個(gè)組織,因?yàn)椴徽撊魏涡湃危伎梢詮募夹g(shù)上篡改數(shù)據(jù),無法真正從技術(shù)保證安全,而是通過提供多種加密證明方法,構(gòu)建可信的預(yù)言機(jī)。 Oraclize的運(yùn)行狀態(tài)如下圖。
如圖1,多種區(qū)塊鏈可以通過Oraclize有效的訪問互聯(lián)網(wǎng)API,保護(hù)其Dapp的安全性和健壯性,目前支持Ehtereum、Bitcoin、Rootstock、Eris四種區(qū)塊鏈。用以太坊為例子,目前采用Solidity的智能合約只能存取訪問鏈內(nèi)的信息,而Oraclize作為一個(gè)數(shù)據(jù)傳送者,可以在以太坊的DApps與Web APIs之間提供可靠連接,讓基于智能合約的Dapp應(yīng)用可信的地取得外部信息和數(shù)據(jù)。運(yùn)行原理如圖2:
Oraclize在以太坊上部署了一個(gè)名為usingOraclize的智能合約,如果需要其數(shù)據(jù)訪問服務(wù),只需要在自己的智能合約中引用該智能合約,然后根據(jù)API文檔中描述的方法進(jìn)行相關(guān)的調(diào)用即可。如果某些組織利用以太坊技術(shù)搭建了自己的私有鏈或者聯(lián)盟鏈,Oraclize在Github上提供數(shù)據(jù)服務(wù)的開源智能合約代碼,通過自己部署后,一樣可以像公有鏈一樣調(diào)用。Oraclize提供了多種數(shù)據(jù)源服務(wù)器,包括Url訪問、數(shù)據(jù)搜索引擎、區(qū)塊鏈內(nèi)容數(shù)據(jù)、IPFS文件訪問等等,其中Url訪問和區(qū)塊鏈內(nèi)容數(shù)據(jù)提供了基于TLSNotary的可信證明技術(shù),也是常見的數(shù)據(jù)訪問需求。對(duì)于基于TLSNotary的可信證明可以根據(jù)用戶的需求開啟和關(guān)閉,因?yàn)殡m然目前該服務(wù)是免費(fèi)的,但是隨著以后Oraclize的正式版發(fā)布以及推廣期的結(jié)束,可信證明技術(shù)是需要更多的收費(fèi),用戶可以基于成本考慮選擇是否使用,常見的典型服務(wù)如下:
(1)Url訪問服務(wù)
該服務(wù)可以用來訪問互聯(lián)網(wǎng)的API或者網(wǎng)頁,首先用戶向Oraclize提供想要訪問的URL地址,并設(shè)定GET / POST 的方法和相關(guān)的參數(shù)。Oraclize根據(jù)用戶的設(shè)定,自動(dòng)獲取URL的內(nèi)容,然后發(fā)送數(shù)據(jù)到區(qū)塊鏈上的Oraclize的服務(wù)智能合約上,通過該智能合約轉(zhuǎn)發(fā)到用戶的智能合約上。整個(gè)過程中,用戶可以選擇開啟或關(guān)閉TLSNotary的可信證明。這樣的應(yīng)用場景很多,比如通過Random.org網(wǎng)站獲取真正的隨機(jī)數(shù)、獲取航班運(yùn)行情況用于航班延誤險(xiǎn)的自動(dòng)計(jì)算和支付、鏈上身份認(rèn)證系統(tǒng)、去中心化的博彩系統(tǒng)、去中心化的預(yù)測市場(如體育運(yùn)動(dòng)比賽結(jié)果或競選活動(dòng))等等。
(2)區(qū)塊鏈內(nèi)容數(shù)據(jù)
區(qū)塊鏈內(nèi)容服務(wù)可以讓智能合約快速訪問某一區(qū)塊鏈的相關(guān)數(shù)據(jù),實(shí)際上,一方面早期的區(qū)塊鏈上的腳本并不能訪問自身的內(nèi)容,比如比特幣的腳本本身不能訪問比特幣的區(qū)塊鏈數(shù)據(jù)。另一方面,不同區(qū)塊鏈上的腳本或智能合約有跨鏈訪問數(shù)據(jù)的需求,以完成更復(fù)雜的功能。區(qū)塊鏈內(nèi)容數(shù)據(jù)一般來說都是從互聯(lián)網(wǎng)上的區(qū)塊鏈瀏覽器獲取,區(qū)塊鏈瀏覽器一般都會(huì)提供各種API用于獲取區(qū)塊哈希、區(qū)塊內(nèi)容,交易內(nèi)容、用戶余額等多種信息,從本質(zhì)上來說,區(qū)塊鏈內(nèi)容數(shù)據(jù)也是URL訪問服務(wù)的一種特殊類型。
除此以外,Oraclize還提供搜索引擎數(shù)據(jù)服務(wù)、IPFS分布式數(shù)據(jù)服務(wù)、加解密服務(wù)、鏈下計(jì)算服務(wù)等,原理本質(zhì)上沒有區(qū)別,由于篇幅限制,不再復(fù)述。
四、Oraclize可信證明機(jī)制原理
Oraclize之所以可以提供一個(gè)可證明的誠實(shí)從外部世界安全獲取信息的能力,是依賴于TLS證明技術(shù)(TLSnotary),除此以外,Oraclize還提供了其他兩種證明機(jī)制:Android SafetyNet證明、IPFS大文件傳送和存儲(chǔ)證明,由于使用較少,本文不做詳細(xì)展開。
TLSnotary證明主要基于安全傳輸層協(xié)議TLS 1.1,TLS用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性,最大優(yōu)勢就在于獨(dú)立于應(yīng)用協(xié)議,更高層協(xié)議可以透明地分布在 TLS 協(xié)議上面。
TLS包含三個(gè)基本階段:1.對(duì)等協(xié)商支援的密鑰算法,2.基于私鑰加密交換公鑰、基于PKI證書的身份認(rèn)證,3.基于公鑰加密的保密數(shù)據(jù)傳輸。在整個(gè)傳輸中,TLS的master key可以分成三個(gè)部分:服務(wù)器方、受審核方和審核方。在整個(gè)流程中,互聯(lián)網(wǎng)數(shù)據(jù)源作為服務(wù)器方,Oraclize作為受審核方,一個(gè)專門設(shè)計(jì)的,部署在亞馬遜云上的開源實(shí)例作為審核方,每個(gè)人都可以通過這個(gè)審計(jì)方服務(wù)對(duì)Oraclize過去提供的數(shù)據(jù)進(jìn)行審查和檢驗(yàn),以保證數(shù)據(jù)的完整性和安全性。
五、多重模型預(yù)言機(jī)運(yùn)作方式
多重模型預(yù)言機(jī)有多種例子,一般來說,這種成本較高,較復(fù)雜的預(yù)言機(jī)會(huì)應(yīng)用在對(duì)信息可靠性要求較高,涉及價(jià)值比較大的領(lǐng)域,比如金融、博彩等。一個(gè)可靠的多重模型預(yù)言機(jī),遵循博弈原理,有經(jīng)濟(jì)激勵(lì)機(jī)制和懲罰措施,越多的節(jié)點(diǎn)參與,其真實(shí)性越高。當(dāng)數(shù)據(jù)輸入時(shí),網(wǎng)絡(luò)需要保證參與者節(jié)點(diǎn)無法知曉其他參與者的數(shù)據(jù),然后各個(gè)節(jié)點(diǎn)將數(shù)據(jù)輸入智能合約,智能合約對(duì)于價(jià)格等連續(xù)數(shù)據(jù)將選擇最接近中位數(shù)的數(shù)據(jù),如果是二元數(shù)據(jù)則統(tǒng)計(jì)得票最多的結(jié)果,最后對(duì)提供正確數(shù)據(jù)的節(jié)點(diǎn)進(jìn)行獎(jiǎng)勵(lì)。與單一模型不同,多重模型需要面對(duì)女巫攻擊(Sybil attack)和共謀攻擊(collusion attack)。
這兩個(gè)攻擊本質(zhì)上都是通過控制多個(gè)節(jié)點(diǎn)來偽造數(shù)據(jù)干擾最終結(jié)果,主要防范的方法,一是鼓勵(lì)盡量多的節(jié)點(diǎn)參加數(shù)據(jù)反饋;二是讓每個(gè)節(jié)點(diǎn)的權(quán)重盡量平均,防止某些節(jié)點(diǎn)權(quán)重過高,易于控制結(jié)果,三是提高節(jié)點(diǎn)的接入成本,比如需要一定的押金;四是需要有一定的激勵(lì)和懲罰措施,以促使節(jié)點(diǎn)考慮自身利益不會(huì)撒謊。下面以某去中心化電競平臺(tái)項(xiàng)目為例,說明一下多重模型預(yù)言機(jī)實(shí)例。
某去中心化電競平臺(tái)是一個(gè)基于以太坊的去中心化應(yīng)用,能夠讓電子競技迷們可以通過一個(gè)去中心化的、自動(dòng)化平臺(tái)去參與他們喜歡的游戲,并能夠利用手中的代幣進(jìn)行電子競技。通過該平臺(tái),智能合約結(jié)合見證人系統(tǒng)和中心化的陪審團(tuán),使得某去中心化電競平臺(tái)可以不依賴可信的第三方來自動(dòng)、可信的判定游戲勝負(fù)結(jié)果,從而根據(jù)游戲結(jié)果自動(dòng)處理參與玩家的代幣,如果有爭議產(chǎn)生,需要更高級(jí)別的審查,那么內(nèi)部陪審制度將被激活進(jìn)行人工裁定。其用于比賽勝負(fù)自動(dòng)判定的見證人系統(tǒng)設(shè)計(jì)如下
圖3 見證人系統(tǒng)
如圖3所示,見證人在比賽驗(yàn)證系統(tǒng)中是一個(gè)非常重要的角色,要想成為見證人,必須要運(yùn)行自動(dòng)見證人節(jié)點(diǎn)軟件并購買一定量的代幣,他們充當(dāng)比賽結(jié)束前的最終關(guān)口和獎(jiǎng)勵(lì)的處理。見證人節(jié)點(diǎn)網(wǎng)絡(luò)充當(dāng)一個(gè)去中心化的代理,他們能夠鏈接游戲的API,互相校驗(yàn)游戲結(jié)果確保平臺(tái)不會(huì)有錯(cuò)誤和欺詐。眾多的見證人形成了一個(gè)見證人池,所有的見證人節(jié)點(diǎn)會(huì)察看每一場分配的比賽,檢查游戲API并發(fā)送結(jié)果到區(qū)塊鏈讓所有人都能看到。每場游戲結(jié)束后,按照加權(quán)隨機(jī)選擇過程,對(duì)于每一場比賽大約2 個(gè)見證人節(jié)點(diǎn)將向智能合約報(bào)告比賽結(jié)果,智能合約根據(jù)結(jié)果自動(dòng)處理游戲參與者的代幣并向報(bào)送數(shù)據(jù)的見證人節(jié)點(diǎn)發(fā)送獎(jiǎng)勵(lì)。見證人節(jié)點(diǎn)的獎(jiǎng)勵(lì)隨著網(wǎng)絡(luò)中的比賽數(shù)的增加而不斷增加,因此,見證人有動(dòng)力報(bào)告正確數(shù)據(jù),支持讓平臺(tái)走向成功。見證人系統(tǒng)軟件是一個(gè)完全自動(dòng)化的軟件,不需要人工干預(yù)。
當(dāng)一場比賽出現(xiàn)爭議,見證人中的一些成員將會(huì)被隨機(jī)選擇作為陪審員,多個(gè)陪審員組成了一個(gè)陪審團(tuán),基于見證人提供的結(jié)果和玩家的其他的證據(jù)比如截圖進(jìn)行人工投票。根據(jù)投票結(jié)果,見證人和與大多數(shù)投票一致的陪審員同樣可以獲得一部分獎(jiǎng)勵(lì),與少數(shù)人投票一致的陪審員將會(huì)得到懲罰措施。
為了預(yù)防冒名攻擊和共謀攻擊,該平臺(tái)對(duì)見證人節(jié)點(diǎn)提出了如下要求:
玩家必須向平臺(tái)提供身份證明比如姓,郵箱或者名字,確保每一個(gè)人只有唯一的賬戶去參與見證人節(jié)點(diǎn)。
成為見證人節(jié)點(diǎn),需要一定量的代幣作為抵押。
節(jié)點(diǎn)被選定履行陪審團(tuán)職責(zé)的概率是與持有代幣的數(shù)量成正比的,但限定概率上限為1%。這樣可以確保沒有人能夠主宰的陪審團(tuán)的挑選過程。
通過以上措施,從而保證見證人系統(tǒng)的公平和公證。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長
- 特斯拉CEO馬斯克身家暴漲,穩(wěn)居全球首富寶座
- 阿里巴巴擬發(fā)行 26.5 億美元和 170 億人民幣債券
- 騰訊音樂Q3持續(xù)穩(wěn)健增長:總收入70.2億元,付費(fèi)用戶數(shù)1.19億
- 蘋果Q4營收949億美元同比增6%,在華營收微降
- 三星電子Q3營收79萬億韓元,營業(yè)利潤受一次性成本影響下滑
- 賽力斯已向華為支付23億,購買引望10%股權(quán)
- 格力電器三季度營收同比降超15%,凈利潤逆勢增長
- 合合信息2024年前三季度業(yè)績穩(wěn)?。籂I收增長超21%,凈利潤增長超11%
- 臺(tái)積電四季度營收有望再攀高峰,預(yù)計(jì)超260億美元刷新紀(jì)錄
- 韓國三星電子決定退出LED業(yè)務(wù),市值蒸發(fā)超4600億元
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。