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

預言機 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 落地。

轉載于:https://juejin.im/post/5c236f456fb9a049c965b9e4

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea tomcat啟動成功但是訪問方面都是404_IDEA相關配置【集成Tomcatamp;項目部署】...

“知其然知其所以然”始終是Brick我學習新興技術的出發點,那么咱們來聊聊以下幾個問題問題1:在編寫完web項目之后,我們怎么才能運行項目呢?--需要部署項目到Tomcat上。問題2:部署項目到Tomcat服務器有多少種方式&#…

程序員素質面試題

技術題做完后,先檢查技術是否合格,技術合格的并非就一定是合適人選,還要做素質面試。 如下是小y出的面試題: (上進心)1.你的職業規劃是怎樣的,未來兩年想朝哪個方向發展? &#xff0…

用U盤或移動硬盤安裝Windows7 (超簡單制作Win7安裝U盤方法)

轉載鏈接:http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安裝 Windows7 ,下載回去后的ISO鏡像文件很多人都是使用 Nero 或 IMGBurn 等工具刻錄成光盤來安裝的。但實際上,不需刻盤安裝Win7的方法還是有不少的。…

安裝pywin32時:ImportError: DLL load failed: %1 不是有效的 Win32 應用程序和 DLL load failed...

問題一:ImportError: DLL load failed: %1 不是有效的 Win32 應用程序 import pywinapi報錯:ImportError: DLL load failed: %1 不是有效的 Win32 應用程序 原因:與python版本不對應 pypi官網上下載whl文件,我的python 版本為27 下載第一個后安裝 下載文…

pointcut注解_Spring AOP使用指南,詳細了解AOP相關注解

Spring AOP 指導教程什么是Spring AOP spring aop可以在spring構建的系統中使用面向切面編程。當然Spring Boot也是基于Spring構建的。使用AOP可以實現諸如事務,日志以及安全校驗等通過切面統一完成的任務。他可以通過簡單的注解方式實現在方法執行前后來執行你自己…

C# 實現FTP上傳與下載

向FTP服務器下載文件的簡單實例 Codestring filePath "d:\\"; string fileName "lhking.txt"; //文件下載之后要保存的路徑和文件名 FtpWebRequest reqFTP; try { FileStream outputStream …

Linux源碼安裝mysql 5.6.12(cmake編譯)

轉載鏈接:http://www.2cto.com/database/201307/229260.html Linux源碼安裝mysql 5.6.12(cmake編譯)1.安裝make編譯器(默認系統自帶)下載地址:http://www.gnu.org/software/make/[c-sharp] tar zxvf make-3.82.tar.gz cd make-3.…

云棲專輯 | 阿里開發者們的第6個感悟:享受折磨

2015年12月20日,云棲社區上線。2018年12月20日,云棲社區3歲。阿里巴巴常說“晴天修屋頂”。在我們看來,寒冬中,最值得投資的是學習,是增厚的知識儲備。所以社區特別制作了這個專輯——分享給開發者們20個彌足珍貴的成長…

python刪除數據庫的數據完整代碼_利用python操作小程序云數據庫實現簡單的增刪改查...

不止python,你可以利用任何語言那實現通過http請求來操作你自己的小程序云數據庫了背景也是在最近吧,小程序更新了云開發 HTTP API 文檔,提供了小程序外訪問云開發資源的能力,使用 HTTP API 開發者可在已有服務器上訪問云資源&…

AI技術在智能海報設計中的應用

背景 在視覺設計領域中,設計師們往往會因為一些簡單需求付出相當多的時間,比如修改文案內容,設計簡單的海報版式,針對不同機型、展位的多尺寸拓展等。這些工作需要耗費大量的時間、人力成本(5~6張/人日)&am…

javaScript如何監聽瀏覽器關閉事件

轉載鏈接:http://www.cnblogs.com/Tim_Liu/archive/2010/11/09/1872596.html 最近寫東西的時候發現需要對瀏覽器的關閉進行監聽,當用戶關閉的時候需要調用session.invalid();清空session信息,但是仔細一查手冊發現無論是body還是window都沒有onclose事件,之后onload…

C++樹的實現

C樹的實現 STL里面沒有提供容器樹的模板實現&#xff0c;自已寫一個&#xff1a;Tree.h //tree.h 頭文件 #include <list> #include <algorithm> using namespace std; struct TreeNode; //定義一個結構體原型 classTree; //定義一個類原型 classIterator; //定義一…

加密文件忘記密碼怎么解密_MyBatis 配置文件 用戶密碼加密存儲

properties配置文件一般是使用properties保存配置文件內容,然后在mybatis配置文件中進行讀取在resource文件下新建db.properties文件內容如下# 數據庫配置文件 driver com.mysql.cj.jdbc.Driver url jdbc:mysql:// /mybatis username password 然后,接著把文件放入源碼包…

PHP,如何防止同一用戶同一時間多次登錄

轉載鏈接&#xff1a;http://blog.sina.com.cn/s/blog_4832ea590101djnp.html PHP&#xff0c;如何防止同一用戶同一時間多次登錄&#xff1f; 創建表 username password sessionId 張三 123456 ksw9dkw9ksl92w3 備注&#xff1a;用戶…

科技前沿智能創新 2019北京智能家居 全屋智能博覽會

2019北京智能家居大型展覽會 2019北京全屋智能家居博覽會報道布展&#xff1a;2019年6月26日-27日 展會開幕&#xff1a;2019年6月28日上午9&#xff1a;00時展會交易&#xff1a;2019年6月28日-30日 展會撤展&#xff1a;2019年6月30日下午14&#xff1a;00時 展覽會在北京市政…

java 容器_我也來聊聊,JAVA容器與迭代器

java的容器與迭代器是一個老生常談的話題了。本文旨在與大家分享一些關于雙向鏈表與迭代器的運用小技巧&#xff0c;并希望本篇文章的內容能夠在項目中給你帶來幫助。Stack與LinkedListStack是一個LIFO(后進先出)的容器。若要在java中定義一個Stack應該怎么辦&#xff1f;也許你…

VS2005調試時變慢解決辦法

vs2005生成代碼以及調試運行時&#xff0c;如果設置斷點系統運行非常緩慢&#xff0c;從網上查閱一些資料后解決&#xff1a; 主要解決辦法是&#xff1a; 打開VS2005菜單項"工具"---->"導入導出設置"----->"重置所有設置" 本文參考:http:…

apache目錄的訪問控制

轉載鏈接&#xff1a;http://blog.sina.com.cn/s/blog_7be8a2150100trml.html 1.根目錄的訪問控制 DocumentRoot "/var/www/html" <Directory /> Options FollowSymLinks AllowOverride None </Directory> 解釋一下&#xff1a; <Dir…

廣東高院駁回快播對深圳市場監管局2.6億罰款案上訴

雷帝網 樂天 12月29日報道據廣東高院官方微信消息&#xff0c;廣東省高級人民法院對深圳市快播科技有限公司&#xff08;簡稱快播&#xff09;訴深圳市市場監督管理局&#xff08;簡稱市場監管局&#xff09;著作權行政處罰糾紛案作出終審宣判&#xff0c;駁回上訴&#xff0c;…

【Vegas原創】恢復Oracle Package的笨方法

imp沒有恢復package的參數&#xff0c;所以&#xff0c;只能用笨辦法&#xff1a;rowsn&#xff0c;只導入表結構和物件。 步驟&#xff1a; 1&#xff0c;dbca新建一個test數據庫&#xff1b; 2&#xff0c;新增user&#xff0c;表空間&#xff0c;給user賦予權限 3&#xff0…