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()