Truffleとローカルのネットワーク

Truffleとローカルのネットワーク

はじめに

一時、関連の書籍を色々読んでブロックチェーン熱が高まって、その後プロジェクトが忙しくなって熱が冷めて、最近また熱が高まってきました。そのうち調べたこと・やったことを網羅的にまとめようかと思いますが、今回は Truffle についての小ネタで1つ記事を書こうと思います。

ブロックチェーン、Ethereum、スマートコントラクトの基本的な話は今回は説明しません。

事前情報

Truffle とは?

一応 Truffle の説明をしておきます。Truffle Suite は、スマートコントラクト開発者のためのツールキット・フレームワークという感じです。

Ethereum 上のスマートコントラクトを開発したい人は、まずは入れておくべきものです。

TestRPC は、現在は Ganache

ブロックチェーン・スマートコントラクト関連は動きが速く、1〜2年前の情報だと古くなっているものも多いので、まずは Ethereum や OpenZeppelin、そして今回の Truffle などの公式ドキュメントを見るのが良いと思います。

スマートコントラクト関連で検索すると英語の記事が沢山出てきますが、1年くらい前の記事だと TestRPC という単語をたまに見かけるかもしれませんが、現在は Ganache という名前に変更になっていて、Truffle Suite の一部となっています。

Truffle Suite | Blog | TestRPC is now Ganache

ローカルのネットワークにつなぐ

Truffle でスマートコントラクトの開発をする場合に、最初はローカルマシン上で動くテスト用のネットワークに繋ぐと思いますが、その方法が2つある事に後から気づきました。コマンドとしては以下の2つです。

  • truffle console
  • truffle develop

どう違うのでしょうか。英語のドキュメントを見ると答が書いてありますが、それを簡単に説明すると共にいくつか補足します。

Truffle Suite | Documentation | Truffle | Using Truffle Develop and the Console

console: 既に立ち上がってるネットワークにつなぐ

truffle console コマンドを実行すると、設定ファイル内に development という名前で定義されているネットワークに接続します。ネットワークが立ち上がっていない場合はエラーとなります。

デフォルトでは development という設定名のネットワークに繋ぎますが、以下のようにオプションをつけることで、違う設定名のネットワークに繋ぐことも出来ます。

truffle console --network <name>

develop: ネットワークを起動して、そこにつなぐ

truffle develop コマンドを実行すると、その時点でテスト用のネットワークがポート8545で起動され、そこに接続します。注意すべき点としては、設定ファイルの内容は無視されます。

develop vs development で紛らわしい

上の説明で分かる通り、truffle console コマンドでは、(デフォルトで)development ネットワークに繋がり、コンソールのプロンプトは以下のようになります。

truffle(development)>

それに対して、truffle develop コマンドでは、新規でネットワークを起動して、そこに繋がります。プロンプトは以下のようになります。

truffle(develop)>

紛らわしい仕様ですね・・・

ネットワーク設定

truffle.js vs. truffle-config.js

truffle init コマンドでプロジェクトを作成すると、truffle.jstruffle-config.js という似たような名前のファイルがあることに気づくかもしれません。

truffle.js を使うのが基本ですが、Windows 環境の場合、そのファイル名だと truffle コマンドと競合するため、truffle-config.js というファイルを使います。

設定方法

truffle.js (あるいは truffle-config.js)に、以下のような記述を追加します。

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*" // Match any network id
    }
  }
};

詳しくは、ドキュメントを参照して下さい。

Truffle Suite | Documentation | Truffle | Configuration

まとめ

Ethereum 上のスマートコントラクト開発には、Truffle を使うと良いです。その際、ローカル開発環境でテスト用のネットワークを立ち上げると思いますが、その方法には2つ有るので注意して下さい。