TruffleでINFURAにコントラクトをデプロイする[web3.js]

2018年6月6日

Ethereumのブロックチェーンには大きく分けて「プライベートネットワーク」「テストネットワーク」「メインネットワーク」の3つの環境があります。今回は、テストネットワークのひとつであるRopstenテストネットワークにコントラクトをデプロイし、web3.jsを利用してブラウザからそのコントラクトに対してアクセスしてみます。

 

開発環境

macOS High Sierra
Truffle v4.1.8

 

Ropsten用のアカウントおよびEtherの管理はウォレットであるMetaMaskを利用します。テストネットワーク用のEtherはMetaMask Ether Faucetからもらうことが可能です。

 

コントラクトのデプロイは、EthereumノードのホスティングサービスであるINFURAを利用します。INFURAに登録して取得したAPIキーを利用してコントラクトをデプロイすることができます。つまりINFURAを利用すれば、GethなどのEthereumノードをダウンロードすることなくテストネットワークやメインネットに接続することが可能となります。

 

デプロイ自体の作業はフレームワークであるTruffleを利用します。

 

以下箇条書きによる説明です。

 

1 Ropstenテストネットワークを利用する。
2 RopstenのアカウントとEtherの管理はMetaMaskで行う。
3 EhterはMetaMask Ether Faucetからもらう。
4 INFURAに登録してAPIキーを取得する。
5 コントラクトのデプロイをINFURAに対して行う。
6 デプロイの作業はTruffleフレームワークを利用する。

 

 

MetaMaskとRopstenの準備


 

まずMetaMaskをインストールし、Ropsten上で必要となるアカウント(アドレス)とEtherを取得します。MetaMaskのインストール方法は割愛します。

 

Ropstenテストネットワーク内で利用するEtherは、MetaMask Ether Faucetからもらいます。このEtherはコントラクトをデプロイする際のGasとして必要となります。MetaMaskでRopstenテストネットワークを選択したら、下記リンク先の「request 1 ether from faucet」をクリックします。MetaMask上でEtherが送られたことが確認できます。

 

MetaMask Ether Faucet

 

次にRopstenテストネットワークにコントラクトをデプロイするために利用する、EthereumノードのホスティングサービスであるINFURAのAPIキーを取得します。下記サイトの登録フォームで登録完了すると「API key」が表示されます。

 

INFURA

 

 

Truffleでのコントラクト作成とデプロイ


 

Truffleを利用してコントラクトをRopstenテストネットワークにデプロイします。Truffleについては下記の関連ページもご覧下さい。

 

TruffleでHelloWorld

 

「HelloProject」ディレクトリを作成し、初期化します。

 

初期化によって生成されたcontractsディレクトリ内にHelloWorld.solを作成します。

 

migrationsディレクトリに下記のマイグレーションファイル(2_deploy_contracts.js)を作成します。コントラクト生成時のコンストラクタの引数として”こんにちわ”を渡しています。

5行目
適切な「Gas Limit」を明示的に設定しておくと、マイグレーション時にGasによるエラーが発生しません。ここでは設定するのは個々のコントラクトためのGas Limitです。

 

次にtruffle.jsにRopstenテストネットワークの設定をします。

1行目
INFURAはユーザーに対してセキュリティの関係上、トランザクションの署名に必要となる秘密鍵を提供していません。しかし、このHDWalletProviderを利用することによって署名を行うことができます。

 

デプロイする前にHDWalletProviderもnpmでインストールしておきます。

 

コンパイルし、Ropstenテストネットワークにマイグレーション(デプロイ)します。

 

成功すると下記のようなメッセージが表示されます。HelloWorld: 〜の部分がコントラクトのアドレスとなり、RopstenのEtherScanで確認することができます。

https://ropsten.etherscan.io/address/0x0423fcb70d7ada78cb532bd3446f6c5e133b425d

 

 

web3.jsでコントラクトにアクセスする


 

web3.jsについての説明は、下記の関連ページをご覧下さい。

 

web3.jsでブラウザからコントラクトにアクセスする[Ganache]

 

Ropstenのコンソールを起動します。

 

デプロイしたコントラクト(今回はHelloWorld.sol)のABI情報については、下記コマンドで取得することができます。

 

8行目

APIキー取得時にメールでも届きますが「https://ropsten.infura.io/〜」の〜の部分にはAPIキーを設定して下さい。

 

13行目

JSON.stringify(HelloWorld.abi)コマンドで表示された文字列を設定します。

 

 

参照ページ・文献


TRUFFLE

CONFIGURATION

USING INFURA (OR A CUSTOM PROVIDER)

 

 

LINEで送る
Pocket

Copyright © 2018 思考の葉 All Rights Reserved.  プライバシーポリシー