草庐IT

区块链知识系列 - Oracle预言机

搬砖魁首 2024-01-03 原文

Oracle 预言机

区块链外信息写入区块链内的机制,一般被称为预言机(oracle mechanism)。

借助预言机外界的数据得以灌入链内, 使得DApp的玩法更多样. 比如DApp倚重的随机数, 可以考虑让一个硬件产生真随机数, 通过Oracle,定时灌入, 这将更公正和安全

1 为什么需要预言机

  • 所有节点同一个事务中智能合约运行的结果必须一致
  • 智能合约不应该发起网络调用
  • 由于区块链的共识模式,智能合约只可以从内部调取数据,而不能直接从区块链外部(链下)获取信息。

2 应用场景

  • 游戏/预测:获取链上安全的随机数,实现更公平的游戏,抽奖场景。
  • 物联网:对于IOT应用,将传感器信息上链,智能合约验证并触发下一步的行为。
  • 供应链金融:获取链下订单和汇率信息等。

3 按去中心化程度分

3.1 中心化预言机

靠部署机构本身来背书,比如BSN部的,都是可信的

  • Oraclize:为以太坊提供中心化预言机服务
  • Ontology oracle:本体链上的中心化预言机服务

3.2 去中心化预言机

区块链预言机是一个附加的基础设施,它可以帮助区块链和外部世界进行交互。但是,为了让智能合约保持去中心化,预言机也需要保持去中心化来避免任何单点故障,尤其因为预言机的输入控制着智能合约的输出。

  • ChainLink:以太坊上第一个去中心化预言机解决方案
  • 欧链 OracleChain:EOS 上的第一个去中心化预言机解决方案
  • DOS Network:支持多条主流公链的去中心化预言机服务网络

4 按链分

4.1 公链预言机

4.1.1 ChainLink (ETH)

github

Chainlink 是区块链领域运用最广泛的预言机解决方案。Chainlink 是一个去中心化的预言机网络,为区块链智能合约解决互操性问题,并将其安全连接至链下数据源、Web API 和传统银行支付系统。

通过事务事件来广播对外部数据的需求,然后,侦听此类事件的外部方会收到请求通知,并获取所请求的数据,最后通过以下方式将其发送到链中:通过交易调用智能合约。

4.1.2 OracleChain (EOS)

4.2 联盟链预言机

4.2.1 Truora (Fisco / BSN)

  1. 指定要获取数据的URL(权威的,支持Https的)
  • 云数据库
  • IPFS
  • 引入的可信数据源
  • 多数据源
    • 数据聚合
      • 链上聚合:通过智能合约对多数据源进行 求和,求平均,求中位数等
      • 链下聚合:多个数据源的预言机对数据进行门限签名(BLS),减少相同的数据重复上链
  1. 回写到链上
  • 硬件:TEE(可信执行环境)
  • 软件:TLS技术

4.2.2 ChainLink (Kaleido)

4.2.3 蚂蚁BAAS的外部预言机

https://cloud.tencent.com/developer/article/1415307

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

5 关键技术探讨

5.1 基干TLS自证清白

  • 预言机得将与目标URL建立TLS过程中的握手连接细节上链,链上验证确实是从目标URL获取数据的

  • TLS改造,向应用层暴露TLS握手连接的细节

需要证明确实是到目标URL获取的数据,request与response都需要证明

5.2 TSL介绍

5.3 TLS证明技术

TLS-Notary

https://tlsnotary.org/index.html

主要基于安全传输层协议TLS 1.1,TLS用于在两个通信应用程序之间提供保密性和数据完整性,最大优势就在于独立于应用协议,更高层协议可以透明地分布在 TLS 协议上面

  • 三方握手 - 涉及三方密钥交换
    • 在整个传输中,TLS的master key可以分成三个部分:服务器方、受审核方和审核方;在整个流程中,互联网数据源作为服务器方,预言机(oracle)作为受审核方,一个专门设计的,部署在云上的开源实例作为审核方,每个人都可以通过这个审计方服务对预言机(oracle)过去提供的数据进行审查和检验,以保证数据的完整性和安全性。
    • TLS中客户端的会议密钥由受审核方和审核方共同产生
  • 需要审核方的参与,受审核方才能恢复出服务器方的response信息

弊端:

TLS-N

类似 默克尔树

DECO

用到三方DH握手, 两方安全计算,零知识证明

6 使用预言机的流程

预言机的工作流程,即用户的智能合约把请求给链上 Oracle 合约,通过链下的 API 接口获得外部数据,更确切的说是外部把数据给链上的 Oracle 合约,然后 Oracle 合约再把数据给用户的智能合约。

  • 用户方

    • ConsumerOracle是用户的合约,继承具有Oracle功能的FiscoOracleClient合约父类即可,实现接口
    • 用户向ConsumerOracle合约传入URL
  • 服务方

    • 部署一个OracleCore合约
    • 部署一个后台服务OracleService(Java)
      • 监听链上OracleCore事件
      • 解析参数
      • 调用URL从互联网获取数据
      • 回写到OracleCore
      • OracleCore再回写到用户合约(通过父类的抽你接口回调子类)

本质就是:事件监听和合约回调


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

有关区块链知识系列 - Oracle预言机的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  6. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  7. ruby - 从结束值创建一系列字符串 - 2

    我使用irb。下面是我写的代码。“斧头”..“bc”我期待"ax""ay""az""ba"bb""bc"但结果只是“斧头”..“bc”我该如何纠正?谢谢。 最佳答案 >puts("ax".."bc").to_aaxayazbabbbc 关于ruby-从结束值创建一系列字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617092/

  8. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  9. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  10. 如何判断oracle是否启动及启动oracle数据库 - 2

    plsql连接Oracle超时,完犊子了肯定是服务器断电了。得马上检查Oracle服务器状态1、检查数据库是否启动su-oracle切换到Oracle用户,输入sqlplus/assysdba显示连接状态。如果末尾显示的状态是Connectedtoanidleinstance.证明未启动2、启动数据库startup启动数据库,末尾出现Databaseopened说明数据库启动成功3、查看数据库监听是否正常先quit;断开Oracle连接,使用lsnrctlstatus查看监听状态,如果出现TNS-开头的Nolistener、Connectionrefused等错误,说明监听未启动4、启动数据库

随机推荐