四步驟建立屬於自己的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相关推荐

  1. 以太坊解析之二——POA共识过程与一些可能的修改方案

    以太坊解析之二--POA共识过程 原始版本创建于2021-05-27 文章目录 以太坊解析之二--POA共识过程 前言 一.工作流程 详细解析 二.详细过程 1.启动 2.同步 3.总结 4.一些其他 ...

  2. Oracle(二)Oracle sql操作

    文章目录 Oracle建表(create table) Oracle 字段类型: create table语句 添加约束: Oracle 查询(select) 备份查询数据: Oracle 插入(in ...

  3. 以太坊Oracle系列一: Human Oracle

    智能合約如何取得外界資料. 智能合約是在EVM (Ethereum Virtual Machine)中執行的,它是個封閉的環境,所有執行過程都離不開EVM,換句話說,合約沒辦法由EVM內部向外界取得任 ...

  4. 《Oracle系列》:oracle job详解

    一.设置初始化参数 job_queue_processes sql> alter system set job_queue_processes=n;(n>0) job_queue_proc ...

  5. Oracle系列之六:Oracle表分区

    Oracle表分区 1. 基本概念 2. 范围分区 3. Hash分区(散列分区) 3. 复合分区 1. 基本概念 Oracle表分区是将一个大型表分割成更小.更易于管理的部分的技术.分区后的表被称为 ...

  6. Oracle系列:查询Oracle所有实例名字

    #查询Oracle所有实例名字 shell# su - oracle shell# sqlplus / as sysdba SQL> select instance_name from v$in ...

  7. Oracle系列三 :Oracle 增删改查

    步入正题,大数据项目筹备阶段,我感觉我成数据管理员了, 天天就是各种导数据, 天天写SQL,所以就想多了解一下更深入的知识点.比如:各种优化, 存储过程,触发器,索引等方面的知识 我们循序渐进, 这里 ...

  8. 视频教程-项目实战:支持以太坊的MySQL管理系统视频课程-区块链

    项目实战:支持以太坊的MySQL管理系统视频课程 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视 ...

  9. 以太坊黄皮书(1~6章)

    以太坊黄皮书(一) 引言   简单来说,在以太坊模型中,交易和智能合约的执行会改变节点的状态:可以把以太坊想象成一台计算机.因此,如果你将这个逻辑复制到分布于点对点网络中的其他节点上,并找到一种方法来 ...

最新文章

  1. 360浏览器怎么查看保存的密码
  2. 爬虫-11-伪造电脑访问构建一个请求头
  3. 新浪微博被罚了,暂停更新微博热搜榜一周
  4. linux下DNS服务器的配置
  5. easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
  6. 为什么90%的人都抓不住暴富的机会?
  7. (day 52 - 先序后序遍历计数 ) 剑指 Offer 55 - II. 平衡二叉树
  8. C64x+ 与 C64x Cache 区别
  9. ❤520给她准备的情人节礼物~html+css+javascript漫天飞雪3D相册(含音乐)
  10. 搬家后计算机总重启,电脑无故重启是这一个月来的事了,我刚刚搬家电脑搬到新家那用了没几 爱问知识人...
  11. dwf怎么合成一个_图纸集批量发布单页dwf的方法——院办质量小组
  12. 可视化指标计算公式_技巧|1个小思路,解决不同量级间指标的可视化问题
  13. vue 子组件与父组件运行的顺序
  14. ubuntu 16.04 Clion2018.1.1 添加桌面快捷方式
  15. 实现链表的插入——头插/尾插
  16. 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现
  17. 天龙八部架设IP配置文件
  18. 2022亚太数学杯数学建模竞赛C题(思路、程序......)
  19. linux查找mysql安装目录_Linux下查看MySQL的安装路径
  20. 使用python自动画一只小猪佩奇

热门文章

  1. 8080处理器计算机启动
  2. 大宝的读后感:(转载)
  3. 方差为平方的均值减去均值的平方
  4. Matlab cell矩阵处理
  5. Python:入门(3)
  6. μC/OS-II软件定时器的分析与测试
  7. CUDA程序优化技巧
  8. 【Python】创建长度为n的全0列表和全1列表
  9. Aria2 使用手札
  10. 利用matlab对xml文件进行批量处理