dockerを使ってethereumのプライベート環境をつくる
-
- Docker version 17.05.0-ce, build 89658beで構築しています
- ethereum/client-goのdockerイメージを使います
- Host側とはport番号を変え接続します。環境を2つ作ります
- node01:port8546,port30304
- node02:port8547,port30305
Dockerコンテナの準備
dockerのプライベートネットワークを作ります。
% sudo docker network create ethereumNet
イメージをpullする
% sudo docker pull ethereum/client-go
初期設定
永続化のためのボリュームを作成
% sudo mkdir -p /data/docker-share/ethereum-node-01
% sudo mkdir -p /data/docker-share/ethereum-node-02
プライベート用のgenesisを作成する
% vi myGenesis.json
---
{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x400",
"alloc": {},
"coinbase": "0x3333333333333333333333333333333333333333",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x8000000",
"config": {}
}
---
-
- nonce : アカウントが発行したトランザクション数
- difficulty : マイニングの難易度。
- alloc : 初期状態で特定のEOAにetheを割り当てたりできる
- coinbase : minerのアカウント。仮で設定している
- parentHash : 親ブロックのハッシュ。今回は初期
- extraData : 任意の値(関連値の保管用)
作成したgenesisファイルを永続化ボリュームに保存
% sudo cp myGenesis.json /data/docker-share/ethereum-node-01/
% sudo cp myGenesis.json /data/docker-share/ethereum-node-02/
作成したgenesisファイルを使って初期設定
node01
% sudo docker run --rm --name ethereum-node-01 \
-v /data/docker-share/ethereum-node-01:/var/share/ethereum:rw \
ethereum/client-go \
--datadir /var/share/ethereum init /var/share/ethereum/myGenesis.json
node02
% sudo docker run --rm --name ethereum-node-02 \
-v /data/docker-share/ethereum-node-02:/var/share/ethereum:rw \
ethereum/client-go \
--datadir /var/share/ethereum init /var/share/ethereum/myGenesis.json
dockerコンテナ起動
node01
% sudo docker run -d --name ethereum-node-01 \
--net ethereumNet \
-v /data/docker-share/ethereum-node-01:/var/share/ethereum:rw \
-p 8546:8545 -p 30304:30303 ethereum/client-go \
--networkid "10" --datadir /var/share/ethereum \
--nodiscover --rpc --rpcaddr "0.0.0.0" \
--rpcapi="admin,debug,eth,miner,net,personal,rpc,txpool,web3"
node02
% sudo docker run -d --name ethereum-node-02 \
--net ethereumNet \
-v /data/docker-share/ethereum-node-02:/var/share/ethereum:rw \
-p 8547:8545 -p 30305:30303 ethereum/client-go \
--networkid "10" --datadir /var/share/ethereum \
--nodiscover --rpc --rpcaddr "0.0.0.0" \
--rpcapi="admin,debug,eth,miner,net,personal,rpc,txpool,web3"
gethに接続してアカウントを作成して採掘を開始する
node01
接続
% sudo docker exec -it ethereum-node-01 geth attach rpc:http://localhost:8545
アカウント作成
> personal.newAccount("testpassword03")
"0xbf203ffae3d34e1ebc6b71134d9ae07842dbfba9"
> eth.coinbase
"0xbf203ffae3d34e1ebc6b71134d9ae07842dbfba9"
採掘開始
> miner.start()
node02
接続
% sudo docker exec -it ethereum-node-02 geth attach rpc:http://localhost:8545
アカウント作成
> personal.newAccount("testpassword04")
"0xaf4a112dc7624cfc63c3237700003393f38d5815"
> eth.coinbase
"0xaf4a112dc7624cfc63c3237700003393f38d5815"
採掘開始
> miner.start()