预言机 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

什么是区块链预言机(BlockChain Oracle)相关推荐

  1. 蚂蚁区块链第18课 区块链预言机(ORACLE)的定义及在蚂蚁BAAS中的使用

    1,摘要 本文主要讲解外部预言机ORACLE定义和原理,并讲解蚂蚁BAAS系统如何通过ORACLE预言机方式使用外部数据源的方法. 2,外部预言机ORACLE定义和原理 2.1 预言机(Oracle) ...

  2. 区块链预言机(4)内在机制

    1. 内在机制 1.1 step说明 step1:A requester creating a smart contract specifying the data required to trigg ...

  3. 去中心化区块链预言机

    "区块链预言机(Blockchain Oracles)"概念的提出主要是为了解决区块链协议自身存在的局限性:(区块链)这种去中心化的网络(包括在其上构建的应用/ 智能合约)不能与外 ...

  4. 区块链预言机(5)预言机原理

    1. 趣链预言机架构 预言机一般会作为区块链的一个独立模块或第三方服务与执行引擎进行交互.预言机只负责数据的可信获取,不直接参与交易的执行. step1. 用户通过合约调用的形式(也可以通过特殊的AP ...

  5. 区块链预言机(3)关键点说明

    1. 预言机类型 1.1 根据数据源来区分,有几种类型: 软件预言机 即通过API从第三方服务商或者网站获取数据,来作为智能合约的输入数据.最常用的如天气数据.航班数据.证券市场数据等等. 硬件预言机 ...

  6. 区块链预言机 Chainlink 测试环境部署与使用/探索区块链预言机的实现原理

    Chainlink 什么是预言机:在区块链领域,预言机被认为是可以为区块链智能合约提供外部数据源的系统. Oraclize项目:中心化预言机. Chainlink项目:非中心化预言机. 部署步骤 部署 ...

  7. 区块链预言机(2)预言机概念

    1. 概念 预言机的功能就是将外界信息写入到区块链内,完成区块链与现实世界的数据互通.它允许确定的智能合约对不确定的外部世界作出反应,是智能合约与外部进行数据交互的唯一途径,也是区块链与现实世界进行数 ...

  8. 【区块链 | 预言机】价格预言机的使用总结(三):UniswapV3篇

    前言 前面两篇文章分别讲解了 Chainlink 和 UniswapV2 的 TWAP.Chainlink 属于链下预言机,其价格源取自多个交易所,但所支持的 token 比较有限,主要适用于获取主流 ...

  9. 区块链预言机(1)初识API网关

    1. 概念介绍 1.1. 业务简单,不用网关也能解决 1.2 API Gateway很好的解决了微服务下调用.统一接入等问题,如下图所示: 1.3 网关与代理的区别: 代理 纯粹的数据透传,协议不会发 ...

最新文章

  1. 为什么工厂模式可以解耦?(一)
  2. 艰难就业季,2020 AI算法岗春招汇总 面经大全来了!!!
  3. 向量图兼容组件VectorCompat
  4. python乘法口诀表-用python打印99乘法口诀表
  5. java 将要死亡_人在即将死亡的时候,能意识到自己将要死亡了吗?科学家给出答案...
  6. 企业级应用架构(一) 三层架构之解耦
  7. atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质
  8. 绿联网卡转接mac设置_绿联外置网卡Mac os 11.0 Big Sur驱动方案来了
  9. [随笔所想] 沉痛悼念开发技术专家毛星云老师
  10. spring cloud - 概述
  11. 如何利用jqGrid表格方法重新设置caption属性值
  12. #新学期,新FLAG#飞翔的小野猪
  13. 光子晶体中的平面波展开法学习
  14. Mixed mode assembly is built against version 'v1.1.4322' of the runtime and...问题——C# DirectXSound
  15. 【Wifi模块】使用基于CP2102のWifi模块连接阿里云
  16. matlab计算器设计流程图_matlab计算器的设计.doc
  17. 2022“杭电杯”中国大学生算法设计超级联赛(4)
  18. 500 - 内部服务器错误. 您要查找的资源有问题,无法显示.,HTTP 500 - 内部服务器错误 Internet Explorer【转】...
  19. 性能测试之Jmeter中如何设置参数化数据
  20. 机器学习笔记之学习率(learning rate)与过拟合(overfitting)

热门文章

  1. 8位可控加减法器_自主可控:QTouch在军工道系统上的应用
  2. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波16 - 锐化高通滤波器 - 钝化掩蔽和高提升滤波
  3. python生成日历_使用Python实现简易月历生成(2)
  4. 数据结构与算法6—树
  5. Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
  6. 前后端交互中,返回前端的自定义响应数据结构
  7. c#和WIN32 调用
  8. oracle数据库扩展目录,Oracle 扩充磁盘空间
  9. STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)
  10. python实现50行代码_50行Python代码,教你获取公众号全部文章