智能合約如何可信地與外部世界交互

智能合約如何可信地與外部世界交互

8月22日訊,區(qū)塊鏈應用中,外部世界如何與智能合約交互往往是一個容易被忽視的問題,很多的智能合約應用場景是根據(jù)一些外部事件,輸出相應的結果,而傳統(tǒng)的IT數(shù)據(jù)交互方式實際上并不能投入真正的工作。例如,按照農(nóng)產(chǎn)品價格情況來支付投保人賠款的農(nóng)產(chǎn)品價格險保單。傳統(tǒng)IT人員一般認為是如下的流程:智能合約會在預定的時間,從期貨交易場所獲取農(nóng)產(chǎn)品價格,然后按照獲取的數(shù)據(jù)采取預設的行動。聽起來很簡單,但卻不可能實現(xiàn)。為什么呢?因為這里存在兩個問題,一是共識問題,二是受信任方問題。

一、共識問題

區(qū)塊鏈是基于共識的系統(tǒng),只有在每個交易和區(qū)塊處理過后,并且每個節(jié)點達到相同狀態(tài),智能合約才能正常運行,所有事情必須是精確一致。如果節(jié)點之間對數(shù)據(jù)狀態(tài)有歧義,整個系統(tǒng)就無法可信穩(wěn)定運行了。在上面的案例中,智能合約由鏈上的每個節(jié)點獨立執(zhí)行,因此如果智能合約從外部服務獲取數(shù)據(jù)的話,這個數(shù)據(jù)獲取過程是由各節(jié)點重復和獨立完成的,假設這個區(qū)塊鏈有100個節(jié)點,那么就會有100條獲取數(shù)據(jù)的請求從每個節(jié)點發(fā)送到期貨交易場所,但是因為這個數(shù)據(jù)來源于區(qū)塊鏈外部,價格是實時波動的,由于網(wǎng)絡延遲、節(jié)點處理速度等各種原因,每個節(jié)點獲取的并不是同一時刻的價格,輸入到智能合約的價格數(shù)據(jù)也就不同,因此對應的各節(jié)點智能合約輸出也會不同,在這種情況下,整個區(qū)塊鏈的信任基礎就會崩潰,無法達成共識。

解決的方法其實很簡單,不通過智能合約發(fā)出外部數(shù)據(jù)獲取指令,而是由第三方發(fā)送一筆區(qū)塊鏈交易,在交易中附加需要的數(shù)據(jù),交易會將數(shù)據(jù)嵌入?yún)^(qū)塊,并同步到每個節(jié)點,從而保證數(shù)據(jù)的完全一致,因此可以用于智能合約的計算中。總結就是由第三方將數(shù)據(jù)推送進區(qū)塊鏈,而不是由智能合約將數(shù)據(jù)拉取進去。

同樣的問題一樣發(fā)生在智能合約調用外部世界事件的情況。還是上面的例子,很多人會想象價格到預定目標,智能合約去調用期貨公司的API接口,實現(xiàn)賣出期貨的功能,從而鎖定保單風險,但是如果每個節(jié)點都獨立執(zhí)行智能合約,那么應該由哪個節(jié)點去調用這個API呢?如果選擇某個節(jié)點去執(zhí)行,但是如果該節(jié)點發(fā)生故障了,無論是不是故意的,怎么保證其可靠性呢?而選擇全部節(jié)點去完成API調用的話,是否每個節(jié)點都可信,怎么保證API密碼的安全呢?況且一個API同時被多節(jié)點高并發(fā)頻繁調用也是不合適的。

解決方法參考上面的問題,智能合約不需要獲取外部API,而是第三方實時監(jiān)控區(qū)塊鏈狀態(tài),然后做出相應的反饋。例如,合作的期貨交易所實時監(jiān)控區(qū)塊鏈,然后根據(jù)鏈上的交易情況做對應的資金轉移,這樣就不會對區(qū)塊鏈共識產(chǎn)生威脅。

二、受信任方問題

