GethのプライベートネットワークにMetamaskを接続して送金してみる
を参考に、docker-composeでGethを実行し、マイニングができるようになったところから書いていきます。
docker-compose.yml
# docker-compose.yml
version: "3"
services:
app1:
image: ethereum/client-go
container_name: private_net1
entrypoint: /bin/sh
tty: true
volumes:
- ./private_net:/geth
ports:
- 8545:8545
portを指定する必要があります。
Gethの実行時のオプションでhttpリクエストを受け取れるようにした時のデフォルトポートが8545なので今回は8545を指定します。
Geth実行時のオプション
Geth実行のコマンドは以下。
geth --networkid "22" --nodiscover --datadir /geth --http --http.addr "0.0.0.0" console 2>> /geth/error.log
必要なのは--http
, --http.addr "0.0.0.0"
--http
はMetamaskがネットワークに接続するのにhttpを使うので、httpリクエストを受け取れるように。
--http.addr "0.0.0.0"
は今回はDockerコンテナ内でGethを実行しているので必要。
オプションはこちらを参照。
Metamaskにネットワークを追加
新しいRPC URLとしてhttp://localhost:8545
を指定。
Geth実行のコマンドでhttpのポートを指定していないので8545
となっている。
チェーンIDは22
今回はジェネシスブロックのchainIdを22としていたので。
各自のチェーンIDを指定してください。
Metamaskにアカウントをインポート
Gethにアカウントがない場合は作成をしてください。
今回はこのような状態になっています。
> eth.accounts
["0xdcfc0837e489ead966ecdb00abce38d72267c474", "0xac5a53981b38eb63134dfee19934742542ef5874", "0xc846940796b9e4a9bf5604baa6fbceb2741d24ea"]
> eth.coinbase
"0xdcfc0837e489ead966ecdb00abce38d72267c474"
アカウントを3つ作っていて、1番目のアカウントがコインベースアカウント(マイニング報酬を受け取るアカウント)になっています。
"0xdcfc0837e489ead966ecdb00abce38d72267c474"のアカウント(コインベースアカウント)をMetamaskにインポートしてみます。
Metamaskの右上アイコンメニューからアカウントをインポートを指定。
JSONファイルはGeth実行時のdatadirに指定したディレクトリにkeystore
というディレクトリがあり、その中にアカウントごとにJSONファイルがあるので対象アカウントのJSONファイルをアップロードします。
アカウントとJSONファイルの対応がわからないときは、JSONファイルのaddress
にアドレスが書いてあるのでそれで確認できます。
(自分のPCだと何故かインポート処理に結構時間がかかりMetamaskが固まってインポートに失敗したりしました。何回か試したらインポートできてました。)
インポートに成功し、所持しているETHが反映されています。
> eth.getBalance(eth.accounts[0])
462999999999829437900
送金
"0xdcfc0837e489ead966ecdb00abce38d72267c474"から
"0xc846940796b9e4a9bf5604baa6fbceb2741d24ea"へ3ETH送金してみます。
Metamaskで送金。
アドレスを指定。
Gethでマイニングを実行していなければ実行します。
しばらくすれば送金されているのが確認できます。
(3ETH送金したけどマイニング報酬をもらっているので3ETH減ったわけではない)
受け取った方は
> eth.getBalance(eth.accounts[2])
3000000000000000000
Discussion