渋谷ほととぎす通信

Unity・ゲーム開発 技術で一生食べていく情報発信

【Ethereum開発】Gethをプライベート・ネットワークで起動する

前回に引き続き、Gethを使ったEthereumの学習をしていきます。

GethとはEthereumのP2Pネットワークに
接続するためのGo製クライアントソフトです。

前回の記事でインストールまでを済ませました。

本記事はEthereumのプライベートネットワーク接続までを学習していきます。

引き続きコチラの記事を参考にさせていただきます。
いつもありがとうございます。
プライベート・ネットに接続する - Ethereum入門

Ethereumのプライベートネットワークとは

一つの組織のみに管理されたノードのみが参加することが可能なネットワークです。ネットワークは自身の管理下に置くことが可能になり、中央集権的なP2Pシステムが可能になります。

👆つまりプライベート自分のみネットワークのため
個人の開発環境(テスト環境)として使えるという認識でいます。

Genesisファイルの作成

Genesisとはブロックチェーンの中の最初のブロックのことを指します。まずはこれを作成します。

Mac上の任意の場所でディレクトリを作ります。

$ mkdir eth_private_net

mkdir eth_private_netという名前である必要はありません。
サンプルにのっとっているだけです。

myGenesis.jsonという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": {}
}

2021.05.09

送金で失敗するため、config内のパラメータを追加

Gethのinitコマンドでgenesisブロックの初期化

次のコマンドでgenesisブロックを初期化します。

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

WARN [02-04|09:03:55] No etherbase set and no accounts found as default という警告が表示されますがこのノード(geth)でのデフォルトのウォレットのアドレスを作成していないために表示されるものです。これは次節で作成していくので、現時点では無視して構いません。

👆このような警告が出るらしいのですが、
僕の環境、バージョンでは発生しませんでした。

とりあえず気にせず先に進めます。

Gethの起動

👇次のコマンドでGethが起動します。
プライベートネットワークに接続するということです。

$ geth --networkid "15" --nodiscover --datadir "./eth_private_net" console 2>> ./eth_private_net/geth_err.log

軽くコマンドの内訳を説明します。

  • --networkid : 任意のネットワークIDで、Genesisファイル記載のchainidと同じ数字にする必要ガアあります
  • --nodiscover : 同じIDのノードを探す機能をOFFにします。個人で開発するときにはつけておくものなのでしょう
  • console : 対話型コンソールが起動します。consoleをつけなければバックグラウンドで起動します

先のコマンドを実行すると以下のように出力され、 対話型のコンソールが起動したと思います。

Welcome to the Geth JavaScript console!

instance: Geth/v1.10.2-stable/darwin-amd64/go1.16.3
at block: 0 (Thu Jan 01 1970 09:00:00 GMT+0900 (JST))

ここからはこの対話型コンソールに対してコマンドを実行していきます。

ジェネシスブロック情報の確認

> eth.getBlock(0)

すると以下のようなJSONが出力されます。

{
  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: []
}

まとめ

Gethを使ってEthereumのプライベートネットワークに接続し、
ジェネシスブロックの中身を確認するところまでできました。

次回は採掘してみます。

環境

  • macOS Catalina 10.15.7
  • ethereum 1.10.2
  • go 1.16.3 darwin/amd64

次の記事はコチラ