サイト名変更・お引越しのお知らせ

【Ethereum】Gethでプライベートネットワークを構築する方法を解説

Gethプライベートネットワークを構築する方法を解説します。

この記事でわかること
  • Gethでプライベートネットワークが立ち上げられる
  • Gethの使い方の基本がわかる

バージョン
  • Geth 1.10.15

Gethをインストール

まずは、ご自身の環境に合わせてGethをインストールしましょう。

公式ドキュメントを参考にしてください。

例えばMacの場合は下記のようにbrewを使ってインストールします。

$ brew tap ethereum/ethereum
$ brew install ethereum

インストール完了後、gethコマンドが使えるかどうか確認しましょう。

$ geth --help

モグモグさん

各種コマンドの説明が表示されれば、インストール完了です。

全体のディレクトリ構成

本記事の中でのディレクトリ構成は下記のような形になりますので、読み進める上で参考にしてください。

data/ディレクトリはブロックチェーンのデータを保存するディレクトリです。

geth-privatenet-sample
  - genesis.json
  - data/

モグモグさん

geth-privatenet-sampleはプロジェクト名です。

ご自身の好きな名前でOKです!

genesis.jsonを作成

genesis.jsonとは、最初のブロックの設定ファイルです。

{
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0
  },
  "nonce": "0x0000000000000042",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}

モグモグさん

本記事では、それぞれのパラメーターの説明を省きますが、気になる方はこちらが参考になります。

プライベートネットワーク起動

初期化

geth initコマンドを使ってプライベートネットワークを初期化します。

--datadirは任意のディレクトリを指定してください。ここにブロックチェーンの情報が書き込まれます。

$ geth init --datadir data genesis.json

モグモグさん

完了後は、データディレクトリに情報が保存されていることを確認しましょう。

起動

続いて、起動していきましょう。

--networkidgenesis.jsonchainIdは同じものを指定する必要があります。

$ geth --datadir data --networkid 15

モグモグさん

これで、プライベートネットワークが構築できました!

コンソールからアクセス

Gethは、対話的に処理を行えるコンソール環境を用意しているのでそれを使ってアクセスしてみましょう。

Nodeにアクセス

起動した状態で下記のコマンドを入力してください。

data/のディレクトリはご自身で設定したデータディレクトリに変更してください。

$ geth attach data/geth.ipc

すると、Welcome to the Geth JavaScript console!という文字が表示されると思います。

ブロック情報を取得

getBlock(ブロックナンバー)を使ってブロック情報を取得してみましょう。

> eth.getBlock(0)
{
  difficulty: 16384,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  hash: "0x7b2e8be699df0d329cc74a99271ff7720e2875cd2c4dd0b419ec60d1fe7e0432",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x3333333333333333333333333333333333333333",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 507,
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 16384,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

モグモグさん

上記のようにブロック情報が表示されればOKです。

まとめ

Gethプライベートネットワークを構築する方法を解説しました!

モグモグさん

より理解を深めたい方は、コンソールからアカウントを作成したり、送金を行ったりをするとブロックチェーンの理解が深まります。