打通链上链下,构建全链条可信价值生态—长安链预言机
什么是预言机?
预⾔机(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”是国内首个自主可控区块链软硬件技术体系,由微芯研究院联合头部企业和高校共同研发,具有全自主、高性能、强隐私、广协作的突出特点。长安链面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案,为长安链生态联盟提供强有力的区块链技术支撑。取名“长安链”,喻意“长治久安、再创辉煌、链接世界“。
打通链上链下,构建全链条可信价值生态—长安链预言机相关推荐
- 中国工程院院士陈纯:链上链下数据协同技术是联盟链发展的重要方向(全文)...
"联盟链是目前中国最具实际应用前景的技术." 本文旨在传递更多市场信息,不构成任何投资建议. 火星财经APP(ID:hxcj24h)一线报道,10月11~13日,由中国计算机学会主 ...
- 长安链ChainMaker的多链隔离设计
在联盟链场景,一般一个节点对应一个参与方,一条链对应一类业务.当一个参与方有多个业务要上链,就需要采用多链方式去部署,一方面可以复用节点,另一方面可以做到业务的隔离. 长安链支持多链方式部署.如果同一 ...
- 微众银行开源联盟链可信预言机Truora,搭建数据可信上链桥梁
在区块链应用中,大家往往希望业务逻辑可以尽可能在智能合约上自动执行,以降低信任成本,实现业务流程智能化和自动化.因此,智能合约需要将更多互联网世界的数据上链,以满足复杂多变的应用场景.由于区块链共识机 ...
- 区块链的下一个机会不是ICO2.0,而是ERC-721
区块链漂浮起来的时候整个社会群体狂热了. 最初这是由一群极客筑起的伊甸园,却逐渐归于一个关于财富.欲望.野心.权利.焦虑的人间大戏,在这个数字世界里穿越了财富阶级,穿越了人们获取财富的时间路径.穿越了 ...
- 通过预言机获取任意链下数据 - Chainlink Any API 代码解析
智能合约对链下数据的兼容会大大增加开发复杂度,Chainlink 通过 AnyAPI 使开发者的智能合约可以通过去中心化预言机网络(Decentralized Oracle Network:DON)获 ...
- 长安链---从零到一部署Chainmaker-2.0.0
长安链部署 简介 长安链·ChainMaker具备自主可控.灵活装配.软硬一体.开源开放的突出特点,由北京微芯研究院.清华大学.北京航空航天大学.腾讯.百度和京东等知名高校.企业共同研发.取名&quo ...
- 预言机或成补齐DApp爆发的最后一片拼图? |链捕手
DApp市场经历过高峰和低谷,虽涌现出几款不错的应用产品,但距离DApp开发者曾畅想的「去中心化」应用场景仍距离颇远,甚至更残酷的现实是--上千种DApp无人问津,市场尚处蓝海,却是一片落寞. 链捕手 ...
- 公益领域:长安链ChainMaker在全民义务植树中的应用实践
背景介绍 "全民义务植树"活动,在我国已经有40余年的历史.而"互联网+全民义务植树"的成型,及其正式纳入全国义务植树尽责体系,预示着全民义务植树正进入一个崭新 ...
- 蚂蚁区块链第18课 区块链预言机(ORACLE)的定义及在蚂蚁BAAS中的使用
1,摘要 本文主要讲解外部预言机ORACLE定义和原理,并讲解蚂蚁BAAS系统如何通过ORACLE预言机方式使用外部数据源的方法. 2,外部预言机ORACLE定义和原理 2.1 预言机(Oracle) ...
最新文章
- 使用 Pytorch 进行多类图像分类
- 清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!...
- 如何让一种币更有生命力——一种BCH开发资金募集方案大讨论
- dao层和service层和control_maven分模块构建SSM普通web项目:service层代码编写
- ASP.NET MVC中实现多个按钮提交的几种方法
- 错误请联系管理员文件 index.php,ThinkPHP5框架在写项目过程中遇到的相关问题,以及前端问题-Go语言中文社区...
- android cts 编译,使用 Android studio 分析运行 CTS 用例
- JS基础之undefined与null的区别
- 19级、20级:班级日常分享,一天一瞬间
- 从JS敏感信息泄露到GETSHELL
- Nova 组件详解 - 每天5分钟玩转 OpenStack(26)
- python 类和对象 有必要学吗_类与对象-python学习19
- 极品五笔在非管理员权限下无法使用的问题
- matlab鲍威尔方法求函数,基于MATLAB的鲍威尔法求极值问题.doc
- CANalyzer添加dbc文件
- winrara注册文件
- 计算机软件期刊是不是中文核心,2020计算机测量与控制是什么期刊_计算机测量与控制是核心期刊吗_计算机测量与控制官网...
- 艾萨克·阿西莫夫《日暮》
- python-tkinter使用方法——转载(二)
- 长沙公积金和商贷组合贷款