什么是预言机?

预⾔机(oracle mechanism)是⼀种将区块链外信息写⼊区块链内的机制,在保险、金融、物联网等各个场景中已经开始展现出其价值。常⻅的预⾔机有两类,⼀是依赖某⼀中⼼化信息源,⼆是将区块链外信息离散化后⽤经济激励和投票写⼊区块链。这两类预⾔机各有利弊:中⼼化的预⾔机依赖信息源单⼀;去中⼼化的预⾔机则隐含参与投票的群体投票时不存在系统偏差,这个假设在现实中则不⼀定成⽴。

长安链·预言机v1.0.0_alpha版本是⼀种中⼼化的可分布式部署的预⾔机,是长安链系统中打通链下链上数据、构建全链条可信价值生态的重要工具。

⽤⼾可以通过智能合约调⽤来获取链下的接⼝数据、指定的数据库数据、VRF(可验证随机数数据)以及借助智能合约做跨链数据的查询,同时也提供了注册查询topic/按照topic查询的功能以简化⽤⼾使⽤。

 设计与实现 

整体流程

⽤⼾在智能合约中调⽤预言机智能合约中的取数据⽅法,预言机智能合约校验相应参数,发送相应的链事件;

预言机服务监听到链上取数据事件,根据合约中指定的取数据配置,进⾏数据的获取;

预言机服务将取到数据通过调⽤预言机智能合约⽅法来将数据回传,预言机智能合约通过回调⽤⼾智能合约告知⽤⼾数据取到,⽤⼾合约做相应业务处理即可。

预⾔机整体流程

预⾔机智能合约设计

预⾔机功能由预言机智能合约提供接⼝的⽅式来实现,用户智能合约通过调⽤接⼝来获取数据。为⽅便⽤⼾使⽤,系统提供了复杂查询的订制化功能,可以由管理员来进⾏查询的订制,简化普通⽤⼾的查询。

预⾔机智能合约交互

预⾔机服务设计

预言机服务整体可以分为四个模块,由监听到的链上预言机智能合约事件进⾏驱动,各个模块配合运⾏完成取数据功能,服务将运⾏中所需数据保存到本地的mysql数据库中。

四个模块如下:

  • 1. 预⾔机状态流转模块;

  • 2. 取数据模块;

  • 3. 预⾔机接⼝模块;

  • 4. 预⾔机告警模块。

预⾔机Server结构

预⾔机表设计

预言机服务将服务运⾏所需数据存储到了mysql数据库中。

  • 合约表(oracle_contracts)主要记录通过接⼝安装的预⾔机合约信息。合约的安装、升级都会写⼊到表中。预言机服务监听链上的事件需要提供序号,因此在预言机服务处理完相关事件后,也会将事件序号的变化更新到表中;

  • 事件状态表(event_state)记录了从链上监听事件到整个事件流转完整的各个阶段;

  • 预言机取数据返回值存储表(event_result)存储了预⾔机取到的数据结果;

  • 事件锁表(event_lock)⽤于协调多个预言机服务实例进⾏⼯作;

  • vrf表格(vrfs)记录了vrf的公钥和私钥信息,其中srv_name为唯⼀索引(系统写的)。多个实例如果连接到同⼀个mysql实例,那么他们共享同⼀个vrf公私钥,各个实例⽣成vrf是⼀致的。

1. 预⾔机状态流转模块

预言机服务监听事件,取数据,回传数据到链上整个流程抽象成为⼀个有限状态机来进⾏实现,状态迁移如下图:

预⾔机内部状态流转

2. 取数据模块

预言机服务可以⽀持四种取数据模式。通过解析指定的查询需求,实例化相应的接⼝实现类取数据。

  • ⽀持通过http接⼝取xml,json,html类型数据;

  • ⽀持通过mysql数据源取数据;

  • ⽀持跨链(⻓安链)调⽤链上合约查询数据;

  • ⽀持vrf数据取/验。

取数据模块

3. 预⾔机接⼝模块

预言机服务的接⼝模块提供两种类型的接⼝。两类接⼝分别都有token验证(token为服务配置中的对应项)。

  • 安装、升级预⾔机合约接⼝token配置项目为smart_oracle.yml文件中httpServer对象的admin_token;

  • 辅助开发接⼝,⽤于查看通过预⾔机可以取的数据样式(不借助智能合约,⽅便开发测试)token配置项目为smart_oracle.yml文件中httpServer对象的assist_token;

api接⼝模块

 结    语 

长安链·预言机v1.0.0_alpha版本是⼀种中⼼化的可分布式部署的预⾔机,为⻓安链获取链外数据提供了⼀个桥梁,可以将现实世界的数据准确无误的写入到区块链上,应用场景非常广泛。

下面是预言机使用文档,期待⼤家的使⽤与反馈。

设计⽂档详情:https://docs.chainmaker.org.cn/tech/%E9%A2%84%E8%A8%80%E6%9C%BA%E6%9C%8D%E5%8A%A1.html?highlight=%E9%A2%84%E8%A8%80%E6%9C%BA

使⽤⽂档详情https://docs.chainmaker.org.cn/operation/%E9%A2%84%E8%A8%80%E6%9C%BA%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.html?highlight=%E9%A2%84%E8%A8%80%E6%9C%BA

RECOMMEND

推荐阅读

长安链ChainMaker 交易池交易防重优化

长安链交易防重之布谷鸟过滤器

BigFilter全局交易防重组件的介绍与应用

Tips

