以太坊Oracle系列二:My Oracle
四步驟建立屬於自己的Oracle服務(wù)
繼上一篇介紹Oracle的基本運(yùn)作原理以及手動(dòng)回覆Query之後,本篇要來(lái)演示如何建立一個(gè)符合自己需求的Oracle服務(wù),自己動(dòng)手做的好處除免收手續(xù)費(fèi)之外,最重要的就是安全性,畢竟智能合約處理的是真金白銀,太依賴第三方的資料,風(fēng)險(xiǎn)可能有點(diǎn)高。
本文將實(shí)作一個(gè)Dice dapp,使用者可以丟一顆有0~1000數(shù)字的骰子,結(jié)果會(huì)由My Oracle服務(wù)回傳。系統(tǒng)架構(gòu)如下圖,總共需要部署三個(gè)合約,最後再寫一個(gè)nodejs程式來(lái)當(dāng)作MyOracle服務(wù),負(fù)責(zé)監(jiān)聽(tīng)QueryEvent並自動(dòng)回覆。
My Oracle系統(tǒng)架構(gòu)- Oracle合約:架構(gòu)中最重要的合約,負(fù)責(zé)接收query後傳送至外界,並指定callback address確保只有自己能將結(jié)果回傳。
- OracleResolver合約:主要負(fù)責(zé)指定部署在鏈上的Oracle,增加系統(tǒng)的便利性。當(dāng)Oracle更新並重新部署後,會(huì)產(chǎn)生一個(gè)新的合約地址,管理者只要透過(guò)此合約重新指定MyOracle合約地址即可,這樣一來(lái)完全不會(huì)影響到使用此服務(wù)的dapp,如本文中的Dice,一樣可以正常運(yùn)作。
- UsingMyOracle合約:提供給想要使用MyOracle服務(wù)的dapp開(kāi)發(fā)人員,繼承此合約就可以找到OracleResolver,並發(fā)送myOracleQuery。
- Dice合約:繼承UsingMyOracle合約的一個(gè)骰子dapp,可以玩擲骰子遊戲XD。
為了方便操作,本文將UsingMyOracle合約以及Dice合約寫成單一個(gè)Dice.sol檔案。
把UsingMyOracle合約和Dice合約寫成一份Dice.sol方便部署準(zhǔn)備好上面三個(gè)合約檔案之後,接下來(lái)就是開(kāi)始部署,需要依照下列順序部署及設(shè)定,本文使用Parity環(huán)境來(lái)示範(fàn)。
Step1.?部署Oracle.sol及設(shè)定setCaAddress()
點(diǎn)擊DEPLOY來(lái)部署點(diǎn)擊EXECUTE來(lái)呼叫function選擇SetCbAddress,並設(shè)定一個(gè)使用者帳號(hào),就可以發(fā)出交易了設(shè)定完成Step2. 部署OracleResolver及設(shè)定oracleAddress
部署OracleResolver.sol點(diǎn)擊EXECUTE來(lái)設(shè)定oracleAddress選擇setOracleAddress,設(shè)定剛剛部署的oracle address,發(fā)出交易即可設(shè)定完成Step3. 替換Dice.sol中的OracleResolver地址後再部署
替換Dice.sol中的這一個(gè)地址,接著就可以部署Dice.sol點(diǎn)擊DEPLOY部署合約最後部署完成三個(gè)合約Step4. 設(shè)定所需的config,運(yùn)行nodejs程式即可
此程式會(huì)監(jiān)聽(tīng)Oracle.sol傳出來(lái)的QueryEvent,就開(kāi)始擲骰子,最後再呼叫Dice.sol的_callback()回傳結(jié)果。
因?yàn)閜arity預(yù)設(shè)不開(kāi)personal的jsonrpc-api,所以需要自行開(kāi)啟,如:$parity --jsonrpc-apis "web3,eth,net,parity,traces,rpc,personal"
程式跑起來(lái)之後就可以開(kāi)始擲骰子啦~~
執(zhí)行Dice.sol的dice功能MyOracle服務(wù)會(huì)收到QueryEvent,處理完會(huì)回覆_callback可以看到Event取得654的結(jié)果所有的程式碼都放在這邊。
若有程式碼相關(guān)的問(wèn)題,歡迎留言討論。
https://medium.com/taipei-ethereum-meetup/oracle%E7%B3%BB%E5%88%97%E4%BA%8C-my-oracle-d86ea6971431
總結(jié)
以上是生活随笔為你收集整理的以太坊Oracle系列二:My Oracle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Node.js部署智能合約(Smar
- 下一篇: 以太坊Oracle系列一: Human