TruffleからローカルのGeth(Go Ethereum)クライアントに接続する方法

dApps開発

イーサリアムでdappsを開発する際には、truffleというフレームワークを使うことが一般的です。このフレームワークの中にはGethクライアントがマシンにインストールされてなくてもdappsを作れるようになっています。しかし、実際にgethで作ったアカウントで開発を進めたいと思う方もいるかもしれません。今回は、truffleからGethのAPIに接続するときの方法をご紹介したいと思います。

truffle設定

geth --networkid "15" --nodiscover --datadir "~/testnet" console 2>> ~/testnet/geth_err.log --mine --minerthreads 2 --rpc --rpcport 8545 --rpcapi "web3,eth,net,personal" --rpccorsdomain "*" --rpcaddr "0.0.0.0"

仮にこの設定でGethを起動したとしましょう。これにアクセスするためには8545番ポートに行かなければなりません。しかし、デフォルトでtruffleが参照するポートは9545番ポートなので、まずはこの設定を変えてあげなければなりません。

const path = require("path");

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  contracts_build_directory: path.join(__dirname, "client/src/contracts")
};

truffle-config.jsを以下のように修正します。

const path = require("path");

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  contracts_build_directory: path.join(__dirname, "client/src/contracts"),
  networks: {
    development: {
      host: '127.0.0.1',
      port: 8545,
      network_id: '15',
      from: "<ADRESS>",
    }
  }
};

これでtruffleは8545番を見ることができます。

Metamask設定

chromeで開発をする場合metamaskの設定を行わなければなりません。

アカウントのインポートを選びます。この時に秘密鍵を直接入力するかJSONファイルをドラッグ&ドロップすることができます。この例では、datadirに設定してあるtestnetディレクトリの中にあるkeystoresディレクトリにアカウントごとのJSONファイルが入っているので、それをmetamaskにドラッグ&ドロップします。するとgethで作成したアカウントをMetamaskから参照することができます。もちろんmetamaskのノード設定はlocalhost8545を選んでください。