更多长安链开源项目QA,可登录开源社区、技术文档库查看。

下载源码

https://git.chainmaker.org.cn/chainmaker/chainmaker-go

查阅文档

https://docs.chainmaker.org.cn/

长安链ChainMaker案例征集

http://www.wenjuan.com/s/UZBZJvhFGte/

“长安链ChainMaker”是国内首个自主可控区块链软硬件技术体系,由微芯研究院联合头部企业和高校共同研发,具有全自主、高性能、强隐私、广协作的突出特点。长安链面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案,为长安链生态联盟提供强有力的区块链技术支撑。取名“长安链”,喻意“长治久安、再创辉煌、链接世界“。

打通链上链下,构建全链条可信价值生态—长安链预言机相关推荐

  1. 中国工程院院士陈纯:链上链下数据协同技术是联盟链发展的重要方向(全文)...

    "联盟链是目前中国最具实际应用前景的技术." 本文旨在传递更多市场信息,不构成任何投资建议. 火星财经APP(ID:hxcj24h)一线报道,10月11~13日,由中国计算机学会主 ...

  2. 长安链ChainMaker的多链隔离设计

    在联盟链场景,一般一个节点对应一个参与方,一条链对应一类业务.当一个参与方有多个业务要上链,就需要采用多链方式去部署,一方面可以复用节点,另一方面可以做到业务的隔离. 长安链支持多链方式部署.如果同一 ...

  3. 微众银行开源联盟链可信预言机Truora,搭建数据可信上链桥梁

    在区块链应用中,大家往往希望业务逻辑可以尽可能在智能合约上自动执行,以降低信任成本,实现业务流程智能化和自动化.因此,智能合约需要将更多互联网世界的数据上链,以满足复杂多变的应用场景.由于区块链共识机 ...

  4. 区块链的下一个机会不是ICO2.0,而是ERC-721

    区块链漂浮起来的时候整个社会群体狂热了. 最初这是由一群极客筑起的伊甸园,却逐渐归于一个关于财富.欲望.野心.权利.焦虑的人间大戏,在这个数字世界里穿越了财富阶级,穿越了人们获取财富的时间路径.穿越了 ...

  5. 通过预言机获取任意链下数据 - Chainlink Any API 代码解析

    智能合约对链下数据的兼容会大大增加开发复杂度,Chainlink 通过 AnyAPI 使开发者的智能合约可以通过去中心化预言机网络(Decentralized Oracle Network:DON)获 ...

  6. 长安链---从零到一部署Chainmaker-2.0.0

    长安链部署 简介 长安链·ChainMaker具备自主可控.灵活装配.软硬一体.开源开放的突出特点,由北京微芯研究院.清华大学.北京航空航天大学.腾讯.百度和京东等知名高校.企业共同研发.取名&quo ...

  7. 预言机或成补齐DApp爆发的最后一片拼图? |链捕手

    DApp市场经历过高峰和低谷,虽涌现出几款不错的应用产品,但距离DApp开发者曾畅想的「去中心化」应用场景仍距离颇远,甚至更残酷的现实是--上千种DApp无人问津,市场尚处蓝海,却是一片落寞. 链捕手 ...

  8. 公益领域:长安链ChainMaker在全民义务植树中的应用实践

    背景介绍 "全民义务植树"活动,在我国已经有40余年的历史.而"互联网+全民义务植树"的成型,及其正式纳入全国义务植树尽责体系,预示着全民义务植树正进入一个崭新 ...

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

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

最新文章

  1. 使用 Pytorch 进行多类图像分类
  2. 清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!...
  3. 如何让一种币更有生命力——一种BCH开发资金募集方案大讨论
  4. dao层和service层和control_maven分模块构建SSM普通web项目:service层代码编写
  5. ASP.NET MVC中实现多个按钮提交的几种方法
  6. 错误请联系管理员文件 index.php,ThinkPHP5框架在写项目过程中遇到的相关问题,以及前端问题-Go语言中文社区...
  7. android cts 编译,使用 Android studio 分析运行 CTS 用例
  8. JS基础之undefined与null的区别
  9. 19级、20级:班级日常分享,一天一瞬间
  10. 从JS敏感信息泄露到GETSHELL
  11. Nova 组件详解 - 每天5分钟玩转 OpenStack(26)
  12. python 类和对象 有必要学吗_类与对象-python学习19
  13. 极品五笔在非管理员权限下无法使用的问题
  14. matlab鲍威尔方法求函数,基于MATLAB的鲍威尔法求极值问题.doc
  15. CANalyzer添加dbc文件
  16. winrara注册文件
  17. 计算机软件期刊是不是中文核心,2020计算机测量与控制是什么期刊_计算机测量与控制是核心期刊吗_计算机测量与控制官网...
  18. 艾萨克·阿西莫夫《日暮》
  19. python-tkinter使用方法——转载(二)
  20. 长沙公积金和商贷组合贷款

热门文章

  1. 七大设计原则之接口隔离原则
  2. gmsl摄像头Android平台调试思路
  3. 苹果怎么取消微信订阅服务器,教程:取消微信免密支付授权功能设置
  4. 数据库中视图与表的区别以及如何创建视图、创建表
  5. C语言所有头文件整理
  6. this.$set is not a function
  7. python re.compile() 详解——Python正则表达式
  8. 二叉树后序遍历非递归算法(详解)
  9. DC-DC开关电源 拓扑结构(BUCK BOOST BUCK-BOOST)电路
  10. SEO写作,小白如何快速写一篇高质量SEO文章