【完全保存版】2つのnodeを使ってSubstrateでブロックチェーンを立ち上げよう!
この記事は、下の記事を翻訳・編集したものです。
また、こちらの記事が完了した後に実行することを想定しています。
1 ネットワークのシミュレーション
0 はじめに
このチュートリアルでは、プライベートなバリデータの権限セットでプライベートブロックチェーンネットワークを開始する基本的な紹介をします。
Substrate ノードテンプレートは、権限のあるコンセンサスモデルを使用し、ブロックの作成を権限のあるアカウントのローテーションリストに制限します。
認証されたアカウント(オーソリティ)は、ラウンドロビン方式でブロックを作成する責任を負います。
このチュートリアルでは、ノードがブロックを生成できるようにするオーソリティとして2つの定義済みアカウントを使用することで、オーソリティ・コンセンサス・モデルが実際にどのように機能するかを見ていきます。
このシミュレートされたネットワークでは、2つのノードは異なるアカウントとキーを使用して開始されますが、単一のコンピュータ上で実行されます。
始める前に、以下を確認してください。
RustとRustツールチェーンをインストールし、Substrate開発用の環境を設定した。
ローカルブロックチェーンの構築を完了し、Substrateノードテンプレートをローカルにインストールしている。
ソフトウェア開発やコマンドラインインターフェイスの使用に慣れている。
ブロックチェーンやスマートコントラクトプラットフォームに慣れている。
1 チュートリアルの目的
このチュートリアルを完了することで、以下の目的を達成できます。
定義済みのアカウントを使用してブロックチェーンノードを開始する。
ノードの起動に使用される主なコマンドラインオプションを学ぶ。
ノードが実行中で、ブロックを生成しているかどうかを判断する。
実行中のネットワークに2台目のノードを接続する。
ピアコンピュータがブロックを生成し、確定することを確認する。
2 最初のブロックチェーン・ノードを開始する
鍵を生成して自分のプライベートSubstrateネットワークを開始する前に、localと呼ばれる事前に定義されたネットワーク仕様を使用して、事前に定義されたユーザーアカウントで実行する基本原理を学ぶことができます。
このチュートリアルでは、aliceとbobという定義済みのアカウントを使用して、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のアドレスになります。
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つのブロックチェーンノードを起動する方法。
プライベートブロックチェーンノードがブロックを生成していることを確認する方法。
次のチュートリアルでは、このチュートリアルで学んだ情報を基に、他の参加者と別々のコンピュータ上で動作するノードでプライベートネットワークを開始する方法を説明します。
信頼できるノードの追加では、以下を学びます。
独自の秘密鍵ペアを生成する方法
生成した鍵を使用するカスタムチェーン仕様を作成する方法。
カスタムチェーン仕様を使用するプライベートネットワークにバリデーターを追加する方法。
このチュートリアルで問題が発生した場合は、問題を提出したり、質問したり、フィードバックを提供してください。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