Tech

Ethereum(geth)でプライベート・ネットワークを作る手順

  • このエントリーをはてなブックマークに追加
  • Ethereumでプライベート・ブロックチェーンを作る手順
    • 主に開発用を念頭においています
    • ここでは、gethを使ったプライベート・ネットワークを作ります

事前準備

gethをインストールしておく

始める

genesis.jsonを作る

Setup a Local Test Blockchain []

genesis.jsonファイルを作成

{
    "nonce": "0x0000000000000042", 
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
    "difficulty": "0x4000", 
    "alloc": {},
    "coinbase": "0x0000000000000000000000000000000000000000", 
    "timestamp": "0x00", 
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
    "extraData": "Custem Ethereum Genesis Block", 
    "gasLimit": "0xffffffff"
}

ジェネシスブロックの作成

ジェネシス・ブロックとは、一番初めのブロックのことです。

1.4.xから以下の様に作成するようです。

geth init ./genesis.json

開発用でgethを立ち上げたい場合は、–devオプションをつけるとデカイファイルのDAGを作成しなくて良かったりして、楽です。

geth --dev --datadir ./data init genesis.json

アドレスを生成するため、初回のgeth実行

gethを起動する。

注意) geth 1.4.0以降 –genesisオプションが非推奨になり、エラーなります。
1.3.x 以前: geth –genesis genesis.json
1.4.x 以降: geth init genesis.json で初期化後、geth + オプション で起動。

$ geth --genesis <genesis json file path> --datadir <some path to an empty folder> --networkid 123 --nodiscover --maxpeers 0 console

例:

geth --genesis ./genesis.json --datadir ./data --networkid 123 --nodiscover --maxpeers 0 console

上記実行してから、以下でアカウントを作成

> personal.newAccount();
Passphrase:
Repeat passphrase:
"0xcd65f280ca5460398e95c2ae98dd00585de607cb"

作ったら、exitとうって、gethを停止する。
これで、etherを取得するためのアドレスが作成された。

余計なファイル(ブロックチェーンデータ)の削除

keystore以外の余計なファイルを消す。

$ cd <your datadir>
$ rm -rf `ls | grep -v keystore`

10 etherを取得する

以下のように、CustomGenesis.jsonに自分のアドレスを設定

"alloc": {
    "<your account address e.g. 0x1fb891f92eb557f4d688463d0d7c560552263b5a>": {
        "balance": "10000000000000000000"
    }
}

再度gethを起動

geth --genesis ./CustomGenesis.json --datadir ./data --networkid 123 --nodiscover --maxpeers 0 console

作成したアドレスに10 etherがあることを確認

primary = eth.accounts[0];
"0xcd65f280ca5460398e95c2ae98dd00585de607cb"
balance = web3.fromWei(eth.getBalance(primary), "ether");
10

参考コマンド

コネクションをチェック

> net.listening
true
> net.peerCount
4

接続ピアを表示

> admin.peers
[{
  ID: 'a4de274d3a159e10c2c9a68c326511236381b84c9ec52e72ad732eb0b2b1a2277938f78593cdbe734e6002bf23114d434a085d260514ab336d4acdc312db671b',
  Name: 'Geth/v0.9.14/linux/go1.4.2',
  Caps: 'eth/60',
  RemoteAddress: '5.9.150.40:30301',
  LocalAddress: '192.168.0.28:39219'
}, {
  ID: 'a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c',
  Name: 'Geth/v0.9.15/linux/go1.4.2',
  Caps: 'eth/60',
  RemoteAddress: '52.16.188.185:30303',
  LocalAddress: '192.168.0.28:50995'
}, {
  ID: 'f6ba1f1d9241d48138136ccf5baa6c2c8b008435a1c2bd009ca52fb8edbbc991eba36376beaee9d45f16d5dcbf2ed0bc23006c505d57ffcf70921bd94aa7a172',
  Name: 'pyethapp_dd52/v0.9.13/linux2/py2.7.9',
  Caps: 'eth/60, p2p/3',
  RemoteAddress: '144.76.62.101:30303',
  LocalAddress: '192.168.0.28:40454'
}, {
  ID: 'f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0',
  Name: '++eth/Zeppelin/Rascal/v0.9.14/Release/Darwin/clang/int',
  Caps: 'eth/60, shh/2',
  RemoteAddress: '129.16.191.64:30303',
  LocalAddress: '192.168.0.28:39705'
} ]

NodeUrlを取得する

> admin.nodeInfo
> admin.nodeInfo.NodeUrl

グローバルIP addressに変更することを忘れずに

開始時にノードを指定して起動する

geth --bootnodes "enode://pubkey1@ip1:port1 enode://pubkey2@ip2:port2 enode://pubkey3@ip3:port3"

ノードを追加する

admin.addPeer(enodeUrlOfFirstInstance)

マイニングを開始

miner.start()

その他、プライベート・ブロックチェーンを作る方法

eth-utils

eth-utilsを使う方法もある

ethersphere/eth-utils: ethereum utilities, dev tools, scripts, etc

Eris

Erisを使う。
ドキュメントが微妙でセットアップが意外に大変

HydraChain

鍵とか生成せず、コマンド一つで立ち上げられるので、楽

コマンド例

hydrachain -d datadir runmultiple --num_validators=3 --seed=42

HydraChain/hydrachain: Permissioned Distributed Ledger based on Ethereum

geth-private

プライベートEthereumブロックチェーンをセットアップするツール。

geth-private – easily setup private Ethereum blockchains from the command-line and Node

gethdev

使ったことはないが、こんなのもある。

gethdev

参考

プライベートチェーン

ネットワーク

  • このエントリーをはてなブックマークに追加