尋找信任之泉:讀懂預言機原理、類型、現狀和發展方向

李畫
2020-12-28 16:05:54
收藏
從第一性原理出發,真正看懂預言機的未來發展道路。

本文於19年10月9日發佈在鏈聞,內容討論: 吳為龍(Genaro CTO)、李畫,內容整理:李畫

就像任何計算機系統一樣,區塊鏈的工作也是處理數據。

數據來源有兩種,一種本身就在區塊鏈上,比如一個帳戶中 ETH 的數量;一種本身沒在區塊鏈上,比如 ETH 的價格。區塊鏈系統如何獲得自身之外的數據?可以通過預言機(Oracle):當合約需要某個鏈外的數據時,它去找預言機要,預言機就去鏈下獲得這個數據,然後把數據告訴給該合約。

這樣看來,預言機非常重要,如果沒有它,區塊鏈的發展就局限在只能使用鏈上的那一點點資產數據的範圍內,這顯然不符合我們對它的期待。但是,重要的東西並不一定是影響系統發展的關鍵東西,比如氧氣對人類而言也許是最重要的,但它幾乎不會構成困擾我們的問題。

不妨用互聯網與區塊鏈做對比。顯而易見,互聯網的數據來源也幾乎只有「網外」(對應鏈外),它同樣有數據的「上網」(對應上鏈)問題,但它為什麼沒有遇到預言機問題?

原因並不在於互聯網上的應用可以從網外讀取數據,而區塊鏈上的應用出於共識需求,必須通過預言機來讀入一個一致的鏈外數據------實際上,任何鏈上的應用都可以輕鬆地給自己寫一個預言機作為鏈外數據的接口。關鍵的問題在於,用戶是否相信這個預言機提供的數據。

究其根源,原因在於傳統互聯網是中心化結構的,在這種系統中,用戶選擇該中心化機構,就得相信這個機構提供的數據,對數據的信任問題轉移為對中心的信任問題,數據的「上網」是由中心化的伺服器自己來完成的。當然,用戶也可以選擇不信任。

而區塊鏈是分佈式結構的,我們希望打造的是一個 trustless (無需信任)的系統,信任是建立在透明的機制以及對該機制開源的代碼實現之上。這樣一來,中心化的機構就無法利用用戶對信任的需求建立起壟斷的高牆,然後在高牆內「為所欲為」。

在預言機問題上的體現就是:用預言機上鏈數據並不難,簡單的讀寫操作就能把一個鏈下的數據「喂」給鏈上的合約;但生產信任卻很難,預言機要通過技術和機制的設計,使得自己提供的數據能夠滿足用戶對信任的需求。

所以,從功能上看,預言機解決的是數據問題,但從本質上看,預言機需要解決的是信任問題。這正是互聯網沒有「數據上網」問題,而區塊鏈卻有「數據上鏈」問題的原因。

當區塊鏈發展到需要使用鏈下數據來探索和實現更多方向上的應用時,預言機要能夠滿足其對「可信數據」的要求。因此,在對「區塊鏈基礎設施」這一主題的探討中,我們選擇了預言機作為其中之一。

一、預言機的設計思路

當我們知道預言機的核心在於解決信任問題後,就能明白各種預言機在設計思路上的主要差別,在於它們的「信任生產機制」的不同。

根據信任的不同來源,可以把如今的主流預言機分為如下三類:

  1. 由可信的中心提供數據,比如 Provable (原 Oraclize)。
  2. 由分佈式的節點提供數據,比如 Chainlink
  3. 由可信的聯盟提供數據,比如 Maker 的預言機。

在介紹不同類型預言機的具體實現之前,以下幾點是需要注意的,或者說是值得我們思考和討論的:

  • 預言機的作用不是提供「真實的數據」,而是提供「可信的數據」。「真實」是一個主觀的概念,也是個難以評估的概念,世界上或許沒有任何工具能保證輸出「真實」,而讓預言機去完成這樣的功能也並不現實。我們無法設計一套機制來確保真實,但可以設計機制來提高可信程度。如果要求預言機提供真實,就容易陷入預言機無用論與區塊鏈無用論之中,因為它們確實無法滿足我們對真實的要求。
  • 不同的應用場景對信任的需求是不一樣的。並不是所有的數據都要在最高程度的可信保障下上鏈,這涉及到信任的成本問題,也與數據可信的重要性、數據造假的動機等等維度相關。
  • 不同的應用場景,信任的來源 / 支撐是不一樣的。也就是說,並不能認為某種信任生產機制實現的信任就是最優的,而某些機制實現的信任就是不好的。

這樣一來,當我們去觀察預言機項目時,重要的關注點可以落在它是如何生產信任的,以及它提供的信任能否滿足它所服務的應用場景的需求。

