ゲームエンジニアの雑記ブログ

ゲームエンジニアの雑記ブログ。テーマ自由、技術について解説します

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

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

こんにちは、エンジニアのオオバです。

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

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

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

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

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

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

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