EthereumでDApps開発のための開発環境を構築する(Truffle&Ganache接続まで)

EthereumでDApps開発のための開発環境を構築する(Truffle&Ganache接続まで)
目次

前回の記事Ethereum の開発環境の構築を行いました。 今回はさらに Ethereum 用のフレームワークである TruffleGanache を使ってローカルでの開発環境を整えようと思います。

Truffleとは

TruffleEthereum アプリケーションの開発効率を上げるためのフレームワークです。 ボイラープレート的な仕事をしてくれるところから始まり、 ネットワーク接続の設定管理や、ネットワークのマイグレーション実行や初期化、テストフレームワークをバンドルしていたりなど、一通り開発できるように準備を整えてくれます。

Truffle top

Ganacheとは

Ganache はDAppsを開発時のテストをする際に使用するローカル用のプライベートネットワークを構築してくれます。自動マイニングしてくれるので、別でターミナルを立ち上げて、マイニング用のコマンドを実行する必要もありません。発生したトランザクションは順番にソートされて表示もされるので、動作確認も比較的容易にできると思います。

Ganache top

セットアップ

以前同様の記事を書きましたが、簡単におさらいします。

  • Etehreum のインストール
brew tap ethereum/ethereum
brew install ethereum
  • nodenvのインストール

私の場合、ローカル環境のグローバルなnodeのバージョンを変更したくないので、 nodenv を使って切り替えています。

brew install nodenv

nodenv起動のために、 ~/.zshrc に以下を追記します。

export PATH="$PATH:$HOME/.nodenv/bin:"
eval "$(nodenv init --no-rehash -)"
  • node(9.6.1)のインストールと設定
nodenv install 9.6.1
nodenv local 9.6.1
node -v
  • package.json の作成
npm init
(面倒なので、以降はEnter)
  • truffle のインストール
npm install [email protected]
  • solidityのコンパイラ solc のインストール
npm install [email protected]
  • Ganache のインストール

Ganache のページからインストーラを取得し実行する。

設定

package.json の修正

truffle をグローバルインストールしていないので、npm run でキックできるように package.json を修正します。 package.jsonscripts ブロックを修正します。

1  "scripts": {
2    "truffle": "truffle",
3    "develop": "truffle develop",
4    "truffle-ganache": "truffle migrate --compile-all --reset --network ganache",
5    "truffle-console": "truffle console --network ganache"
6  },

truffleを初期化する

npm run truffle init

実行が完了すると、プロジェクトディレクトリにフォルダやファイルがジェネレートされます。

tree -L 1

.
├── contracts
├── migrations
├── node_modules
├── package-lock.json
├── package.json
├── test
├── truffle-config.js
└── truffle.js
  • contracts ディレクトリ
    • コントラクトプログラムを配置する場所。truffle init 時に Migrations.sol が生成される
  • migrations ディレクトリ
    • マイグレーションスクリプトを配置する場所。 truffle init 時に 1_initial_migrations.js が生成される。
  • test ディレクトリ
    • 作成したコントラクトプログラムのテストスクリプトを配置する場所。デフォルトで mocha が使える。
  • truffle.js
    • truffleの設定ファイル
  • truffle-config.js
    • truffle.jsと同じ。PowerShellGit-bash 利用時にはこちらを編集する。

私はMacユーザなので、truffle-config.js は消してしまいます。

rm truffle-config.js

Ganacheと接続する

次にインストール済みの Ganache を起動します。 Ganache はデフォルトで10個のアカウントを作成してくれます。指定がなければ1番上に表示されているアカウントが coinbase になります。

Boot Ganache

Ganacheが表示しているネットワークの情報を基に、truffle.js を以下のように編集します。

 1module.exports = {
 2  // See <http://truffleframework.com/docs/advanced/configuration>
 3  // to customize your Truffle configuration!
 4  networks: {
 5    ganache: {
 6      host: "localhost",
 7      port: 7545,
 8      network_id: "*"
 9    }
10  }
11};

package.json に記載した npm scriptsのコマンドから truffle-ganache を起動し、 Ganacheのマイグレーションを行います。

npm run truffle-ganache

Ganacheの画面を見てみると1番上のアドレスの balance (所有しているether) が 10099.97 に減っています。

migration Ganache

実はこれ、npm run truffle-ganache 実行により、migrations/1_initial_migrations.js が実行され、 そこから contracts/Migrations.sol がデプロイされています。 そのマイグレーションの処理自体もトランザクションが行われており、ganacheに gas をお支払いしたため少しだけ減っています。

TRANSACTIONS タブを押すと、トランザクションハッシュが生成されていることを確認できます。

transaction Ganache

また、対話形式でプログラムを書きたい場合には以下のようにコンソールを立ち上げて、

npm run truffle-console

試しに以下のようなコードを実行すると

1web3.eth.sendTransaction({from: web3.eth.accounts[0], to: web3.eth.accounts[1], value:web3.toWei(5, "ether")})

トランザクションのアドレスが帰ってきます。

>  '0x046714fb412724c656250e5856bbb83469e2811b5d710bfa3c515606f5ff938a'

Ganache の方を確認すると、ちゃんとトランザクションが反映されていることがわかりますね。

transaction sample

まとめ

今回は Truffle でローカル環境構築をした後、 Ganache のネットワークに接続設定をして、マイグレーションまでを行いました。 TruffleGanache を使うことで、素の Ethereum 単体で開発するよりも、開発環境周辺の手間が軽減されるので、これから積極的に使っていきたいと思います。 ここまでできれば、次は Solidity によるコントラクトの開発と、テストコードによる動作確認です。