truffle unboxしたあとにtruffle consoleでwrong networkエラー

現象

truffle unbox reactしたあとに、truffle consoleすると以下のエラーが出る。

$ truffle console
> Something went wrong while attempting to connect to the network at http://127.0.0.1:7545. Check your network configuration.

Could not connect to your Ethereum client with the following parameters:
    - host       > 127.0.0.1
    - port       > 7545
    - network_id > 5777
Please check that your Ethereum client:
    - is running
    - is accepting RPC connections (i.e., "--rpc" or "--http" option is used in geth)
    - is accessible over the network
    - is properly configured in your Truffle configuration file (truffle-config.js)

Truffle v5.4.15 (core: 5.4.15)
Node v12.22.7

原因

今回のケースは truffle console のデフォルトのネットワーク名(development)とtruffle-config.jsで設定した名前(develop)がミスマッチしていた。

truffle consoleを実行すると、truffle-config.jsで設定されているネットワーク名の「development」がデフォルト実行されるようになっている。
しかし、truffle unbox reqactしたときのtruffle-config.jsのネットワーク名は「develop」になっているため、truffle consoleを実行しても、「ネットワークに接続できない」というエラーが表示されてしまう。

「$ truffle unbox react」後の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: {
    develop: {
      port: 8545
    }
  }
};

おそらく、Truffle Box Reactが積極的にメンテされていないようなので、古い状態のままになっているのが原因と思われる。

GitHub truffle-box/react-box/truffle-config.js

なお、 $ truffle init で初期生成した場合は、ネットワーク名がデフォルトで「development」になっているため、そのまま $ truffle console できる。

「$ truffle init」後のtruffle-config.js

module.exports = {
  /**
   * Networks define how you connect to your ethereum client and let you set the
   * defaults web3 uses to send transactions. If you don't specify one truffle
   * will spin up a development blockchain for you on port 9545 when you
   * run `develop` or `test`. You can ask a truffle command to use a specific
   * network from the command line, e.g
   *
   * $ truffle test --network <network-name>
   */

  networks: {
    // Useful for testing. The `development` name is special - truffle uses it by default
    // if it's defined here and no other network is specified at the command line.
    // You should run a client (like ganache-cli, geth or parity) in a separate terminal
    // tab if you use this network and you must also set the `host`, `port` and `network_id`
    // options below to some value.
    //
    // development: {
    //  host: "127.0.0.1",     // Localhost (default: none)
    //  port: 8545,            // Standard Ethereum port (default: none)
    //  network_id: "*",       // Any network (default: none)
    // },

対応

案1(truffle consoleでネットワーク名を指定)

以下のようにネットワーク名が指定できる。

$ truffle console --network ネットワーク名

そこで、truffle-config.jsで設定したネットワーク名を指定する。初期状態であれば以下のような指定になる。

$ truffle console --network develop
truffle(develop)>
(To exit, press ^C again or ^D or type .exit)

案2(truffle-config.jsのネットワーク名を修正)

以下のように「develop」を「development」に修正する。

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: {
      port: 8545
    }
  }
};

truffle consoleすると以下のように「truffle(development)」と表示される。

$ truffle console
truffle(development)>
(To exit, press ^C again or ^D or type .exit)