見出し画像

【完全保存版】2つのnodeを使ってSubstrateでブロックチェーンを立ち上げよう!

この記事は、下の記事を翻訳・編集したものです。

また、こちらの記事が完了した後に実行することを想定しています。


1 ネットワークのシミュレーション

0 はじめに

このチュートリアルでは、プライベートなバリデータ権限セットプライベートブロックチェーンネットワークを開始する基本的な紹介をします。

Substrate ノードテンプレートは、権限のあるコンセンサスモデルを使用し、ブロックの作成を権限のあるアカウントのローテーションリストに制限します。

認証されたアカウント(オーソリティ)は、ラウンドロビン方式でブロックを作成する責任を負います。

翻訳者注
「Round Robin」は、参加者のグループが順番にタスクを実行する方式を指します。
一度すべての参加者がタスクを完了すると、次のサイクルが始まり、これが繰り返されます。

このチュートリアルでは、ノードがブロックを生成できるようにするオーソリティとして2つの定義済みアカウントを使用することで、オーソリティ・コンセンサス・モデルが実際にどのように機能するかを見ていきます。

このシミュレートされたネットワークでは、2つのノード異なるアカウントとキーを使用して開始されますが、単一のコンピュータ上で実行されます。

始める前に、以下を確認してください。

  • RustRustツールチェーンをインストールし、Substrate開発用の環境を設定した。

  • ローカルブロックチェーンの構築を完了し、Substrateノードテンプレートをローカルにインストールしている。

  • ソフトウェア開発やコマンドラインインターフェイスの使用に慣れている。

  • ブロックチェーンやスマートコントラクトプラットフォームに慣れている。

1 チュートリアルの目的

このチュートリアルを完了することで、以下の目的を達成できます。

  • 定義済みのアカウントを使用してブロックチェーンノードを開始する。

  • ノードの起動に使用される主なコマンドラインオプションを学ぶ。

  • ノードが実行中で、ブロックを生成しているかどうかを判断する。

  • 実行中のネットワークに2台目のノードを接続する。

  • ピアコンピュータがブロックを生成し、確定することを確認する。

2 最初のブロックチェーン・ノードを開始する

鍵を生成して自分のプライベートSubstrateネットワークを開始する前に、localと呼ばれる事前に定義されたネットワーク仕様を使用して、事前に定義されたユーザーアカウントで実行する基本原理を学ぶことができます。

このチュートリアルでは、alicebobという定義済みのアカウントを使用して、1台のローカルコンピュータ上で2つのSubstrateノードを実行し、プライベートネットワークをシミュレートします。

3 ブロックチェーンを開始するには

1 コンピューターでターミナルシェルを開きます。

2 Substrateノードテンプレートをコンパイルしたルートディレクトリに移動します。

3 以下のコマンドを実行して古いチェーンデータをパージする。

./target/release/node-template purge-chain --base-path /tmp/alice --chain local

4 コマンドは操作を確認するよう求めます。

5 チェーン・データを削除することを確認するには、y と入力します。

今回は、もともと存在していませんでした。

新しいネットワークを開始する際には、常に古いチェーンデータを削除する必要があります。

次のコマンドを実行して、aliceアカウントを使用してローカル・ブロックチェーン・ノードを起動する。

./target/release/node-template \
--base-path /tmp/alice \
--chain local \
--alice \
--port 30333 \
--rpc-port 9945 \
--node-key 0000000000000000000000000000000000000000000000000000000000000001 \
--telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
--validator

4 コマンドラインオプションの確認

次に進む前に、以下のオプションがノードの起動にどのように使用されるか見てみましょう。

1 --base-path
チェーンに関連するすべてのデータを保存するディレクトリを指定します。

2 --chain local
使用するチェーンの仕様を指定します。
有効な定義済みチェーン仕様には、 local、development、staging があります。

3 --alice
aliceアカウントの定義済みキーノードのキーストアに追加します。
この設定では、aliceアカウントがブロックの生成と確定に使用されます。

4 --port 30333
ピアツーピア(p2p)トラフィック用リッスンするポートを指定します。このチュートリアルでは、同じ物理コンピュータ上で動作する2つのノードを使用してネットワークをシミュレートするため、少なくとも1つのアカウントに異なるポートを明示的に指定する必要があります。

5 --rpc-port 9945
WebSocket および HTTP 経由の JSON-RPC トラフィック受信をリッスンするポートを指定します。
デフォルトのポートは 9944 です。
このチュートリアルでは、カスタムWebソケットポート番号(9945)を使用します。

6 --node-key <key>
libp2p ネットワークで使用する Ed25519 秘密鍵を指定します。
このオプションは開発とテストにのみ使用してください。

7 --telemetry-url
テレメトリデータの送信先を指定します。
このチュートリアルでは、誰でも使用できる Parity がホストするサーバーテレメトリーデータを送信できます。

翻訳者注
テレメトリは、遠隔からのデータ収集と送信を指します。
特に、ソフトウェアやハードウェアの動作に関する情報を集め、これを解析や監視の目的で外部のサーバやサービスに送信することを意味します。

8 --validator
このノードがネットワークのブロック生成と確定に参加することを指定します。

ノード・テンプレートで使用可能なコマンドライン・オプションの詳細については、次のコマンドを実行して使用法ヘルプを参照してください。

./target/release/node-template --help

5 表示されるノード・メッセージを確認する

ノードが正常に起動すると、ターミナルにネットワーク操作に関するメッセージが表示されます。

