dockerを使ってethereumのプライベート環境をつくる

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