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系列