以太坊Oracle系列二:My Oracle
四步驟建立屬於自己的Oracle服務
繼上一篇介紹Oracle的基本運作原理以及手動回覆Query之後,本篇要來演示如何建立一個符合自己需求的Oracle服務,自己動手做的好處除免收手續費之外,最重要的就是安全性,畢竟智能合約處理的是真金白銀,太依賴第三方的資料,風險可能有點高。
本文將實作一個Dice dapp,使用者可以丟一顆有0~1000數字的骰子,結果會由My Oracle服務回傳。系統架構如下圖,總共需要部署三個合約,最後再寫一個nodejs程式來當作MyOracle服務,負責監聽QueryEvent並自動回覆。
My Oracle系統架構
- Oracle合約:架構中最重要的合約,負責接收query後傳送至外界,並指定callback address確保只有自己能將結果回傳。
- OracleResolver合約:主要負責指定部署在鏈上的Oracle,增加系統的便利性。當Oracle更新並重新部署後,會產生一個新的合約地址,管理者只要透過此合約重新指定MyOracle合約地址即可,這樣一來完全不會影響到使用此服務的dapp,如本文中的Dice,一樣可以正常運作。
- UsingMyOracle合約:提供給想要使用MyOracle服務的dapp開發人員,繼承此合約就可以找到OracleResolver,並發送myOracleQuery。
- Dice合約:繼承UsingMyOracle合約的一個骰子dapp,可以玩擲骰子遊戲XD。
為了方便操作,本文將UsingMyOracle合約以及Dice合約寫成單一個Dice.sol檔案。
把UsingMyOracle合約和Dice合約寫成一份Dice.sol方便部署
準備好上面三個合約檔案之後,接下來就是開始部署,需要依照下列順序部署及設定,本文使用Parity環境來示範。
Step1. 部署Oracle.sol及設定setCaAddress()
點擊DEPLOY來部署
點擊EXECUTE來呼叫function
選擇SetCbAddress,並設定一個使用者帳號,就可以發出交易了
設定完成
Step2. 部署OracleResolver及設定oracleAddress
部署OracleResolver.sol
點擊EXECUTE來設定oracleAddress
選擇setOracleAddress,設定剛剛部署的oracle address,發出交易即可
設定完成
Step3. 替換Dice.sol中的OracleResolver地址後再部署
替換Dice.sol中的這一個地址,接著就可以部署Dice.sol
點擊DEPLOY部署合約
最後部署完成三個合約
Step4. 設定所需的config,運行nodejs程式即可
此程式會監聽Oracle.sol傳出來的QueryEvent,就開始擲骰子,最後再呼叫Dice.sol的_callback()回傳結果。
因為parity預設不開personal的jsonrpc-api,所以需要自行開啟,如:$parity --jsonrpc-apis "web3,eth,net,parity,traces,rpc,personal"
程式跑起來之後就可以開始擲骰子啦~~
執行Dice.sol的dice功能
MyOracle服務會收到QueryEvent,處理完會回覆_callback
可以看到Event取得654的結果
所有的程式碼都放在這邊。
若有程式碼相關的問題,歡迎留言討論。
https://medium.com/taipei-ethereum-meetup/oracle%E7%B3%BB%E5%88%97%E4%BA%8C-my-oracle-d86ea6971431
以太坊Oracle系列二:My Oracle相关推荐
- 以太坊解析之二——POA共识过程与一些可能的修改方案
以太坊解析之二--POA共识过程 原始版本创建于2021-05-27 文章目录 以太坊解析之二--POA共识过程 前言 一.工作流程 详细解析 二.详细过程 1.启动 2.同步 3.总结 4.一些其他 ...
- Oracle(二)Oracle sql操作
文章目录 Oracle建表(create table) Oracle 字段类型: create table语句 添加约束: Oracle 查询(select) 备份查询数据: Oracle 插入(in ...
- 以太坊Oracle系列一: Human Oracle
智能合約如何取得外界資料. 智能合約是在EVM (Ethereum Virtual Machine)中執行的,它是個封閉的環境,所有執行過程都離不開EVM,換句話說,合約沒辦法由EVM內部向外界取得任 ...
- 《Oracle系列》:oracle job详解
一.设置初始化参数 job_queue_processes sql> alter system set job_queue_processes=n;(n>0) job_queue_proc ...
- Oracle系列之六:Oracle表分区
Oracle表分区 1. 基本概念 2. 范围分区 3. Hash分区(散列分区) 3. 复合分区 1. 基本概念 Oracle表分区是将一个大型表分割成更小.更易于管理的部分的技术.分区后的表被称为 ...
- Oracle系列:查询Oracle所有实例名字
#查询Oracle所有实例名字 shell# su - oracle shell# sqlplus / as sysdba SQL> select instance_name from v$in ...
- Oracle系列三 :Oracle 增删改查
步入正题,大数据项目筹备阶段,我感觉我成数据管理员了, 天天就是各种导数据, 天天写SQL,所以就想多了解一下更深入的知识点.比如:各种优化, 存储过程,触发器,索引等方面的知识 我们循序渐进, 这里 ...
- 视频教程-项目实战:支持以太坊的MySQL管理系统视频课程-区块链
项目实战:支持以太坊的MySQL管理系统视频课程 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视 ...
- 以太坊黄皮书(1~6章)
以太坊黄皮书(一) 引言 简单来说,在以太坊模型中,交易和智能合约的执行会改变节点的状态:可以把以太坊想象成一台计算机.因此,如果你将这个逻辑复制到分布于点对点网络中的其他节点上,并找到一种方法来 ...
最新文章
- 360浏览器怎么查看保存的密码
- 爬虫-11-伪造电脑访问构建一个请求头
- 新浪微博被罚了,暂停更新微博热搜榜一周
- linux下DNS服务器的配置
- easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
- 为什么90%的人都抓不住暴富的机会?
- (day 52 - 先序后序遍历计数 ) 剑指 Offer 55 - II. 平衡二叉树
- C64x+ 与 C64x Cache 区别
- ❤520给她准备的情人节礼物~html+css+javascript漫天飞雪3D相册(含音乐)
- 搬家后计算机总重启,电脑无故重启是这一个月来的事了,我刚刚搬家电脑搬到新家那用了没几 爱问知识人...
- dwf怎么合成一个_图纸集批量发布单页dwf的方法——院办质量小组
- 可视化指标计算公式_技巧|1个小思路,解决不同量级间指标的可视化问题
- vue 子组件与父组件运行的顺序
- ubuntu 16.04 Clion2018.1.1 添加桌面快捷方式
- 实现链表的插入——头插/尾插
- 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现
- 天龙八部架设IP配置文件
- 2022亚太数学杯数学建模竞赛C题(思路、程序......)
- linux查找mysql安装目录_Linux下查看MySQL的安装路径
- 使用python自动画一只小猪佩奇