Ethereum

テストネットワークでGeth起動(Gethの初期化、Gethのコマンド・オプション)

はじめに(テストネットワークでGeth起動前に)

あわせて読みたい
Ethereumクライアント(client)・Gethの環境構築手順【Windows, Mac】はじめに ブロックチェーンを使ってアプリケーションを作りたい、仮想通貨を自分で作ってみたい、と思ってプログラミングを始めたのに...
前回の記事で紹介した、EthereumクライアントであるGeth(Go-Ethereum)のインストールが既に済んでいる前提で説明をしていきます。Geth(Go-Ethereum)のインストールがまだ済んでいない方はそちらの記事を先にお読みください。Windows、Mac両方のGeth(Go-Ethereum)インストール方法を紹介しています。

EthereumのテストネットワークGethの起動をするにはまずインストールを済ませなくてはいけないのでしっかり事前にお読みください。すでにGethのインストールを済ましている方は大丈夫です。

 

テストネットワークとは

Ethereumにはブロックチェーンネットワークが大きく分けて2つあります。簡単に言うと本番環境(今回でいうライブネットワーク)であるかテスト環境(今回でいうテストネットワーク)であるかです。

システムエンジニアやWebアプリ開発の経験がある方は馴染みが深いのではないでしょうか。

テストネットワーク

テスト用のネットワークです。その暗号通貨(BitcoinやEthereum)が本当にきちんと取引されるのかを確認するためのテストスペースだと思ってください。システム開発を行う時はまずローカルで動かしテスト環境で試し、最後にローンチっていう流れです。テストネットワークはこのローンチ前の環境のことをさします。

特にスマートコントラクトの開発ではバグや不具合が命取りになります。いきなりリリースする前にテストネットワークで仕様の確認や不具合のチェックを入念に行います。

このテストネットワークは限られたノードだけが参加でき、マイニングの難易度を指定できるため参加者が簡単にマイニングを行うことができます。

そのため、Ethereum開発者はテストネットワークでアプリケーションの仕様の確認などを行なってからライブネットワークにリリースします。

ライブネットワーク

世界中のノードが参加する本番用のネットワークです。パブリックブロックチェーンとも呼ばれています。このライブネットワークではテストネットワークとは違い、参加しているノードが本物です。

私たちがEtherを送金したりマイニングしたりするときにもこのライブネットワークが使われています。

テストネットワーク上でのGeth起動の準備

テストネットワーク上でGethを起動するためにはデータディレクトリとGenesisファイルと言うものが必要です。早速これらを準備して行きましょう。念を押していいますが、今からテストネットワークでGethを起動させる準備を行います。

データディレクトリ

データディレクトリは送受信したデータやアカウント情報を保存する役割があります。それではホームディレクトリにtestnet_blockという名前でデータディレクトリを作って行きましょう。以下のコマンドをターミナルで打ち込んでください。

$ cd

$ mkdir ~/testnet_block

$ cd testnet_block

$ pwd
/Users/自分のホームディレクトリ/testnet_block

 

Genesisファイル

Genesisファイルはブロックチェーンの0番目のブロックの情報が書かれているファイルです。同じブロックチェーンネットワークに参加するためには同じブロックを持ったブロックチェーンを共有しなければなりません。このためGenesisブロックの情報を書いたGenesisファイルが必要です。ターミナルからコマンドでGenesisファイルを作成します。

$ touch genesis.json # ファイルを作成

 

テキストエディタでgenesis.jsonファイルを開いてください。genesis.jsonに以下のコードを書いていきましょう。

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

Gethの初期化

Gethを使用するためには初期化の作業が必要です。以下のコマンドを実行しましょう。–datadirのあとの“./”“.genesis.json”の階層はご自身の環境でのパスに置き換えて実行してください。

$ geth --datadir ./ init ./genesis.json

INFO [08-21|23:23:05.432] Maximum peer count                       ETH=25 LES=0 total=25
INFO [08-21|23:23:05.439] Allocated cache and file handles         database=/Users/blockmania/testnet_block/geth/chaindata cache=16 handles=16
INFO [08-21|23:23:05.441] Writing custom genesis block 
INFO [08-21|23:23:05.441] Persisted trie from memory database      nodes=0 size=0.00B time=21.527µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [08-21|23:23:05.442] Successfully wrote genesis state         database=chaindata                                       hash=7b2e8b…7e0432
INFO [08-21|23:23:05.442] Allocated cache and file handles         database=/Users/blockmania/testnet_block/geth/lightchaindata cache=16 handles=16
INFO [08-21|23:23:05.444] Writing custom genesis block 
INFO [08-21|23:23:05.444] Persisted trie from memory database      nodes=0 size=0.00B time=2.613µs  gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [08-21|23:23:05.444] Successfully wrote genesis state         database=lightchaindata                                       hash=7b2e8b…7e0432


$ ls
genesis.json geth keystore

 

