预言机(Oracle)

文章目录

  • 一、概述
    • 1.1、为什么需要
    • 1.2、应用场景
    • 1.3、现有的预言机产品
    • 1.4、基本原理
  • 二、蚂蚁区块链 BaaS 平台–外部数据源服务
  • 三、主流预言机:Oraclize
    • 3.1 使用举例
    • 3.2 数据源
    • 3.3 收费
    • 3.4 真实性:
    • 3.5 解析助手
    • 3.6 加密查询
    • 3.7 原理
  • 四、参考

一、概述

受限于区块链的共识模型,智能合约只能调用内部合约,无法直接与外部系统进行交互。将智能合约与外部系统打通,有助于区块链技术更进一步扩展应用场景。

区块链预言机(Oracle)是区块链与外部世界交互的一种实现机制,它在区块链与外部世界间建立一种可信任的桥接机制,使得外部数据可以安全可靠地进入区块链。

1.1、为什么需要

区块链上的智能合约和去中心化应用(Dapp)对外界数据拥有交互需求
当智能合约的触发条件取决于区块链外信息时,这些信息需先写入区块链内记录。此时需要通过此机制来提供这些区块链外的信息

1.2、应用场景

适用于以下任意场景:

  • 智能合约需要可信访问 Web 数据。
  • 智能合约通过调用 Open API 使用互联网服务。
  • 智能合约需要与外部系统交互。
  • 智能合约依赖公共现实事件,如天气、赛事信息、航班信息等。

具体的:

金融衍生品交易平台
衍生品交易平台提供金融类的智能合约,允许用户做空或者做多背后的资产,例如Market Protocol, Decentralized Derivatives Association, DyDx Protocol 等都提供类似的服务。这类智能合约需要实时从链外获取资产价格,来确定参与各方的收益和损失,以及触发平仓交易等。

稳定货币
稳定货币是一种和法币有稳定兑换率的加密货币,稳定货币可以作为价值的储藏和交易的中间媒介,因此又被誉为数字货币世界里的圣杯。 这里的稳定货币并不是指tether或者digix那种由一个中心化机构发行的货币,而应该是一种去中心化的被算法自动控制的加密货币,包括bitUSD, Dai等以加密资产抵押物为基础的稳定货币,和Basecoin, kUSD等以算法银行为基础的稳定货币。所有的稳定货币都需要Oralce的帮助来获取外部世界稳定货币本身和锚定资产的兑换率等数据

借贷平台
SALT Lending, ETHlend等去中心化P2P借贷平台允许匿名的用户用区块链上的加密资产抵押,来借贷出法币或者加密资产。 这类应用需要使用Oracle在贷款生成时提供价格数据, 并且能监控加密抵押物的保证金比率,在保证金不足的时候发出警告并触发清算程序。 借贷平台也能用Oracle来导入借款人的社交和信用和身份信息来确定不同的贷款利率

保险应用
Etherisc正在建立一个高效透明低消耗的去中心化的保险应用平台, 包括航空延误险, 农作物保险等等。用户以ether支付保费,购买保险,并根据保险协议得到自动赔付。Oracle能为这类应用引入外部数据源和事件, 帮助去中心化的保险产品作出赔付的决定,并能安排未来的自动赔付

赌场应用
由于区块链技术保证的透明, 即时的安全转账,以及相对传统线上赌场高达15%的零庄家优势, 涌现了一大批如Edgeless, DAO.Casino, FunFair等去中心化赌场。任何在线赌场游戏的核心是产生不可预测的,可验证的随机数。 但是在链内纯确定性的环境下, 随机数的生成是很困难的。 Oracle可以从链外注入一个安全可靠的无偏的可验证随机熵源给赌场合约使用。

预测市场
去中心化的预测市场比如Augur, Gnosis等等,他们应用了群体的智慧来预测真实世界的结果, 比如总统选举和体育结果竞猜。在投票结果被用户质疑的时候,需要Oracle提供真实的最终结果。
无信任环境下如何验证身份
很多区块链应用需要通过Oracle从链外获取用户的身份数据,信用数据,或者社交媒体数据等。

快递追踪和IoT应用
真实世界中的快递寄送或到达信息可以通过Oracle被传递到链上,触发链上智能合约的自动付款。对于区块链上的IoT应用, 也需要Oracle把链外的传感信息传到链上,让智能合约验证并触发下一步的行为。

1.3、现有的预言机产品

在这里插入图片描述

1.4、基本原理

外部数据源服务在区块链上部署了区块链预言机合约,提供异步查询互联网数据接口供用户合约使用。正常情况下,用户合约调用预言机合约发起查询请求后,预言机合约在 1~3 个区块内就能得到外部数据源服务取回的数据,然后回调用户合约传入数据。
在这里插入图片描述

