Agenda
現象
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)