このような表示が確認できたらGethの初期化は完了です。

テストネットワークでGethを実行する

早速テストネットワークでGethを実行していきます。以下のコマンドを打ちこみましょう。

$ geth --networkid 15 --nodiscover --maxpeers 0 --datadir ./ console

 

以下のような出力が出たらテストネットワークでのgethの起動は成功です!

INFO [08-21|23:25:25.845] Maximum peer count                       ETH=0 LES=0 total=0
INFO [08-21|23:25:25.853] Starting peer-to-peer node               instance=Geth/v1.8.13-stable/darwin-amd64/go1.10.3
INFO [08-21|23:25:25.853] Allocated cache and file handles         database=/Users/blockmania/testnet_block/geth/chaindata cache=768 handles=128
INFO [08-21|23:25:25.863] Initialised chain configuration          config="{ChainID: 15 Homestead: <nil> DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: <nil> EIP158: <nil> Byzantium: <nil> Constantinople: <nil> Engine: unknown}"
INFO [08-21|23:25:25.863] Disk storage enabled for ethash caches   dir=/Users/blockmania/testnet_block/geth/ethash count=3
INFO [08-21|23:25:25.863] Disk storage enabled for ethash DAGs     dir=/Users/blockmania/.ethash                   count=2
INFO [08-21|23:25:25.863] Initialising Ethereum protocol           versions="[63 62]" network=15
INFO [08-21|23:25:25.864] Loaded most recent local header          number=0 hash=7b2e8b…7e0432 td=16384
INFO [08-21|23:25:25.864] Loaded most recent local full block      number=0 hash=7b2e8b…7e0432 td=16384
INFO [08-21|23:25:25.864] Loaded most recent local fast block      number=0 hash=7b2e8b…7e0432 td=16384
INFO [08-21|23:25:25.864] Regenerated local transaction journal    transactions=0 accounts=0
INFO [08-21|23:25:25.865] Starting P2P networking 
INFO [08-21|23:25:25.865] RLPx listener up                         self="enode://1035082efa64309fbb6d0d532612cf2310247e0b1af9df2269ebc8b3b57e7e7bdb8cda407de51d584e6ce01df1f5dee372c0302d2a087ad4d833ead8dd14b7f4@[::]:30303?discport=0"
INFO [08-21|23:25:25.867] IPC endpoint opened                      url=/Users/blockmania/testnet_block/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.13-stable/darwin-amd64/go1.10.3
 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

> INFO [08-21|23:25:28.302] Mapped network port                      proto=tcp extport=30303 intport=30303 interface="UPNP IGDv1-IP1"

 

コンソールの状態になったと思います。コンソールから抜けたいときはexitコマンドを入力します

> exit
INFO [08-22|08:59:55.863] IPC endpoint closed                      endpoint=/Users/blockmania/testnet_block/geth.ipc
INFO [08-22|08:59:55.863] Blockchain manager stopped 
INFO [08-22|08:59:55.863] Stopping Ethereum protocol 
INFO [08-22|08:59:55.864] Ethereum protocol stopped 
INFO [08-22|08:59:55.864] Transaction pool stopped 
INFO [08-22|08:59:55.864] Database closed                          database=/Users/blockmania/testnet_block/geth/chaindata

 

以上でテストネットワーク上でGethを起動させることが出来ました。

Gethのオプションの意味

テストネットワークでのGethの実行でいくつかのオプションを指定しています。これらのオプションについて解説します。

–networkid 15

ブロックチェーンネットワークの識別子を意味します。今回は15と設定しましたが、0~3以外の番号なら自分で自由に選ぶことができます。

–nodiscover

他のノードが自分のノードを検出できないようにするための設定です。テストの際によく使用されます。これを指定しないと、GenesisファイルとネットワークIDが同じブロックチェーンネットワークに自分のノードが接続されてしまう恐れがあります。

–maxpeers 0

自分のノードに接続することができる数です。テストの場合は0と指定することが多いです。

–datadir ./

データディレクトリを指定することを意味します。”./”は現在のディレクトリを意味します。ディレクトリの場所は人によってそれぞれ異なるため自分で置き換えて設定しましょう。

console

起動した後で、コンソールのように入力できるモードに変わったと思います。これはJavaScriptのコンソールで、対話型でコードを実行することができます。

 

まとめ

テストネットワークでGethの起動はうまくいったでしょうか?Ethereum開発者としての道を進み続ければいつかライブネットワークにコントラクトをデプロイする日もそう遠くはないでしょう。

以下の記事でもテストネットワークでGethを起動させ、Ethereumで利用されるアカウントの説明やEtherのマイニングの実行方法を紹介しています。

あわせて読みたい
コマンドラインでEtherアカウント作成からマイニング(mining)までの手順はじめに http://blockmania.jp/?p=62 Gethの起動ができるようになったら、早速Etherをマ...