Ethereum上で分散型Oracleを実行する方法 【ステップ バイ ステップ ガイド】
iExecは、開発者、ハイテク愛好家、企業向けに、最も完全で使いやすい分散型オラクルソリューションを提供しています。このガイドでは、Web 2.0 APIデータをEthereumスマートコントラクトにすぐに提供する方法について説明します。分散型オラクルとは何か、またなぜ必要なのかについては、前の記事を参照してください。
分散型オラクルについて学習している間にRLCを取得することに興味がありましたら、開発者向けの報酬プログラムに挑戦してみてください!
このガイドでは、インターネット上のAPIから通貨ペア(ETH / USDなど)の価格を取得し、その情報をEthereum ブロックチェーンのスマートコントラクトに書き込む方法を説明します。このようなメカニズムは価格フィードオラクルと呼ばれ、iExecの分散型クラウドによって可能になる多くのユースケースの一つです。
このチュートリアルのすべての端末コマンドは、macOSマシン上で実行されました。Linuxを使用している場合は、ほぼ同じコマンドを使用できます。ただし、WindowsユーザーはOS固有のコマンドを調整し、Git Bashなどのアプリをインストールする必要があります。この場合、iExecによる技術的なサポートが少し難しくなります。ご理解のほどよろしくお願いいたします。
何か問題が発生した場合は、Slack、GitterまたはTelegramでiExecの開発者にご連絡ください。
0.前提条件
OS固有のコンパイル用ライブラリをインストールします
MacOSの場合
Xcode Command Line Toolがインストールされていることを確認してください。
Linuxの場合
sudo apt-get update
sudo apt-get install python
sudo apt-get install build-essential
Windows10の場合
日常的にWindowsを使って、c ++をコンパイルするためにVisual Studioをインストールしている場合、Linux用のWindows Subsystemを使ってみてください。VirtualboxをインストールしてLinux VMを起動することがも可能です!
Dockerをインストールします
MacOSの場合
Dockerのウェブサイトにアクセスし、サインアップしてDockerデスクトップをインストールしてください。 正常にインストールされたら、Dockerデスクトップにログインします。端末でDockerデスクトップが起動していることを確認します。
docker --version
Linuxの場合
UbuntuにDockerをインストールする方法を説明しているDockerのドキュメントページにアクセスしてください。(すべてのLinuxフレーバーがサポートされています)
次のコマンドを実行してDockerがインストールされたことを確認してください。
docker --version
DockerHubにリポジトリを作成します
dockerhubにアクセスし、price-feedという名前のリポジトリを作成します。
NodeJSをインストールします
LinuxおよびMacOSにノードをインストールする最も簡単な方法は、NVMインストーラを使用することです。 以下のコマンドを実行して、システムにNodeJSをインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash #works for MacOS & Linux
command -v nvm #should output 'nvm' if installation worked
nvm install node 10.12 # this will install latest stable node version
nvm use node #make nvm installed node the system's default node
端末でNodeが起動していることを確認してください。
node --version
Windowsでは、公式WebサイトからNodeJS Windowsインストーラをダウンロードしてください。
iExec SDKをインストールします
iExec SDKはノードモジュールです。 インストールするには
npm -g install iexec
を実行してください。
また、以下を実行して、iExec SDKが正しくインストールされていることを確認してください。
iexec --version
前提条件は以上です。 これからDOracleプロジェクトの設定について説明します。
1.プロジェクトを始めます。
それでは、Price-feed Oracleプロジェクトを始めましょう。
mkdir price-feed #new folder
cd price-feed #enter the folder
iexec init #init iexec project. If you already have an iExec wallet, run iexec init --skip-wallet to keep using your current wallet
最後のコマンドは、イーサリアムウォレットを作成します。
注:パスワードを設定してから必ず保存しておいてください(後で必要になります)。
これでウォレットが完成します。(ユーザーフォルダーに.jsonファイルとして保存されます)これからイーサリアムブロックチェーンとやり取りをするにはETH、iExecのプラットフォームとやり取りをするにはRLCが必要になります。
このチュートリアルでは、ブロックチェーンとのやり取りに関するすべてのコマンドは、Kovan testnetブロックチェーンで実行されます。Kovan testnetはEthereum Mainnetと同じように機能しますが、スタートするのに実際のお金がかかりません。 テストに最適!
iExecにリクエストを出して無料のKovan RLCを取得してみましょう。
iexec wallet getRLC --chain kovan
200 nRLCのクレジットがお持ちの端末のウォレットに表示されます。
Kovan ETHを無料で入手するには、Gitterグループチャットにイーサリアムウォレットアドレスを投稿する必要があります。 私たちのウォレットのアドレスを表示しましょう:
iexec wallet show --chain kovan
ウォレットアドレスをコピーして、Kovan Faucet Gitterに移動し、Gitterにサインインして、ディスカッションにウォレットアドレスをペーストしてください。
ウォレットのアドレスをチャットボックスに貼り付けて、3.0 Kovan ETHを受け取ります
先に進む前に、ウォレットが要求したETHとRLCを受け取ったことを確認する必要があります。 次のコマンドを実行して、ウォレットの残高を確認します。
iexec wallet show --chain kovan
残高には3.0 ETHと200 nRLCが表示されます。 そうでない場合は、しばらくお待ちください。
では、iExecアカウントにトークンを入金して、次のセクションに進みましょう。
iexec account deposit 200 --chain kovan
2.オフチェーンアプリケーションをデプロイします
iExecの分散クラウドで価格フィードアプリケーションを実行するには、次の手順を実行する必要があります。
1.「価格フィード」アプリケーションをDocker化します
2. DockerHubパブリックレジストリにプッシュします
3. それをiExecのプラットフォームに展開します
端末が価格フィードフォルダーに表示されることを確認したら、オフチェーンロジックを含むappという名前の新しいフォルダーを作成しましょう。
mkdir app
cd app # enter the folder
次に、価格取得ロジックを実装する価格フィードJSスクリプトをダウンロードします(JSコードを確認することをお勧めします)。
curl -o ./price-feed.js https://raw.githubusercontent.com/iExecBlockchainComputing/iexec-apps/master/PriceFeed/src/oracle.js
それでは、JSアプリケーションをドッキングしてみましょう。 最初のステップは、IDE(開発者環境)を開き、アプリフォルダーにDockerfileという名前のファイルを作成し、その中に以下のコンテンツを貼り付けることです。
FROM node:11-alpine
COPY price-feed.js /src/price-feed.js
RUN npm i https ethers fs
ENTRYPOINT ["node", "src/price-feed.js"]
この段階で、Dockerイメージを作成してdockerhubに公開する準備ができました。 ターミナルで次のコマンドを実行します。
docker build . #write down your image ID (it appears after the text "successfully built 19acce70289d" <-- that is the image ID)
Dockerイメージを作成しました。 次に、この画像にdockerhubユーザー名をタグ付けします。
docker tag <IMAGE_ID> <YOUR_DOCKERHUB_NAME>/price-feed:1.0.0 #ex: docker tag 19acce70289d iexechub/price-feed
最後に、ローカルイメージをdockerhubパブリックリポジトリにプッシュします。
docker push <YOUR_DOCKERHUB_NAME>/price-feed #write down your image digest (it appears after sha256:959eb75b13efb41a8f37495784150574d66175adebd0c6c18216b482c574d109 <-- this is your image digest)
アプリケーションを「iExec対応」にするまであと少しです。
cd .. #move to upper folder
iexec app init #tell the SDK that you want to create an app
次に、新しく作成した「iexec.json」ファイルを開き、次の3つのフィールドを編集します。
owner: “Your_key_wallet”
name: “PriceFeed” という名前を付けます。
multiaddr: dockerhubリポジトリ名で置き換えます↓
“registry.hub.docker.com/<YOUR_DOCKERHUB_NAME>/price-feed:1.0.0”.
checksum: docker pushコマンドによって指定されます。(sha256の前に0xを追加してください)
次に、端末で価格フィードアプリケーションをiExecに展開します。
iexec app deploy --chain kovan #that is a blockchain transaction
おめでとうございます! Price-FeedアプリがiExecプラットフォームに展開されました。
最後に、売り注文を公開しましょう。iExecプラットフォームのユーザーは注文書に書いた価格でアプリケーションを使用できるようになります。
iexec order init --app
iexec order sign --app
iexec order publish --app # publish your apporder on the marketplace and get an orderHash
iexec order show --app [orderHash]
3. オンチェーンのDOracle Smart Contractをデプロイします
お持ちのターミナルでリポジトリのクローンを作成しましょう。 スマートコントラクトのフォルダーに入り、JS dependenciesをインストールします。
git clone https://github.com/iExecBlockchainComputing/price-feed-doracle.git smart-contract
cd smart-contract
npm install
スマートコントラクトをブロックチェーンに展開するには、ウォレットの秘密キーをTruffleに伝える必要があります。 ウォレットの秘密鍵を表示する方法は次のとおりです。
cd .. # move to upper folder
iexec wallet show --show-private-key # copy your private key for next step
これでデプロイする準備ができました。 次のステップは簡単です:
cd smart-contract # move back to the smart-contract folder
MNEMONIC=<YOUR_PRIVATE_KEY> ./node_modules/.bin/truffle migrate --network kovan # Deploy your smart contract to the Blockchain
デプロイされた2つのスマートコントラクト ↑
これで、DOracleスマートコントラクトがKovan testnetブロックチェーンにデプロイされました。 ETH / USDの価格を入力してみてはいかがでしょうか。
4. DOracleを更新します(リクエスターとして)
お持ちのターミナルで次のコマンドを実行して、iExecで実行される「価格フィード」を購入しましょう。
cd .. # move back to parent folder price-feed
購入する注文の一意のID(注文ハッシュ)を表示しましょう。 1つはworkerpoolの注文で、もう1つは価格フィードアプリの注文です。
iexec orderbook workerpool --category 2 # copy the workerpool order hash
iexec orderbook app <address> # copy the app order hash
ここで、注文(ワーカプール+アプリ)を埋めたいと思っています。これは実行するのと同じくらい簡単です:
iexec order fill --app <APP_ORDER_HASH> --workerpool <WORKERPOOL_ORDER_HASH> --params "RLC BTC 9 2019-07-09T13:27:24.909Z" --chain kovan # start the DOracle computation!
それでおしまい! iExecプラットフォームに計算要求を送信しました。 これで取引が成立し、その取引には1つのタスクがあります。では、次のコマンドを使用して、計算の進行状況を追跡しましょう。
iexec deal show <DEAL_ID> --tasks 0 --chain kovan
iexec task show <TASK_ID> --watch --chain kovan
iExec Explorer(https://explorer.iex.ec)に移動して、タスクを追跡することもできます。 数分後、ステータスは「完了」に変わります。
それでは、要点をまとめます。
価格フィードアプリを実行するようワーカープールに依頼します。
ワーカーがETH / USD価格を取得します。
結果はPoCoによって検証され、コンセンサスが得られるとすぐに、iExecのスマートコントラクトに保存されます。
最後に、DOracleスマートコントラクトでは「_iexecDoracleGetVerifiedResult」という関数を呼び出します。この関数は、iExecのスマートコントラクトに保存されている結果を確認し、いくつかのフィルタリングロジックを実行します(例えば、UTCの日付に関連付けられた新しい価格は、以前の価格より新しいのか?等)
すべてのカスタム条件が満たされると、新しいETH / USD価格で更新されます。
いかがでしたか。
ご興味があれば、ぜひ価格フィードフロントエンドを見てみてください。https://price-feed-doracle.iex.ec
P.S. iExecでDOracleを構築することによって、楽しく報酬を得ることを可能にするレーニングプログラムの詳細をこちらでご覧ください!
【iExec 日本語公式アカウント】
■ Twitter
https://twitter.com/iExec_Japan
■ Telegram
https://t.me/iExec_Japan
■ LINE
https://line.me/R/ti/p/@muk3762p
━━━━━━━━━━
お問合せ・コラボのご相談など、メールでご連絡ください: mk@iex.ec
宜しくお願いいたします。
この記事が気に入ったらサポートをしてみませんか?