前文提到的解決共識問題方法核心就是區(qū)塊鏈被動接收數(shù)據(jù),與外部的交互依賴于第三方,這個時候就會引入第二個問題,第三方如何信任?第三方如果在數(shù)據(jù)傳輸過程中私自篡改數(shù)據(jù)怎么辦?如何審計第三方是否從正確的地址獲取的數(shù)據(jù)?為解決可信問題,就需要引入Oracle,它不是甲骨文數(shù)據(jù)庫公司,中文翻譯為預言機。預言機是一種可信任的實體,它通過簽名引入關于外部世界狀態(tài)的信息,從而允許確定的智能合約對不確定的外部世界作出反應。預言機具有不可篡改、服務穩(wěn)定、可審計等特點,并具有經(jīng)濟激勵機制以保證運行的動力。目前來說,預言機有兩種模型,一個是單一模型,另一個是多重模型,有時候多重模型又稱為Oracle網(wǎng)絡。

單一模型只包含一個預言機,這一預言機是可信任的,它會正確地執(zhí)行代碼,合約的參與者能確信它不會與合約的某一參與方相勾結,單一模型類似于軟件即服務提供者。對于大部分應用,單一模型已經(jīng)就足夠安全,并且經(jīng)濟實惠。目前一個單一模型的實例是Oraclize。

多重模型包含多個預言機,甚至是預言機網(wǎng)絡。雖然單一可信任的預言機對大多數(shù)用戶來說已經(jīng)足夠了,但是高價值的資產(chǎn)處理需要更高的可信任度,這就需要用到多重模型。在這一模型中,代碼的執(zhí)行分布在若干獨立的預言機中,例如10個,將這10個預言機的數(shù)據(jù)設置一個可信臨界,臨界值數(shù)量的智能預言機必須就結果達成一致。例如,用戶使用7/10模型,只有當?shù)扔诖笥?個智能預言機一致時,合同才能夠執(zhí)行。這一模型留出了3個緩沖,也許有的智能預言機離線,有問題或者被黑客攻擊,只要不多于3個不影響合同代碼的執(zhí)行。多重模型比單一模型更加復雜,成本更加高,但是它提供了更好的安全保障。

三、單一模型預言機運作方式

單一模型預言機的一個典型實例是Oraclize,由于他的應用十分典型,本文以Oraclize為例進行講解。

1、Oraclize簡介

Oraclize是一個獨立的服務提供商,目前提供免費的數(shù)據(jù)輸送服務,其目的是在區(qū)塊鏈和互聯(lián)網(wǎng)之間建立一道可信的數(shù)據(jù)網(wǎng)關,其目標是打破智能合約獲取數(shù)據(jù)的束縛,在保證可信的情況下,使其具有訪問互聯(lián)網(wǎng)數(shù)據(jù)的能力。Oraclize不是想讓智能合約的開發(fā)者信任這個組織,因為不論任何信任,都可以從技術上篡改數(shù)據(jù),無法真正從技術保證安全,而是通過提供多種加密證明方法,構建可信的預言機。 Oraclize的運行狀態(tài)如下圖。

\

如圖1,多種區(qū)塊鏈可以通過Oraclize有效的訪問互聯(lián)網(wǎng)API,保護其Dapp的安全性和健壯性,目前支持Ehtereum、Bitcoin、Rootstock、Eris四種區(qū)塊鏈。用以太坊為例子,目前采用Solidity的智能合約只能存取訪問鏈內的信息,而Oraclize作為一個數(shù)據(jù)傳送者,可以在以太坊的DApps與Web APIs之間提供可靠連接,讓基于智能合約的Dapp應用可信的地取得外部信息和數(shù)據(jù)。運行原理如圖2:

\

Oraclize在以太坊上部署了一個名為usingOraclize的智能合約,如果需要其數(shù)據(jù)訪問服務,只需要在自己的智能合約中引用該智能合約,然后根據(jù)API文檔中描述的方法進行相關的調用即可。如果某些組織利用以太坊技術搭建了自己的私有鏈或者聯(lián)盟鏈,Oraclize在Github上提供數(shù)據(jù)服務的開源智能合約代碼,通過自己部署后,一樣可以像公有鏈一樣調用。Oraclize提供了多種數(shù)據(jù)源服務器,包括Url訪問、數(shù)據(jù)搜索引擎、區(qū)塊鏈內容數(shù)據(jù)、IPFS文件訪問等等,其中Url訪問和區(qū)塊鏈內容數(shù)據(jù)提供了基于TLSNotary的可信證明技術,也是常見的數(shù)據(jù)訪問需求。對于基于TLSNotary的可信證明可以根據(jù)用戶的需求開啟和關閉,因為雖然目前該服務是免費的,但是隨著以后Oraclize的正式版發(fā)布以及推廣期的結束,可信證明技術是需要更多的收費,用戶可以基于成本考慮選擇是否使用,常見的典型服務如下:

