EthereumのクライアントであるGethのインストールは以前の記事で完了したので、今回はGethによるプライベートネットワークでの起動まで行います。
Gethで接続できるネットワークの種類
Gethを起動して接続できるネットワークの種類は、「パブリックネットワーク」と「プライベートネットワーク」の2つに分けられます。
パブリックネットワークは、その名の通りパブリックに運用されている不特定多数のノードが参加するP2Pネットワークです。一方でプライベートネットワークは、プライベートに運用されているネットワークで、自分または自分の知るノードのみが参加するEthereumネットワークを構築することが可能です。限られた参加者だけのネットワークであるため、容易に採掘することができたり、安全性の高いネットワークになります。そのため、Ethereumの動作を調べたり、コントラクトなどを使った分散型アプリケーション(Dapp)の開発作業など個人的な作業を行う際には、プライベートネットを用いて行うのが一般的です。
ここでの説明は、macOS 10.12 Sierra環境下での作業として説明しますが、他の環境下でも基本的な操作は同じですのでディレクトリやファイルなどのパスは自分の開発環境に合わせて行なってください。
パブリックネットワークに接続する
まずは、メインネットを立ち上げパブリックネットワークに接続します。
任意の場所にディレクトリを作成してもよいですがここではホームディレクトリ下に作成します。
データを保管するためのディレクトリを作成
$ mkdir ${HOME}/eth_main_net
次にGethの起動を行います。
$ geth --datadir ${HOME}/eth_main_net console
これで、メインネットを立ち上げパブリックネットワークに接続されました。
Ethereumのブロックの情報が表示されていくと思います。
Ctrl+Cを入力する(ControlキーとCを同時に押す)ことで終了できます。
プライベートネットワークに接続する
続いて、Gethをプライベートネットワークに接続して立ち上げる方法を説明していきます。
1.プライベートネットワーク用の各種データを格納するディレクトリを作成
$ mkdir ${HOME}/eth_private_net
2.Genesisファイルの作成
1で作成したディレクトリに、Genesisファイルというブロックチェーンの0番目のブロックであるGenesisブロックについての情報を書いたファイルを作成します。プライベートネットワークを構築する際、ゼロからブロックチェーンを作ることになるため、ブロックチェーンの性能などの情報を記載したGenesisファイルが必要になります。
1で作成したディレクトリにJSONファイルを「genesis.json」として保存してください。
なお、GethのバージョンによってGenesisファイルに記載が必要な事項が少し変わります。現在、主に使われているGethのバージョンとして、1.5から始まる1.5系と呼ばれるバージョンと1.6から始まる1.6系と呼ばれるバージョンがありますので、各自がインストールしているバージョンに合わせてファイルを記述してください。
バージョンの確認方法は以下のコマンドで表示されます。
$ geth version
以下は、Genesisファイルのサンプルです。
1.5系
genesis.json
{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x00",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0xffffffff"
}
1.6系
genesis.json
{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x00",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0xffffffff",
"alloc":{},
"config":{}
}
3.Gethの起動
続いて、Gethを起動します。まず、1で作成したディレクトリ下に「geth.log」という空のファイルを作成してください。
そして、コンソール上で以下のコマンドを入力してください。
$ geth --networkid "10" --nodiscover --datadir "${HOME}/eth_private_net" console 2>> ${HOME}/eth_private_net/geth.log
実行後に、「Welcome to the Geth JavaScript console!」という文字が出力され、「>」のプロンプトが表示されていればプライベートネットワークへの接続が成功し、コンソールが起動しました。
実際に今回立ち上げたプライベートネットのGenesisブロックがgenesis.jsonに記載されたものになっているのかを確認してみます。Gethプロンプト上で以下のコマンドを実行してみます。
> eth.getBlock(0)
このコマンドは指定したブロック番号のブロック情報を表示するもので、今回はブロック番号”0″を指定してGenesisブロックの情報を表示します。下の結果のように例えばdifficultyがgenesis.jsonで指定したものになっているはずです。(ただし数値は16進表記から10進表記に変換されています。)
gethのコンソールから抜けるには、以下のコマンドを入力すると終了します。
> exit
getからプライベートネットワーク上でのアカウント作成、マイニングや送金などが行えます。
それに関しての記事は、後日更新します。