預言機 Oracle 是區塊鏈中很是重要的一個功能,但我發現不多有人討論,也可能不少人對此並不瞭解。而網上關於預言機的文章不多,不少也沒有講明白,甚至有些仍是錯誤的。因此我整理了一篇詳細的文章,分享給你們,相信看完必定會對 Oracle 有一個深層次的瞭解。git
11 月 6 日,在中國人民銀行發佈的《區塊鏈能作什麼?不能作什麼?》的報告中,是這樣對預言機定義的。github
區塊鏈外信息寫入區塊鏈內的機制,通常被稱爲預言機 (oracle mechanism) 。安全
預言機的功能就是將外界信息寫入到區塊鏈內,完成區塊鏈與現實世界的數據互通。它容許肯定的智能合約對不肯定的外部世界做出反應,是智能合約與外部進行數據交互的惟一途徑,也是區塊鏈與現實世界進行數據交互的接口。網絡
聽上去很難理解,咱們舉例來講。oracle
你們會很形象的把公鏈比做操做系統(Windows、IOS、安卓),DAPP 類比的話就是 APP,那麼預言機能夠形象的比作 API 接口。API 是一組定義、程序及協議的集合,經過 API 接口實現計算機軟件之間的相互通訊。dom
這樣類比雖然不許確,但意思就是預言機是區塊鏈和現實世界之間的紐帶,能夠實現數據互通的工具。工具
跟別人提起預言機,不少人的第一反應都是預測市場,預言機這個名字確實容易想到預測。區塊鏈
Oracle 最初是來源於古希臘宗教,意爲「神諭、先知、預言」。而在互聯網領域,預言機(英語:oracle machine),又稱諭示機,是一種抽象電腦,用來研究決定型問題。能夠被視爲一個多了個黑盒子(預言者)的圖靈機,這個黑盒子的功能是能夠在單一運算以內解答特定問題。測試
也許你會好奇這跟甲骨文公司有什麼關係嗎?其實沒有關係。操作系統
Oracle 在中國叫甲骨文公司的緣由多是另外一個故事。在中國商朝晚期,王室把在動物骨骼或龜甲上作占卜記事的文字叫甲骨文,甲骨文被英譯爲 Oracle bone script,後來 Oracle 公司到中國中譯爲了甲骨文公司。(頗有道理的猜想 哈哈哈)
區塊鏈是一個肯定性的、封閉的系統環境,目前區塊鏈只能獲取到鏈內的數據,而不能獲取到鏈外真實世界的數據,區塊鏈與現實世界是割裂的。
通常智能合約的執行須要觸發條件,當智能合約的觸發條件是外部信息時(鏈外),就必須須要預言機來提供數據服務,經過預言機將現實世界的數據輸入到區塊鏈上,由於智能合約不支持對外請求。
具體緣由是這樣的。區塊鏈是肯定性的環境,它不容許不肯定的事情或因素,智能合約無論什麼時候何地運行都必須是一致的結果,因此虛擬機(VM)不能讓智能合約有 network call(網絡調用),否則結果就是不肯定的。
也就是說智能合約不能進行 I/O(Input/Output,即輸入/輸出),因此它是沒法主動獲取外部數據的,只能經過預言機將數據給到智能合約。
咱們經過一個例子來講明一下。
假設如今我被關進了一個小黑屋裏(不要多想,只是例子🌝),我對外面的世界發生了什麼一無所知,不知道外面是否有人,即便呼叫也沒有人迴應,而我知道外界信息的方式,只有外面的人在門口把他看到的聽到的都告訴我,我才能夠得知。
例子雖然不太恰當,但智能合約就像這個例子中的我同樣,它不管什麼時候何地,都沒法主動向外尋求信息,只能外部把消息或數據給到裏面。而預言機就是這個在外面輸送消息和數據的人。
好像這麼看來,智能合約並非很智能呀,是的,智能合約實際上是完成的不智能的事情,即寫好了條件和結果,當給它條件的時候,就能夠觸發,但也不會立刻執行,還須要合約相關的人進行私鑰簽署才能夠執行。
因此,網上不少文章其實都有水分,好比智能合約某個時間或者觸發某個條件就能夠自動執行之類的,只能說這樣的句子在邏輯上多是有問題的。關於預言機的不少文章也有水分,描述的並不許確。
好了,上面就是區塊鏈爲何須要預言機,由於智能合約沒法主動去獲取鏈外的數據,只能被動接受數據。
這是理想中預言機的工做流程,即用戶的智能合約把請求給鏈上 Oracle 合約,經過鏈下的 API 接口得到外部數據,更確切的說是外部把數據給鏈上的 Oracle 合約,而後 Oracle 合約再把數據給用戶的智能合約。
或許很難理解,由於在互聯網中,調用數據是很是容易的,只須要在程序中寫調用的代碼就能夠了。可是區塊鏈與外部世界的數據交互,確實不能進行這樣的操做。
預言機做爲區塊鏈與現實世界進行數據交互的橋樑,應用場景很是多,能夠說一切須要與鏈下進行數據交互的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—區塊鏈與現實世界的紐帶》。
目前在預言機領域探索的項目還不是不少,每個項目的預言機解決方案都略有差別,我找了幾家不一樣解決方案的預言機項目。
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 落地。