ブロックチェーンネットワークは分散型であり、これはブロックチェーンが単一の中心ノードに基づいているのではなく、多くの分散型ノードが共同で維持されていることを意味します。
このセクションでは、Python を使用してシンプルな分散型ネットワークをシミュレートします。このシミュレートされた分散型ネットワークでは、複数のノードが同じコンピュータ上で実行されますが、それぞれのノードは異なるローカルポート番号を使用しており、独立したスレッドで実行されます。機能的には、これらの独立したノードは個別に実行され、互いに影響を与えません。しかし、ブロックチェーン上では、これらのノードはお互いに協力してブロックチェーンの正確性を維持し、ブロックを検証し、新しいブロックを生成してチェーン全体を拡張します。
(1)ノードの定義
この分散型ネットワークを実現するために、まず、ブロックチェーン上のすべてのノードを保存するためのグローバル変数を定義し、ノードの構造を定義する必要があります。各ノードには一意のポート、ノード名、一意のウォレット、およびブロックチェーンのコピーが含まれています。コードは以下の通りです。
(2)ノードの起動
各ノードは起動時にブロックチェーン情報を初期化し、指定されたポートを常に監視し、他のノードのリクエストを処理します。コードは以下の通りです。
(3)ブロックチェーンの初期化
ブロックチェーンの初期化プロセスでは、まずブロックチェーンネットワークに他のノードが存在するかどうかを判断し、存在する場合は初期化リクエストを送信し、そのノードのブロックチェーン情報を要求して自身のノードに同期します。ネットワーク内の最初のノードである場合は、ジェネシスブロックを初期化する必要があります。具体的なコードは以下の通りです。
(4)リクエストの処理
ブロックチェーンの初期化後、各ノードは常に実行され、他のノードからのリクエストを処理します。ノードが受け取るリクエストは 3 つの場合に分かれます。1 つ目は初期化リクエストであり、ノードはこのリクエストを受け取ると、ローカルのブロックチェーン情報を返します。2 つ目は新しいトランザクションのブロードキャストであり、ノードはこのリクエストを受け取ると、トランザクションの妥当性を検証し、有効であれば新しいブロックを採掘し、ローカルのブロックチェーンに追加し、ネットワーク全体にブロードキャストします。3 つ目は新しいブロックのブロードキャストであり、ノードはこのリクエストを受け取ると、まずブロックの妥当性を検証し、有効であればローカルのブロックチェーンに追加します(実際のネットワークでは、この新しいブロックが現在のブロックチェーンに既に存在するかどうかもチェックする必要があります)。具体的なコードは以下の通りです。
他のノードのリクエストの処理
(5)データのブロードキャスト
以下のコードで定義されている broadcast_new_block 関数は、新しいブロックを分散型ネットワークにブロードキャストするためのものです。ノードリスト全体をループして、自身以外の他のノードに送信します。以下のコードを参照してください。
上記の機能に加えて、ノードはトランザクションを送信し、分散型ネットワークの他のノードにブロードキャストすることもできる必要があります。以下のコードを参照してください。
上記の作業が完了したら、このブロックチェーンネットワークの機能をテストすることができます。まず、ノード 1 を初期化し、ポート 8000 でこのノードを実行し、ノード上のブロックチェーン情報を出力します。ジェネシスブロックが含まれていることがわかります。以下のコードを参照してください。
ノード 1 の初期化
次に、ノード 2 を作成し、ポート 8001 で実行し、このノードのブロックチェーン情報を出力します。ノード 1 から同期されたジェネシスブロックが含まれているはずです。以下のコードを参照してください。
ノード 2 の初期化
次に、2 つのノードの暗号通貨の状況を出力します。ノード 1 はジェネシスブロックの生成後に 1 つの暗号通貨を取得しましたが、ノード 2 は暗号通貨を持っていません。以下のコードを参照してください。
トランザクション機能をテストするために、ノード 1 のアカウントからノード 2 のアカウントに 0.3 の暗号通貨を送金し、分散型ネットワークに送信します。以下のコードを参照してください。
トランザクション機能のテスト
次に、2 つのノードのブロックチェーンの状況を出力します。2 つのノードの両方に 2 つのブロックが含まれていることがわかります。以下のコードを参照してください。
その時点でのノードの暗号通貨の状況は、ノード 1 のアカウントが 0.3 の暗号通貨になり、ノード 2 のアカウントが 0.3 の暗号通貨を受け取り、マイニングにより 1 つの暗号通貨を獲得して合計 1.3 の暗号通貨になるはずです。以下のコードを参照してください。
トランザクション後の暗号通貨の状況の出力
以上で、シンプルで完全な機能を備えたブロックチェーンネットワークが完成しました。読者の皆さんがこの Python 実装からブロックチェーンの基本的な機能の実装方法を学ぶことを願っています。興味のある読者は、このプロトタイプを改善し、最適化するか、自分が習得しているプログラミング言語を使用して別のバージョンのブロックチェーンプロトタイプを実装することもできます。この Python で実装されたブロックチェーン関連のコードは GitHub に公開されています。