什麼是區塊鏈預言機(BlockChain Oracle)

孫孝虎發表於2018-12-26

Photo by Julian Klumpers on Unsplash

預言機 Oracle 是區塊鏈中非常重要的一個功能,但我發現很少有人討論,也可能很多人對此並不瞭解。而網上關於預言機的文章很少,很多也沒有講明白,甚至有些還是錯誤的。所以我整理了一篇詳細的文章,分享給大家,相信看完一定會對 Oracle 有一個深層次的瞭解。

1、預言機(Oracle)是什麼?

11 月 6 日,在中國人民銀行釋出的《區塊鏈能做什麼?不能做什麼?》的報告中,是這樣對預言機定義的。

區塊鏈外資訊寫入區塊鏈內的機制,一般被稱為預言機 (oracle mechanism) 。

預言機的功能就是將外界資訊寫入到區塊鏈內,完成區塊鏈與現實世界的資料互通。它允許確定的智慧合約對不確定的外部世界作出反應,是智慧合約與外部進行資料互動的唯一途徑,也是區塊鏈與現實世界進行資料互動的介面。

聽上去很難理解,我們舉例來說。

大家會很形象的把公鏈比作作業系統(Windows、IOS、安卓),DAPP 類比的話就是 APP,那麼預言機可以形象的比做 API 介面。API 是一組定義、程式及協議的集合,通過 API 介面實現計算機軟體之間的相互通訊。

這樣類比雖然不準確,但意思就是預言機是區塊鏈和現實世界之間的紐帶,可以實現資料互通的工具。

2、Oracle 為什麼被中譯為預言機?

跟別人提起預言機,很多人的第一反應都是預測市場,預言機這個名字確實容易想到預測。

Oracle 最初是來源於古希臘宗教,意為“神諭、先知、預言”。而在網際網路領域,預言機(英語:oracle machine),又稱諭示機,是一種抽象電腦,用來研究決定型問題。可以被視為一個多了個黑盒子(預言者)的圖靈機,這個黑盒子的功能是可以在單一運算之內解答特定問題。

也許你會好奇這跟甲骨文公司有什麼關係嗎?其實沒有關係。

Oracle 在中國叫甲骨文公司的原因可能是另一個故事。在中國商朝晚期,王室把在動物骨骼或龜甲上做占卜記事的文字叫甲骨文,甲骨文被英譯為 Oracle bone script,後來 Oracle 公司到中國中譯為了甲骨文公司。(很有道理的猜測 哈哈哈)

3、區塊鏈為什麼需要預言機?

區塊鏈是一個確定性的、封閉的系統環境,目前區塊鏈只能獲取到鏈內的資料,而不能獲取到鏈外真實世界的資料,區塊鏈與現實世界是割裂的。

一般智慧合約的執行需要觸發條件,當智慧合約的觸發條件是外部資訊時(鏈外),就必須需要預言機來提供資料服務,通過預言機將現實世界的資料輸入到區塊鏈上,因為智慧合約不支援對外請求。

具體原因是這樣的。區塊鏈是確定性的環境,它不允許不確定的事情或因素,智慧合約不管何時何地執行都必須是一致的結果,所以虛擬機器(VM)不能讓智慧合約有 network call(網路呼叫),不然結果就是不確定的。

也就是說智慧合約不能進行 I/O(Input/Output,即輸入/輸出),所以它是無法主動獲取外部資料的,只能通過預言機將資料給到智慧合約。

我們通過一個例子來說明一下。

假設現在我被關進了一個小黑屋裡(不要多想,只是例子?),我對外面的世界發生了什麼一無所知,不知道外面是否有人,即使呼叫也沒有人迴應,而我知道外界資訊的方式,只有外面的人在門口把他看到的聽到的都告訴我,我才可以得知。

例子雖然不太恰當,但智慧合約就像這個例子中的我一樣,它無論何時何地,都無法主動向外尋求資訊,只能外部把訊息或資料給到裡面。而預言機就是這個在外面輸送訊息和資料的人。

好像這麼看來,智慧合約並不是很智慧呀,是的,智慧合約其實是完成的不智慧的事情,即寫好了條件和結果,當給它條件的時候,就可以觸發,但也不會馬上執行,還需要合約相關的人進行私鑰簽署才可以執行。

所以,網上很多文章其實都有水分,比如智慧合約某個時間或者觸發某個條件就可以自動執行之類的,只能說這樣的句子在邏輯上可能是有問題的。關於預言機的很多文章也有水分,描述的並不準確。

好了,上面就是區塊鏈為什麼需要預言機,因為智慧合約無法主動去獲取鏈外的資料,只能被動接受資料。

4、預言機怎麼解決這個問題?

來源:ChainLink 白皮書

這是理想中預言機的工作流程,即使用者的智慧合約把請求給鏈上 Oracle 合約,通過鏈下的 API 介面獲得外部資料,更確切的說是外部把資料給鏈上的 Oracle 合約,然後 Oracle 合約再把資料給使用者的智慧合約。