例えば、次のような出力が表示されるはずです。

特に、出力には次のようなメッセージが含まれています。

1 初期ブロック

🔨 Initializing Genesis block/state (state: 0xea47…9ba8, header-hash: 0x9d07…7cce)

次のノードを起動するときに、これらの値が同じであることを確認します。

2 ローカルノード

🏷 Local node identity is: 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp

このノードを一意に識別する文字列を指定します。

この文字列は、aliceアカウントを使用してノードを起動する際に使用された--node-keyによって決定されます。

この文字列は、2 番目のノードを起動するときに接続先のノードを識別するために使用します。

3 アイドル状態

2021-03-10 17:34:37 💤 Idle (0 peers), best: #0 (0x9d07…7cce), finalized #0 (0x9d07…7cce), ⬇ 0 ⬆ 0

はネットワークに他のノードがなく、ブロックが生成されていないことを示す。

ブロックが生成され始める前に、別のノードがネットワークに参加する必要があります。

6 ブロックチェーン・ネットワークへの2つ目のノードの追加

aliceアカウントのキーを使って起動したノードが稼働しているので、bobアカウントを使って別のノードをネットワークに追加できます。

すでに稼働しているネットワークに参加するので、新しいノードが参加するネットワークを特定するために稼働中のノードを使うことができます。

コマンドは以前使用したものと似ていますが、いくつか重要な違いがあります。

実行中のブロックチェーンにノードを追加するには

1 コンピュータで新しいターミナル・シェルを開く

2 Substrateノードテンプレートをコンパイルしたルートディレクトリに移動します。

3 以下のコマンドを実行して古いチェーンデータをパージする。

./target/release/node-template purge-chain --base-path /tmp/bob --chain local -y

コマンドに-yを追加することで、操作の確認を促されることなくチェーンデータを削除できます。

4 次のコマンドを実行して、bobアカウントを使って2つ目のローカル・ブロックチェーン・ノードを起動します。

./target/release/node-template \
--base-path /tmp/bob \
--chain local \
--bob \
--port 30334 \
--rpc-port 9946 \
--telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
--validator \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp

このコマンドと前のコマンドの以下の違いに注意してください。

2つのノードは同じ物理コンピュータ上で実行されるため、--base-path、--port、--rpc-port オプション異なる値を指定する必要があります。

このコマンドは-bootnodesオプションを含み、単一のブート・ノード(aliceによって起動されるノード)を指定します。

bootnodesオプションは以下の情報を指定します。

ip4は、ノードのIPアドレスIPv4形式を使用することを示します。

127.0.0.1は、実行ノードのIPアドレスを指定します。この場合、localhostアドレスになります。

翻訳者注
127.0.0.1
はIPv4のループバックアドレスとして予約されています。

tcpは、ピアツーピア通信に使用するプロトコルとしてTCPを指定します。

30333は、ピアツーピア通信に使用するポート番号を指定します。
この場合、TCP トラフィックのポート番号です。

12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp は、このネットワークで通信する実行ノードを指定します。

この場合、aliceアカウントを使用して開始されたノードの識別子が使用されます。

7 ブロックの生成と確定を確認する

2番目のノードを起動すると、ノードがピアとして互いに接続し、ブロックの生成を開始するはずです。

ブロックが確定されていることを確認するには

最初のノードを起動したターミナルに以下のような行が表示されていることを確認します。

これらの行では、ブロックチェーンに関する以下の情報を見ることができます。

  • 2番目のノードIDがネットワーク上で発見されました(現在、こちらは表示されていません。)(12D3KooWBCbmQovz78Hq7MzPxdx9d1gZzXMsn6HtWj29bW51YUKB)

  • ノードには1つのピア(1 peers)がある。

  • ノードはいくつかのブロックを生成している(最高: #3 (0x0c55...d51b))。

  • ブロックがファイナライズされている(ファイナライズ#1 (0xf086...9847))。


2 2番目のノードを起動したターミナルで同様の出力が表示されることを確認する。

3 ターミナル・シェルでControl-cを押してノードの1つをシャットダウンします。

ノードをシャットダウンすると、残りのノードのピア数がゼロになり、ブロックの生成が停止していることがわかります。例えば

4 シミュレートされたネットワークからチェーンの状態を削除したい場合は、/tmp/bob/tmp/aliceディレクトリの-base-pathコマンドラインオプションを指定してpurge-chainサブコマンドを使用します。

8 次のステップ

このチュートリアルでは、プライベートブロックチェーンネットワークを開始するための最初の基本ステップを紹介しました。

このチュートリアルでは、1台のコンピューター上で2つのノードを実行し、定義済みのアカウントを参加者として使用することで、プライベートネットワークをシミュレートしました。

学んだ内容

  • ノードテンプレートコマンドコマンドラインオプションの使い方。

  • ピアとして互いに通信する2つのブロックチェーンノードを起動する方法

  • プライベートブロックチェーンノードがブロックを生成していることを確認する方法

次のチュートリアルでは、このチュートリアルで学んだ情報を基に、他の参加者と別々のコンピュータ上で動作するノードプライベートネットワークを開始する方法を説明します。

信頼できるノードの追加では、以下を学びます。

  • 独自の秘密鍵ペアを生成する方法

  • 生成した鍵を使用するカスタムチェーン仕様を作成する方法。

  • カスタムチェーン仕様を使用するプライベートネットワークバリデーターを追加する方法。

このチュートリアルで問題が発生した場合は、問題を提出したり、質問したり、フィードバックを提供してください。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