(1)Url訪問服務

該服務可以用來訪問互聯(lián)網(wǎng)的API或者網(wǎng)頁,首先用戶向Oraclize提供想要訪問的URL地址,并設定GET / POST 的方法和相關的參數(shù)。Oraclize根據(jù)用戶的設定,自動獲取URL的內容,然后發(fā)送數(shù)據(jù)到區(qū)塊鏈上的Oraclize的服務智能合約上,通過該智能合約轉發(fā)到用戶的智能合約上。整個過程中,用戶可以選擇開啟或關閉TLSNotary的可信證明。這樣的應用場景很多,比如通過Random.org網(wǎng)站獲取真正的隨機數(shù)、獲取航班運行情況用于航班延誤險的自動計算和支付、鏈上身份認證系統(tǒng)、去中心化的博彩系統(tǒng)、去中心化的預測市場(如體育運動比賽結果或競選活動)等等。

(2)區(qū)塊鏈內容數(shù)據(jù)

區(qū)塊鏈內容服務可以讓智能合約快速訪問某一區(qū)塊鏈的相關數(shù)據(jù),實際上,一方面早期的區(qū)塊鏈上的腳本并不能訪問自身的內容,比如比特幣的腳本本身不能訪問比特幣的區(qū)塊鏈數(shù)據(jù)。另一方面,不同區(qū)塊鏈上的腳本或智能合約有跨鏈訪問數(shù)據(jù)的需求,以完成更復雜的功能。區(qū)塊鏈內容數(shù)據(jù)一般來說都是從互聯(lián)網(wǎng)上的區(qū)塊鏈瀏覽器獲取,區(qū)塊鏈瀏覽器一般都會提供各種API用于獲取區(qū)塊哈希、區(qū)塊內容,交易內容、用戶余額等多種信息,從本質上來說,區(qū)塊鏈內容數(shù)據(jù)也是URL訪問服務的一種特殊類型。

除此以外,Oraclize還提供搜索引擎數(shù)據(jù)服務、IPFS分布式數(shù)據(jù)服務、加解密服務、鏈下計算服務等,原理本質上沒有區(qū)別,由于篇幅限制,不再復述。

四、Oraclize可信證明機制原理

Oraclize之所以可以提供一個可證明的誠實從外部世界安全獲取信息的能力,是依賴于TLS證明技術(TLSnotary),除此以外,Oraclize還提供了其他兩種證明機制:Android SafetyNet證明、IPFS大文件傳送和存儲證明,由于使用較少,本文不做詳細展開。

TLSnotary證明主要基于安全傳輸層協(xié)議TLS 1.1,TLS用于在兩個通信應用程序之間提供保密性和數(shù)據(jù)完整性,最大優(yōu)勢就在于獨立于應用協(xié)議,更高層協(xié)議可以透明地分布在 TLS 協(xié)議上面。

TLS包含三個基本階段:1.對等協(xié)商支援的密鑰算法,2.基于私鑰加密交換公鑰、基于PKI證書的身份認證,3.基于公鑰加密的保密數(shù)據(jù)傳輸。在整個傳輸中,TLS的master key可以分成三個部分:服務器方、受審核方和審核方。在整個流程中,互聯(lián)網(wǎng)數(shù)據(jù)源作為服務器方,Oraclize作為受審核方,一個專門設計的,部署在亞馬遜云上的開源實例作為審核方,每個人都可以通過這個審計方服務對Oraclize過去提供的數(shù)據(jù)進行審查和檢驗,以保證數(shù)據(jù)的完整性和安全性。

五、多重模型預言機運作方式

多重模型預言機有多種例子,一般來說,這種成本較高,較復雜的預言機會應用在對信息可靠性要求較高,涉及價值比較大的領域,比如金融、博彩等。一個可靠的多重模型預言機,遵循博弈原理,有經(jīng)濟激勵機制和懲罰措施,越多的節(jié)點參與,其真實性越高。當數(shù)據(jù)輸入時,網(wǎng)絡需要保證參與者節(jié)點無法知曉其他參與者的數(shù)據(jù),然后各個節(jié)點將數(shù)據(jù)輸入智能合約,智能合約對于價格等連續(xù)數(shù)據(jù)將選擇最接近中位數(shù)的數(shù)據(jù),如果是二元數(shù)據(jù)則統(tǒng)計得票最多的結果,最后對提供正確數(shù)據(jù)的節(jié)點進行獎勵。與單一模型不同,多重模型需要面對女巫攻擊(Sybil attack)和共謀攻擊(collusion attack)。