或許很難理解,因為在網際網路中,呼叫資料是非常容易的,只需要在程式中寫呼叫的程式碼就可以了。但是區塊鏈與外部世界的資料互動,確實不能進行這樣的操作。

5、預言機的應用場景有哪些?

預言機作為區塊鏈與現實世界進行資料互動的橋樑,應用場景非常多,可以說一切需要與鏈下進行資料互動的DApp都需要預言機。比如金融衍生品交易平臺、借貸平臺、快遞追蹤/IoT、穩定幣、博彩遊戲、保險、預測市場等等。

我們還是舉例來說。

**先說最近幣圈比較火熱的博彩遊戲為什麼需要預言機。**博彩遊戲的核心是不可預測、可驗證的隨機數,從而決定賭注的最終結果,但是在鏈上是無法生成隨機數的或者說在鏈上的隨機數是可以被預測和破解的,這時候就需要預言機從外部給智慧合約安全的、不可預測的隨機數。

現在的大多數博彩遊戲都是在鏈上生成隨機數,很容易被預測和破解,導致資產被盜,大家有興趣的可以去看一下 DApp 被盜的相關研究報告,很多因為隨機數問題被盜的。比如 BetDice、Dice2.Win。

如果大家很感興趣,可以看一下我男神 DOS Network 創始人 jonny 關於《智慧合約中的隨機數》的分享。PPT連結:zhuanlan.zhihu.com/p/50219222

其實,早在 Fomo3D 這個遊戲出來之後,以太坊的 Team Leader 就在推特上說過鏈上是無法生成隨機數的。Dear devs... you can`t generate random numbers on chain!

Peter`s twitter

我們再來看一個關於快遞追蹤的例子。

假設當我通過某個 DApp 購物平臺購買某件物品快遞過來的時候,真實世界中的快遞寄送或到達資訊,就可以通過 Oracle 把資料傳遞到鏈上,然後觸發鏈上的智慧合約,我用自己的私鑰確認收到了快遞,並完成付款。

大家發現了嗎?這裡的智慧合約不能自動執行,而是需要我用自己的私鑰進行確認,智慧合約保證的是沒有第三方機構做擔保和資金週轉(比如支付寶),這就是智慧合約的價值。

其他的案例就不細說了,比如穩定幣需要鏈下的利率,保險需要鏈下的病例或車況等,具體可以看這篇文章《Oracle—區塊鏈與現實世界的紐帶》。

6、目前預言機專案和解決方案有哪些?

目前在預言機領域探索的專案還不是很多,每一個專案的預言機解決方案都略有差異,我找了幾家不同解決方案的預言機專案。

Oraclize:為以太坊提供中心化預言機服務

來源:oraclize官網

Oraclize 依託亞馬遜 AWS 服務和 TLSNotary 技術,是一個可證明的誠實的預言機服務,不過它是中心化的,目前只能在以太坊網路使用,而且 gas 費較高。但是不妨礙它是目前比較受歡迎的預言機服務,可能也是因為沒有其他更好的選擇吧。

ChainLink:以太坊上第一個去中心化預言機解決方案

來源:ChainLink白皮書

ChainLink 的解決方案是通過在鏈上的智慧合約和鏈下的資料節點,通過獎懲機制和聚合模型的方式,進行資料的請求和饋送。不過也有一些不足,比如鏈式聚合成本較高,擴充性差,基於聲譽系統容易集中化。

歐鏈 OracleChain:EOS 上的第一個去中心化預言機解決方案

來源:歐鏈白皮書

歐鏈很早就提出了預言機的想法和方案,採用自主的 PoRD 機制(Proof-of-Reputation&Deposit),本質上是一種抵押代幣獎懲機制的聲譽系統,獎勵資料節點懲罰作惡節點,可以實現 Augur、Gnosis 等預測市場應用的功能,還能支撐對鏈外資料有更高頻率訪問需求的智慧合約業務。預測市場的結果本身有時也可以作為 oracle 的輸入資料來源。歐鏈更像是預測市場,而且單純的聲譽系統容易集中化。

DOS Network:支援多條主流公鏈的去中心化預言機服務網路

來源:DOS Network GitHub

DOS Network 是一個 Layer-2 的預言機解決方案,它通過在鏈上部署一個輕量級智慧合約,鏈下是一個 p2p 網路,服務節點的選取和資料驗證採用 VRF和閾值簽名等技術,保證了去中心化和資料安全,並達到快速反應。可以適配所有主流公鏈,比如以太坊、EOS、波場、Thunder。目前已在以太坊測試網釋出 alpha 版本:dosnetwork.github.io/docs/

看完文章是不是對區塊鏈預言機有了更深的瞭解,區塊鏈作為一種新興的技術,還需要不斷的探索和嘗試。而預言機在其中扮演著非常重要的角色,讓我們共同期待預言機技術的不斷成熟,進而促進更多區塊鏈與現實世界進行資料互動的 DApp 落地。

相關文章