預言機的設計還涉及到另一個重要問題就是數據源的問題,即預言機中的數據提供者從哪兒獲取數據。可以分為兩種類型,一種是從單一數據源獲取數據,一種是從多個數據源獲取數據。

二、預言機的具體實現

讓我們從信任的來源入手,了解一下不同類型預言機的具體實現。

預言機是區塊鏈重要的基礎設施,但預言機並不是一項「神奇」技術,它所作的其實就是把鏈外的數據給到鏈上的應用,無論預言機是什麼樣的,都只是數據提供方的不同實現形式。

我們可以想像一個小鎮,鎮子裡有一口大鐘顯示時間(數據源),還住著一位盲人(區塊鏈應用)。盲人想知道時間,但他無法看見大鐘,所以得有一個人把表盤顯示出的時間告訴他,這個人就是預言機。

1. 由可信的中心提供數據

如果小鎮中住著 10 位盲人,而時間對於這些盲人又很重要的話,預言機就可以成為一門生意。盲人每次找這個人詢問時間都得給他 1 塊錢,10 位盲人,每位盲人每天問他 10 次,那他每天就可以賺 100 塊。

這個人如果是自己去看大鐘的時間然後告訴盲人,我們稱這種方式為由可信的中心提供數據。在這種情況下,盲人們選擇這個人的前提是要能夠相信這個人不會欺騙他們,所以這個人需要證明自己是值得信任的。

一類中心化預言機的信任保障是「真實性證明技術」,比如 Provable。它採用的是 TLSNotary 算法,對每一個返回的結果都可以提供一個未被修改的證明,也就是說它能表明提供給合約的數據是數據源在某個時間點上的正確數據。

Town Crier 也屬於這種類型的預言機,它使用的是英特爾 SGX (軟體防護擴展)架構,通過在類似黑匣子的環境中運行代碼來防止數據被篡改,是一種基於硬體的信任提供方式。

這類預言機有它們自己的弱點,包括技術問題,比如 TLSNotary 算法自身的不足;單點故障問題;數據源風險問題等等,但它們也有著低成本、高效率等等優點,而且真實性證明技術也是在不斷發展中的。

雖然是中心化的存在,但由於這類預言機是商業化的,它們做而且只做提供數據的工作,數據的安全性與其自身的發展是直接相關的,所以它們不作為和作惡動機是比較小的。

除了通過技術提供信任的預言機,還有另一類可信中心的預言機:試想,如果鎮子裡的大鐘添加了報時功能會怎樣?盲人走到大鐘旁,按下一個按鈕,大鐘直接告訴他現在的時間。

當區塊鏈需要某個權威機構(比如國家機構、銀行等等)的某類數據時,由該機構自己構建預言機來提供數據也許是很好的方式。這個時候重要的不是預言機的技術,而是數據源本身是否願意開放接口。信任的來源也不是預言機的設計,而是該機構本身。

這是一種把鏈下的信任繼承到鏈上的方式,它相信的是由傳統的信任生產機制帶來的信任。雖然高度中心化,但至少在相當長的歷史時期內是有積極且重要的意義的,比如在借貸、商業借貸的場景中。記住,區塊鏈並不是要否定其他一切產生信任的方式。

以國家機構為例,可以很容易理解這一類預言機的特點,但該類別也可能出現商業類型的數據源及預言機,它們服務於某種特定的數據需求,這種數據往往是大量特殊數據的計算結果,而只有專業的機構才有能力給出這種數據結果。

2. 由分佈式的節點提供數據

預言機要解決的是信任問題,由可信中心提供數據的預言機通過技術證明 / 保障自己的可信,而由分佈式節點提供數據的預言機則是通過機制的設計,來保障自己的可信。後者也常常被稱為去中心化預言機、去中心化預言機網絡。

讓我們回到小鎮。去中心化預言機網絡是指鎮上所有的人都可以參與報時,當盲人詢問時間時,這些參與者 / 節點把自己看到的時間告訴給一個統計員,統計員再把最多人給他的那個時間告訴給盲人。

不難發現,這種預言機的設計思路與區塊鏈的分佈式思想是一致的,因此它不會給區塊鏈上的應用添加新的信任類型;而不添加新的信任類型,事情的複雜度就不會變高。但這種方法也有局限性,比如它是相對昂貴的,因為要給眾多的參與者付錢;它是需要網絡規模的,參與者的數量和質量與數據的可信程度是相關的。

Chainlink 是這一類型的預言機。如下圖所示,分佈式的預言機節點 / 預言機服務提供商從分散的數據源獲取數據,並將數據提交給 Chainlink 的鏈上聚合合約(中長期戰略中將改為鏈下聚合以節約 gas 費成本),該合約經由算法計算出數據結果,並將結果發送給提出數據需求的區塊鏈應用。