這兩個攻擊本質上都是通過控制多個節(jié)點來偽造數(shù)據(jù)干擾最終結果,主要防范的方法,一是鼓勵盡量多的節(jié)點參加數(shù)據(jù)反饋;二是讓每個節(jié)點的權重盡量平均,防止某些節(jié)點權重過高,易于控制結果,三是提高節(jié)點的接入成本,比如需要一定的押金;四是需要有一定的激勵和懲罰措施,以促使節(jié)點考慮自身利益不會撒謊。下面以某去中心化電競平臺項目為例,說明一下多重模型預言機實例。

某去中心化電競平臺是一個基于以太坊的去中心化應用,能夠讓電子競技迷們可以通過一個去中心化的、自動化平臺去參與他們喜歡的游戲,并能夠利用手中的代幣進行電子競技。通過該平臺,智能合約結合見證人系統(tǒng)和中心化的陪審團,使得某去中心化電競平臺可以不依賴可信的第三方來自動、可信的判定游戲勝負結果,從而根據(jù)游戲結果自動處理參與玩家的代幣,如果有爭議產(chǎn)生,需要更高級別的審查,那么內部陪審制度將被激活進行人工裁定。其用于比賽勝負自動判定的見證人系統(tǒng)設計如下

\

圖3 見證人系統(tǒng)

如圖3所示,見證人在比賽驗證系統(tǒng)中是一個非常重要的角色,要想成為見證人,必須要運行自動見證人節(jié)點軟件并購買一定量的代幣,他們充當比賽結束前的最終關口和獎勵的處理。見證人節(jié)點網(wǎng)絡充當一個去中心化的代理,他們能夠鏈接游戲的API,互相校驗游戲結果確保平臺不會有錯誤和欺詐。眾多的見證人形成了一個見證人池,所有的見證人節(jié)點會察看每一場分配的比賽,檢查游戲API并發(fā)送結果到區(qū)塊鏈讓所有人都能看到。每場游戲結束后,按照加權隨機選擇過程,對于每一場比賽大約2 個見證人節(jié)點將向智能合約報告比賽結果,智能合約根據(jù)結果自動處理游戲參與者的代幣并向報送數(shù)據(jù)的見證人節(jié)點發(fā)送獎勵。見證人節(jié)點的獎勵隨著網(wǎng)絡中的比賽數(shù)的增加而不斷增加,因此,見證人有動力報告正確數(shù)據(jù),支持讓平臺走向成功。見證人系統(tǒng)軟件是一個完全自動化的軟件,不需要人工干預。

當一場比賽出現(xiàn)爭議,見證人中的一些成員將會被隨機選擇作為陪審員,多個陪審員組成了一個陪審團,基于見證人提供的結果和玩家的其他的證據(jù)比如截圖進行人工投票。根據(jù)投票結果,見證人和與大多數(shù)投票一致的陪審員同樣可以獲得一部分獎勵,與少數(shù)人投票一致的陪審員將會得到懲罰措施。

為了預防冒名攻擊和共謀攻擊,該平臺對見證人節(jié)點提出了如下要求:

玩家必須向平臺提供身份證明比如姓,郵箱或者名字,確保每一個人只有唯一的賬戶去參與見證人節(jié)點。

成為見證人節(jié)點,需要一定量的代幣作為抵押。

節(jié)點被選定履行陪審團職責的概率是與持有代幣的數(shù)量成正比的,但限定概率上限為1%。這樣可以確保沒有人能夠主宰的陪審團的挑選過程。

通過以上措施,從而保證見證人系統(tǒng)的公平和公證。

極客網(wǎng)企業(yè)會員

免責聲明:本網(wǎng)站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內容可能涉嫌侵犯其知識產(chǎn)權或存在不實內容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。

2017-08-22
智能合約如何可信地與外部世界交互
區(qū)塊鏈應用中,外部世界如何與智能合約交互往往是一個容易被忽視的問題,很多的智能合約應用場景是根據(jù)一些外部事件,輸出相應的結果,而傳統(tǒng)的IT數(shù)據(jù)交互方式實際上并不能投入真正的工作。

長按掃碼 閱讀全文