EthereumプライベートネットワークをDockerで構築して送金を行う

Docker

この記事では、初心者にもわかりやすく、Dockerを使ってEthereumのプライベートネットワークを構築し、マイニングや送金を行う手順を解説します。
Geth起動後の送金処理は、公式ガイド「Ethereum入門」を参考にしています。

手順1: プロジェクトディレクトリの作成

まず、新しい作業用ディレクトリを作成して移動し、データを保存するディレクトリを作成します。

手順2: Genesisファイルの作成

Genesisファイルはブロックチェーンの初期状態を定義する重要なファイルです。
前の手順で作成したデータ保存用のディレクトリ内に、以下の内容でgenesis.jsonを作成します。

手順3: Gethを初期化

Dockerを使ってGethを初期化します。

手順4: Gethノードの起動

Dockerイメージは、現在のethereum/client-go:latestのマイニング方式がProof-of-Stake (PoS) であるため、Proof of Work (PoW) をサポートするethereum/client-go:v1.9.25を使用しています。

また、不特定多数のノードとの接続を防ぎ、ネットワークを閉じた状態に保つため–nodiscoverオプションを使用し、ピアノードの自動検出(ピアディスカバリー)を無効化します。
さらに、送金時にアカウントのロック解除が必要なため、--allow-insecure-unlock オプションを使用します。
以下のコマンドを実行してGethノードを起動します。

参考 Gethノード構成

起動したGethノードの構成は下記の様になります。

参考 手順3.と手順4.をdocker-compose.ymlとする

作業の利便性のために、手順3.と手順4.をdocker-compose.ymlとすると下記の様になります。

手順5: Gethコンソールへの接続

起動したコンテナに入り、Gethコンソールに接続します。

以降の作業はEthereum入門のGethをインストールするを参考にコンテナ内で作業します。

手順6: Genesisブロックの確認

以下のeth.getBlock(0)コマンドでGenesisブロックが正しく初期化されたか確認します。

手順7: アカウントの作成

personal.newAccount(“パスワード”)コマンドを使って2個のEOA(Externally Owned Account)を作成します。

eth.coinbaseの確認

ether.coinbasは、各ノードで採掘を行う際にその報酬を紐づけるEOAのアドレスを示します。
ether coinbasにEOAのアドレスがセットされていれば、Etherのマイニングができます。

手順8: マイニングの開始

作成したEOAのアドレスがetherbaseとしてセットされているので、Etherの採掘が可能です。
etherの採掘はminer.start(thread_num)コマンドで開始します。
ここでthread_num は採掘を何本のスレッドで同時実行するかを指定するパラメータです。
指定しない場合は動作環境でのCPUコア数に設定されます。

以下のコマンドでマイニングを開始します。

マイニング状況は次のコマンドで確認可能です。

Etherの送金

作成したアカウント間で送金を行います。

Etherの送金処理

accounts[0]から、accounts[1]への送金

送金の前に、送金元アカウントのロック解除をおこないます。

accounts[0]から、accounts[1]へ、5 ether を送金します。
送金額をweb3.toWei(5, “ether”)で、weiの単位に変換して送金します。

送金後、以下のコマンドでaccounts[1]の残高を確認できます。

accounts[1]から、accounts[0]への返金

返金の前に、送金元アカウントのロック解除をおこないます。

accounts[1]から、accounts[0]へ、5 ether を3 ether を返金します。
返金額をweb3.toWei(3, “ether”)で、weiの単位に変換して返金します。

手順10: トランザクションの詳細確認

eth.getTransaction(“送金時に生成されたトランザクションID”)を使って詳細を確認できます。

まとめ

この手順では、EthereumのプライベートネットワークをDockerで構築し、マイニングと送金を行いました。
これにより、DockerでEthereumブロックチェーンを構築し基本操作を学べます。
興味がある方は公式ガイド「Ethereum入門」を参照し、さらに深掘りしてみてください!

タイトルとURLをコピーしました