預言機 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、預言機怎么解決這個問題?
這是理想中預言機的工作流程,即用戶的智能合約把請求給鏈上 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!
我們再來看一個關于快遞追蹤的例子。
假設當我通過某個 DApp 購物平臺購買某件物品快遞過來的時候,真實世界中的快遞寄送或到達信息,就可以通過 Oracle 把數據傳遞到鏈上,然后觸發鏈上的智能合約,我用自己的私鑰確認收到了快遞,并完成付款。
大家發現了嗎?這里的智能合約不能自動執行,而是需要我用自己的私鑰進行確認,智能合約保證的是沒有第三方機構做擔保和資金周轉(比如支付寶),這就是智能合約的價值。
其他的案例就不細說了,比如穩定幣需要鏈下的利率,保險需要鏈下的病例或車況等,具體可以看這篇文章《Oracle—區塊鏈與現實世界的紐帶》。
6、目前預言機項目和解決方案有哪些?
目前在預言機領域探索的項目還不是很多,每一個項目的預言機解決方案都略有差異,我找了幾家不同解決方案的預言機項目。
Oraclize:為以太坊提供中心化預言機服務
Oraclize 依托亞馬遜 AWS 服務和 TLSNotary 技術,是一個可證明的誠實的預言機服務,不過它是中心化的,目前只能在以太坊網絡使用,而且 gas 費較高。但是不妨礙它是目前比較受歡迎的預言機服務,可能也是因為沒有其他更好的選擇吧。
ChainLink:以太坊上第一個去中心化預言機解決方案
ChainLink 的解決方案是通過在鏈上的智能合約和鏈下的數據節點,通過獎懲機制和聚合模型的方式,進行數據的請求和饋送。不過也有一些不足,比如鏈式聚合成本較高,拓展性差,基于聲譽系統容易集中化。
歐鏈 OracleChain:EOS 上的第一個去中心化預言機解決方案
歐鏈很早就提出了預言機的想法和方案,采用自主的 PoRD 機制(Proof-of-Reputation&Deposit),本質上是一種抵押代幣獎懲機制的聲譽系統,獎勵數據節點懲罰作惡節點,可以實現 Augur、Gnosis 等預測市場應用的功能,還能支撐對鏈外數據有更高頻率訪問需求的智能合約業務。預測市場的結果本身有時也可以作為 oracle 的輸入數據源。歐鏈更像是預測市場,而且單純的聲譽系統容易集中化。
DOS Network:支持多條主流公鏈的去中心化預言機服務網絡
DOS Network 是一個 Layer-2 的預言機解決方案,它通過在鏈上部署一個輕量級智能合約,鏈下是一個 p2p 網絡,服務節點的選取和數據驗證采用 VRF和閾值簽名等技術,保證了去中心化和數據安全,并達到快速反應。可以適配所有主流公鏈,比如以太坊、EOS、波場、Thunder。目前已在以太坊測試網發布 alpha 版本:dosnetwork.github.io/docs/
看完文章是不是對區塊鏈預言機有了更深的了解,區塊鏈作為一種新興的技術,還需要不斷的探索和嘗試。而預言機在其中扮演著非常重要的角色,讓我們共同期待預言機技術的不斷成熟,進而促進更多區塊鏈與現實世界進行數據交互的 DApp 落地。