二、蚂蚁区块链 BaaS 平台–外部数据源服务

参见:https://tech.antfin.com/docs/2/108575

外部数据源服务会在智能合约平台部署一个外部数据源服务合约,用户合约通过调用该服务合约发送外部数据源请求,链下的 TEE 外部数据源服务对接该服务合约,监听用户的请求,然后去对应的外部数据源取数据,最后将结果返回给用户合约。

在这里插入图片描述
智能合约分为:用户合约和预言机合约

在这里插入图片描述

OracleInterface.sol 中定义了用户合约与预言机合约的通信接口,其中用户通过 curlRequest 接口调用预言机合约。用户合约需要实现 oracleCallbackCurlResponse 接口,用于接收预言机合约的请求结果回调。

interface OracleInterface {/*** function: 发送 CURL 请求* parameters:*         _biz_id            :用户自定义的业务请求 ID*         _curl_cmd          :CURL 命令,参考 CURL 命令使用文档进行构造*         _if_callback       :是否需要预言机将请求结果回调用户合约*         _callback_identity :预言机请求结果回调的合约 ID,可以是发送请求的合约,也可以是其他合约*         _delay_time        :该特性未激活,填 0 即可* return value          :预言机请求 ID,是预言机合约为本次请求生成的唯一请求 ID*/function curlRequestDefault(bytes32 _biz_id, string _curl_cmd, bool _if_callback, identity _callback_identity, uint256 _delay_time) external returns (bytes32);/*** function: oracleCallbackCurlResponse* parameters:*         _request_id        :预言机合约请求 ID(在发送请求时预言机合约会返回此 ID)*         _biz_id            : 用户合约的业务请求 ID*         _error_code        :请求结果码,如果值是 0,则表示预言机请求处理成功;如果是其他值,则为请求处理失败,详见合约错误码表*        _resp_status       :HTTP 响应的状态码,一般 200 表示 HTTP 请求处理成功,5xx 表示服务端处理错误,调用者可根据自己的使用场景做判断*        _resp_header       :HTTP 响应的 header,如果 CURL 中指定了要返回 HTTP 响应的 header,则回调时会返回对应的值*        _resp_body         :HTTP 响应的 body*        _call_identity     :发起该请求的合约 ID* return value            : 无*/function oracleCallbackCurlResponse (bytes32 _request_id, bytes32 _biz_id, uint32 _error_code, uint32 _resp_status, bytes _resp_header, bytes _resp_body, identity _call_identity) external returns (bool);
}

三、主流预言机:Oraclize

3.1 使用举例

举例1:查询获得的Json数据(http://api.k780.com/?app=finance.globalindex&inxno=000001&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json),在oraclize query中用 “.result.yesy_price” 可以取到yesy_price数据:

{"success": "1","result": {"inxid": "1","typeid": "hs","inxno": "000001","inxnm": "上证指数","yesy_price": "3136.63","open_price": "3147.05","last_price": "3131.11","change_price": "-5.52","change_price_per": "-0.18%","high_price": "3163.34","low_price": "3128.87","amplitude_price_per": "1.10%","uptime": "2018-04-04 15:34:58"}
}

使用方式如下:

pragma solidity ^0.4.21;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";contract oraclizeJson is usingOraclize{event logString(string);event logUint(uint);string public str = strConcat("http://119.28.70.201:8792/getprice/?index=","DJI","&date=",uint2str(17623));function strConcat(){// oraclize解析json数据bytes32 queryId = oraclize_query("URL", "json(http://api.k780.com/?app=finance.globalindex&inxno=000001&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json).result.yesy_price");       }function __callback(bytes32 myid, string result, bytes proof) public{emit logString(result);uint i = parseInt(result,3); //string to uint转换,emit logUint(i+1);}
}

举例2:查看Youtube某个视频的观看人数

/*Youtube video viewsThis contract keeps in storage a views counterfor a given Youtube video.
*/pragma solidity ^0.4.0;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";contract YoutubeViews is usingOraclize {string public viewsCount;event newOraclizeQuery(string description);event newYoutubeViewsCount(string views);function YoutubeViews() {update();}function __callback(bytes32 myid, string result) {if (msg.sender != oraclize_cbAddress()) throw;viewsCount = result;newYoutubeViewsCount(viewsCount);// do something with viewsCount. like tipping the author if viewsCount > X?}function update() payable {newOraclizeQuery("Oraclize query was sent, standing by for the answer..");oraclize_query('URL', 'html(https://www.youtube.com/watch?v=9bZkp7q19f0).xpath(//*[contains(@class, "watch-view-count")]/text())');}}

