プライベート・ネットに接続する

Gethのインストールが完了したら早速Gethを起動します。

2015/7/30にEthereumの最初のβ版であるFrontierがリリースされてから、Ethereumの本番ネットワーク(ライブ・ネット)の稼働が開始されました。

ライブ・ネットは不特定多数のノードが参加するP2Pネットワークです。一方で自分または自分の知るノードのみが参加するEthereumネットワークを構築することも可能であり、これをプライベート・ネットと呼びます。限られた参加者のみのネットワークなので、容易にEtherの採掘が可能ですし1、安全性も高いネットワークになります。そのため、Ethereumの動作を調べたり、分散型アプリケーション(Dapp)の開発作業など個人的な作業を行うには、プライベート・ネットを立ち上げてそこでいろいろ弄ってみると便利です。

そこで本節では、インストールしたGethを起動し、プライベート・ネットに接続するところまでを解説していきます。

Genesisファイルを作成する

Genesisファイルとは、ネットワークでやり取りされるブロックチェーンの最初(Block番号 "0")のブロックであるGenesisブロックの情報を記述したファイルです。プライベート・ネットでは独自のブロックチェーンをやり取りしていくため、独自のGenesisブロックを定義したGenesisファイルを用意して利用します2

まず任意の場所にプライベート・ネットのブロック情報やノード情報など各種データを格納するディレクトリ(データ・ディレクトリ)を作成します3。ここでは、ログイン・ユーザー(今回の例ではtest_u)のhomeディレクトリ直下に作成します。

$ mkdir /home/test_u/eth_private_net

次に上記ディレクトリ内にjson形式の下記の内容4 を記述したmyGenesis.jsonファイルを配置します。

{
  "nonce": "0x0000000000000042",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x0",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}

Gethをプライベート・ネットで起動する

genesisブロックの初期化

データ・ディレクトリとgenesisファイルを作成したら、以下のコマンドを実行しブロックチェーン情報をgenesisファイルの内容で初期化します。

$ geth --datadir /home/test_u/eth_private_net init /home/test_u/eth_private_net/myGenesis.json

本コマンドを実行すると、--datadirで指定したディレクトリ以下にchaindataディレクトリが新しく作成されて、その中にgenesisブロックのブロックチェーン情報が保存されます。

gethの起動

次に以下のコマンドを実行することでGethを起動します。

$ geth --networkid "10" --nodiscover --datadir "/home/test_u/eth_private_net" console 2>> /home/test_u/eth_private_net/geth_err.log

ここで--datadirオプションでは、genesisブロックの初期化で指定したディレクトリと同一のものを指定してください。また、その他のオプションの意味は以下のとおりです。

  • --networkid "10" :本オプションで任意の正の整数のIDを指定することで、ライブ・ネットとは異なるネットワークを立ち上げることが可能です(ここでは10を指定)。
  • --nodiscover :Gethはデフォルトで自動的に(同じネットワークID)のEthereumネットワークのノード(Peer)を探し接続を試みます。プライベート・ネットでは未知のノードとの接続を避けるため、このオプションで自動Peer探索機能を無効にします。
  • console:Gethには採掘やトランザクションの生成などを対話的に進めることができるコンソールが用意されています。consoleサブ・コマンドを指定することで、Gethの起動時に同時にコンソール立ち上げることが可能です。なお、consoleサブ・コマンドを付加せずに、Gethのプロセスをバックグラウンドで起動させておき、後からそのプロセスのコンソールを起動する事も可能です(下記TIP参照)。

上記コマンドを実行すると、下記の実行結果のように、幾つかの情報の表示の後に「>」のプロンプトが表示され、コンソールが起動されます。今後、特にことわりのない限りこのコマンドで起動したGethプロンプト上で作業していく前提で進めていきます。

Welcome to the Geth JavaScript console!

instance: Geth/v1.4.10-stable/linux/go1.5.1
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

実際に今回立ち上げたプライベート・ネットのGenesisブロックがmyGenesis.jsonに記載されたものになっているのかを確認してみます。Gethプロンプト上で

> eth.getBlock(0)

のコマンドを実行してみます。このコマンドは指定したブロック番号のブロック情報を表示するもので、今回はブロック番号"0"を指定してGenesisブロックの情報を表示します。下の結果のように例えばdifficultymyGenesis.jsonに指定したものになっているはずです。(ただし16進表記から10進表記に変換されています。)

> eth.getBlock(0)
{
  difficulty: 16384,
  extraData: "0x00",
  gasLimit: 134217728,
(中略)
  miner: "0x3333333333333333333333333333333333333333",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
(後略)
}
■■ TIP ■■

今後Gethを使用していくなかで、採掘等のためにGethをバックグラウンドで常時起動しておき、必要に応じてそのGethプロセスに対してコンソールを用いて対話的に操作をしたいといった場合が発生します。その際は、下記のようにattachサブ・コマンドを利用することで、既に起動されたGethプロセスのコンソールを起動することが可能です。

$ # gethプロセスをconsoleサブ・コマンドを付加せず、かつ最後に"&"を付加することで、バックグラウンドで起動します。
$ # この場合、起動時にはコンソールは立ち上がりません。
$ geth --networkid "10" --nodiscover --datadir "/home/test_u/eth_private_net" --genesis "/home/test_u/eth_private_net/myGenesis.json" 2>> /home/test_u/eth_private_net/geth_err.log &
$
$ # attachサブ・コマンドを用いて先に立ち上げたプロセスのコンソールを立ち上げます。
$ # ここで、ipc:以降に先に立ち上げたgethプロセスのデータ用ディレクトリ以下のgeth.ipcファイル(実際はソケット)のパスを指定します。
$ geth --datadir "/home/test_u/eth_private_net" attach ipc:/home/test_u/eth_data/geth.ipc

instance: Geth/v1.3.5/linux/go1.5.1
(実行結果 中略)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
>

脚注

1. ただし、テスト・ネットで採掘したEtherはテスト・ネット内のみで有効で、ライブ・ネットでは使用できないことに注意してください。
2. 独自のgenesisファイルを使用することの最大の目的は「採掘を容易にする」ことです。プライベート・ネットでもデフォルトのgenesisブロックを使うことも可能ですが、デフォルトのgenesisブロック(=Frontierのgenesisブロック)の採掘難易度(Difficulty)が非常に高く(17,179,869,184)設定されたため、プライベート・ネットでの採掘が非常に困難になりました。そのためDifficultyの小さい独自のGenesisファイルを用意してプライベート・ネット内での採掘を容易にすることが慣習になっています。
3. Gethのデフォルトではホーム・ディレクトリ以下に「.ethereum」という名前の隠しディレクトリが作成され、それがデータ・ディレクトリになります。ただし、今後プライベート・ネットとライブ・ネットとでデータディレクトリを分ける方が管理がしやすいことを考えると、データディレクトリをプライベート・ネット用に明示的に指定したほうがよいでしょう。

results matching ""

    No results matching ""