在 Chainlink 中,預言機服務的購買者先指定自己的服務級別,再由 Chainlink 為其匹配預言機節點,包括節點的質量和數量。

比如,購買者的合約是一個 10 萬美元的 DeFi 市場,那麼可能需要選擇 5 個預言機節點來組成網絡;如果該合約增長為一個 100 萬美元的市場,可能就需要選擇 15 個預言機節點。可以認為,Chainlink 的工作方式是根據用戶需求為其提供一個定制的動態的預言機網絡。

除了上述專門的預言機項目外,預測市場,比如 Augur ,也可以作為一種類別的去中心化預言機,因為可以把它的預測結果作為區塊鏈合約的輸入數據。每一個預測的參與者都是一個預言機節點,這些參與者同時也是數據源本身。

預測市場提供的預言機功能可能是其他類別的預言機無法取代的,因為其數據源的獨特性,比如不依賴於任何中心化的信任,比如可以提供表達情緒和知識的數據等等,預測市場在未來也許有其獨特的預言機應用場景。但它的弱點也是突出的,它對組成預言機網絡的節點數量有較高的依賴,它在提供數據的效率上是較低的。

3. 由可信的聯盟提供數據

如果某個應用或某類應用對鏈外數據有高頻的、高質量的需求,而市場上的預言機無法滿足需求時,比如安全性不夠高、性價比不夠好,這些應用可能需要一個專門為自己的特殊需求服務的預言機,而由可信聯盟提供數據的方式是一種適合該場景的設計思路。

「由可信的聯盟提供數據」是「由分佈式的節點提供數據」的一種特殊形態,其特別之處在於,組成預言機網絡的節點是指定的。Maker 的 V2 版預言機或許可以劃歸為這一類型,其節點除了匿名的個人喂價方,還可能包括 0xdYdXSet ProtocolGnosis 等指定的喂價機構 。

相比之前的兩類預言機,這類預言機的信任組成是相對複雜的,包括對系統的機制設計的信任;對節點的信任,這很大程度上源於節點本身的利益相關者身份以及節點本身的機構聲譽;對選擇節點的 Maker 和 Maker 本身機制的信任。

對聯盟(節點和節點選擇機制)的信任帶有中心化的色彩,但恰恰是這種中心化在特定的場景中能夠產生「高性價比」的信任,因此在實際應用中,這類預言機可能是一種實用的數據上鏈方式,特別是在區塊鏈行業發展初期、商業化預言機還不夠成熟的情況下。

Maker 的預言機是由 Maker 主導的,但因為能滿足 DeFi 領域對可信數據的需求,一些其他的合約也在使用該預言機。我們也可以設想一個由第三方提供的可信聯盟的預言機服務,它是 DeFi 領域中受信任的機構 / 節點組成的預言機網絡,為分佈式金融提供專業的數據服務。如果區塊鏈產生下一類新的應用場景,那麼有可能也需要誕生一個由那個領域的可信節點組成的聯盟式的預言機服務。

三、發展之路

區塊鏈愈發展,對鏈下數據的需求就會愈強烈,預言機的重要性也會愈發凸顯。但就像上文討論的一樣,預言機領域一個更大的可能是出現多種形態並存的市場。我們可以認為從中心式到聯盟式再到分佈式,是數據提供方的顆粒度的由大到小,而不同的顆粒度決定了它們不同的屬性,也就決定了它們各自適合的服務場景。

雖然預言機也可以是由分佈式的節點網絡組成,但我們看待區塊鏈和預言機的視角及評價它們的標準是不一樣的:區塊鏈做的是探索性的工作,它更多的是問「這個問題是否適合我來解決」;而預言機做的是功能性的工作,它更多的是問「我怎麼去解決這個問題」。

所以,預言機的設計追求的是可用性與實用性:它只為需求服務,不為願景服務。最容易理解的一點就是:它要追求性價比。

除了要通過技術和機制解決信任問題外,預言機的設計還包括許多其他方面,比如數據的隱私問題、防黑客攻擊的能力問題等等,因為這些都會關係到預言機的可用性。正因如此,預言機的設計是一個涉及到諸多領域的綜合性的工程。

在文章的最後,必須指出,預言機是區塊鏈重要的基礎設施,但這並不代表著預言機的發展會制約區塊鏈的發展,反而,也許區塊鏈的發展狀況對預言機的發展影響更大。只有當鏈上合約對鏈下數據有廣泛的、迫切的需求,並能為數據付費的時候,預言機才有可能真正的、全面的發展起來。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
banner
ChainCatcher 與創新者共建Web3世界