3.2 数据源

Orcalize的数据源有:

  • URL:互联网中的连接。
  • computation:它允许抓取应用的链下执行结果。在退出前,该应用必须在最后一行打印查询结果(在标准输出栏)
  • nested:nested数据源是一个元数据源,它不提供访问其他服务的权限。它用来提供简单相加逻辑,允许单个查询在任何可用数据源的基础上进行子查询,并产生一个单独字符串作为结果。
  • IPFS:文件传输系统中的数据
  • blockchain:blockchain数据源允许用户访问其他区块链的数据。可以提交给blockchain 数据源的查询包括bitcoin blockchain height、litecoinhashrate、bitcoin difficulty、1NPFRDJuEdyqEn2nmLNaWMfojNksFjbL4S balance等
  • WolframAlpha:WolframAlpha是开发计算数学应用软件的沃尔夫勒姆研究公司开发出的新一代的搜索引擎,能根据问题直接给出答案的网站,于 2009年5月15日晚7点(美国中部当地时间,北京时间5月16日上午8点)提前上线,用户在搜索框键入需要查询的问题后,该搜索引擎将直接向用户返回答案,而不是返回一大堆链接。

3.3 收费

在这里插入图片描述

3.4 真实性:

Oraclize提供了的TLSNotary Proof来证明返回的结果是没有经过任何人修改的。TLS是一个网络传输协议,利用可信机构颁发的CA来保证传输正确。TLSNotary是TLS的改进,能够证明Oraclize提供给合约的数据就是某个特点时间点的正确数据。

参见:https://github.com/Oraclize/proof-verification-tool

3.5 解析助手

HTTP请求返回的结果可以是HTML、JSON、XML或二进制等格式。在Solidity中,解析结果是很困难的,且代价很高。Oraclize提供了解析助手,在服务端上处理解析,最终得到的结果就是用户需要的那部分。

3.6 加密查询

为了满足一些场景:比如用户不想暴露自己的查询地址,参数等信息。Oraclize提供了一个加密查询的方法。

参见:https://github.com/Oraclize/encrypted-queries

3.7 原理

Oraclize在以太坊上部署了一个名为usingOraclize的智能合约,如果需要其数据访问服务,只需要在自己的智能合约中引用该智能合约,然后根据API文档中描述的方法进行相关的调用即可。

在这里插入图片描述

四、参考

  • Oraclize:https://provable.xyz/
  • 去中心化的预言机:全面概览:https://medium.com/@liyunlong518/去中心化的预言机-全面概览-2487b5d97926
  • 什么是区块链预言机(BlockChain Oracle):https://juejin.im/post/5c236f456fb9a049c965b9e4
  • 区块链落地的必需工具——预言机(Oracle):https://blog.csdn.net/weixin_43761479/article/details/85067727

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30097.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第147篇 笔记-预言机(Oracle)

定义:区块链预言机是将区块链连接到外部系统的实体,从而使智能合约能够基于现实世界的输入和输出执行。 预言机为分散的 Web3 生态系统提供了一种访问现有数据源、遗留系统和高级计算的方式。去中心化预言机网络(DON)支持创建混合…

语音识别-TDNN

近来在了解卷积神经网络(CNN),后来查到CNN是受语音信号处理中时延神经网络(TDNN)影响而发明的。本篇的大部分内容都来自关于TDNN原始文献【1】的理解和整理。该文写与1989年,在识别"B", "D&…

语音识别技术对比分析

文章目录 一、语音识别产品对比二、百度语音识别产品1、套餐及价格:2、官网3、调研结果 三、华为语音识别产品四、阿里云语音识别产品1、套餐及价格:2、官网地址3、调研结果 五、腾讯云语音识别产品1、套餐及价格2、官网3、调研结果 六、科大讯飞语音识别…

语音识别SpeechRecognition

语音识别 1. 声音的本质是震动,震动的本质是位移关于时间的函数 Signal: s f(t) 波形文件(.wav)中记录了不同采样时刻的位移 2. 通过傅里叶变换 可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建…

各种情人节,程序员教你5个表白代码,牢牢主抓她的心

刚过完年就来到了一个相当重要的节日:情人节。一个有人欢喜有人愁的节日,虽然对一些单身人士不太友好,但还有不少人都在等这个节日进行表白。毕竟这个日子的成功率会高一些。 情人节少不了送花送礼物,作为一个程序员,…

技术创业者必读:从验证想法到技术产品商业化的全方位解析

导语 | 技术创业之路往往充满着挑战和不确定性,对于初入创业领域的人来说,如何验证自己的创业想法是否有空间、如何选择靠谱的投资人、如何将技术产品商业化等问题都需要认真思考和解决。在「TVP 技术夜未眠」第六期直播中,正马软件 CTO、腾讯…

