日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

以太坊Oracle系列二:My Oracle

發(fā)布時(shí)間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊Oracle系列二:My Oracle 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

四步驟建立屬於自己的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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。