見出し画像

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

宜しくお願いいたします。

この記事が気に入ったらサポートをしてみませんか?