麦肯锡给CEO的元宇宙指南

ChatGPT突然大张旗鼓地登上全球新闻的头条时,元宇宙似乎如明日黄花般过气了,未来渺茫起来。而麦肯锡的4位合伙人在今年1月给全球CEO们的“元宇宙指南”中强调,“太大元宇宙 ,不容忽视”。《元宇宙日爆》编译了这份指南供企业管理者…

AI大模型只能沦为“锦上添花”吗?

出品 | 虎嗅科技组作者 | 齐健编辑 | 廖影头图 | 虎嗅 “每个人咨询的第一个问题都是:你们在大模型方面做了什么?” 7月8日,2023世界人工智能大会(下称WAIC),一位参展商告诉笔者他的感受。——“大模型”&a…

chatgpt赋能python:Python在Win7上的安装教程

Python在Win7上的安装教程 如果你是一名Win7用户,并且打算开始学习或者使用Python编程语言,那么本文将会为你提供一个简单易懂的Python安装教程。 1. 下载Python 在安装Python之前,你需要先去Python的官方网站(https://www.pyt…

chatgpt赋能python:Python安装两个版本详细教程

Python安装两个版本详细教程 Python是一种广泛使用的编程语言,由于不同版本之间的差异,部分开发者需要同时安装两个不同版本的Python。本篇文章将为大家详细介绍Python安装两个版本的方法。 为何需要安装两个不同版本的Python Python的发行版&#xf…

chatgpt赋能python:使用Python编写的程序如何运行

使用Python编写的程序如何运行 Python是一种高级编程语言,适用于多种应用,例如Web开发,数据分析和人工智能。很多人都知道Python是一种很强大的语言,但是他们可能不知道如何运行Python程序。在这篇文章中,我们将介绍P…

chatgpt赋能python:Python程序运行方法介绍

Python 程序运行方法介绍 在 Python 编程中,了解如何运行程序是非常重要的。本篇文章将介绍 Python 中如何运行程序,以及不同的运行方法及其优缺点。作为一名有10年 Python 编程经验的工程师,我相信这篇文章将对 Python 新手和有经验的开发者…

chatgpt赋能python:Python怎么post请求

Python怎么post请求 Python作为一种高级编程语言,拥有丰富的库和模块来处理各种编程任务。其中,处理网络请求和数据交互是Python非常擅长的领域之一。在Python中,我们可以使用标准库或第三方库的HTTP模块来实现HTTP协议的请求和响应。 本篇…

chatgpt赋能python:Python导入包的完整指南

Python导入包的完整指南 如果你是一个Python程序员,你一定知道模块和包在Python中的重要性。Python中有很多内置的模块和包,但是有时候这些内置模块和包不能满足我们的需求,这时就需要导入外部的模块和包。本文将介绍Python中如何导入包和模…

chatgpt赋能python:Python:如何直接运行?

Python:如何直接运行? 如果你想学习编程,或者已经是一名资深工程师,你一定听说过Python这门编程语言。Python是一门易于学习和理解的语言,被广泛应用于很多领域,例如科学计算、数据分析、Web开发和人工智能…

chatgpt赋能python:Python如何直接运行?一篇详细指南

Python如何直接运行?一篇详细指南 Python是一种高级编程语言,可作为通用编程语言进行使用。它被广泛应用于数据科学,Web开发,人工智能等领域。Python最大的优势之一就是其容易学习和使用。本文的主旨是向大家介绍如何直接运行Pyt…

全国海关分区图(含副厅)

全国海关分区图(含副厅)

美国FBA海运详解:美国FBA海运费用价格有哪些

做亚马逊的人都知道亚马逊FBA虽然利润很高,但成本并不低。除了物流运输成本外,还有一些附加费。根据美国对中国征收关税的产品,将有一定的附加费。大部分产品是不用的,这有一些在列的产品才需要加收FBA空运和FBA海运的产品收附加费…

海关查验会查些什么呢?

海关查柜是会产生一些额外费用的,但这些费用不是海关收取的,而是码头收取的吊柜费、拆柜费等费用,因为是海关查验才有此费用,所以码头一般把这些费用称之为海关查验费,码头会开具正规发票的。 这些查柜费是由SHIPPER来…

海关数据|俄罗斯与中国之间的贸易数据

2022年2月24日至今俄乌战争开始的影响,世界粮食、能源等大宗商品的价格已经出现了明显的波动,进一步加剧了全球通胀的态势。那么俄罗斯与中国之间的贸易又发生了那些变化呢?我们通过贸易动力海关数据系统可以直观的看到2021年01-04月份和2022…