banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.
follow
substack
tg_channel

実装するシンプルな分散ネットワーク

ブロックチェーンネットワークは分散型であり、これはブロックチェーンが単一の中央ノードに基づいているのではなく、多くの分散型ノードが共同でメンテナンスに参加していることを意味します。

このセクションでは、Python を使用してシンプルな分散型ネットワークをシミュレートします。このシミュレートされた分散型ネットワークでは、複数のノードが同じコンピュータ上で実行されますが、各ノードは異なるローカルポート番号を使用し、独立したスレッドで実行されます。機能的には、これらの独立したノードはそれぞれ独立して実行され、互いに影響を与えません。しかし、ブロックチェーン上では、これらのノードはお互いに協力してブロックチェーンの正確性を維持し、ブロックを検証し、新しいブロックを生成してチェーン全体を拡張します。

(1)ノードの定義

この分散型ネットワークを実現するために、まずブロックチェーン上のすべてのノードを保存するためのグローバル変数を定義し、ノードの構造を定義します。各ノードには一意のポート、ノード名、一意のウォレット、およびブロックチェーンのコピーが含まれています。コードは以下の通りです。

image

(2)ノードの起動

各ノードは起動時にブロックチェーン情報を初期化し、指定されたポートを監視し、他のノードのリクエストを処理します。コードは以下の通りです。

image

(3)ブロックチェーンの初期化

ブロックチェーンの初期化プロセスでは、ブロックチェーンネットワークに他のノードが存在するかどうかをまず判断し、存在する場合は初期化リクエストを送信し、そのノードのブロックチェーン情報を要求して自身のノードに同期させます。ネットワーク内の最初のノードの場合は、ジェネシスブロックを初期化する必要があります。具体的なコードは以下の通りです。

image

(4)リクエストの処理

ブロックチェーンの初期化後、各ノードは常に実行され、他のノードからのリクエストを処理します。ノードが受け取るリクエストは 3 つの場合に分かれます。1 つ目は初期化リクエストであり、ノードはこのリクエストを受け取ると、ローカルのブロックチェーン情報を返します。2 つ目は新しいトランザクションのブロードキャストであり、ノードはこの種類のリクエストを受け取ると、トランザクションの妥当性を検証し、有効であれば新しいブロックを採掘してローカルのブロックチェーンに追加し、ネットワーク全体にブロードキャストします。3 つ目は新しいブロックのブロードキャストであり、ノードはこの種類のリクエストを受け取ると、まずブロックの妥当性を検証し、有効であればローカルのブロックチェーンに追加します(実際のネットワークでは、この新しいブロックが現在のブロックチェーンに既に存在するかどうかもチェックする必要があります)。具体的なコードは以下の通りです。

image

他のノードのリクエストの処理

(5)データのブロードキャスト

以下のコードで定義されている broadcast_new_block 関数は、新しいブロックを分散型ネットワークにブロードキャストするためのものです。ノードリスト全体をループして、自身以外の他のノードに送信します。コードは以下の通りです。

image

上記の機能に加えて、ノードはトランザクションを送信し、分散型ネットワークの他のノードにブロードキャストすることもできる必要があります。コードは以下の通りです。

交易提交函数

上記の作業が完了したら、このブロックチェーンネットワークの機能をテストすることができます。まず、ノード 1 を初期化し、ポート 8000 でこのノードを実行し、ノード上のブロックチェーン情報を出力します。ジェネシスブロックを含むブロックチェーンが表示されるはずです。以下のようになります。

image

ノード 1 の初期化

次に、ノード 2 を作成し、ポート 8001 で実行し、このノードのブロックチェーン情報を出力します。ノード 2 のブロックチェーンにもジェネシスブロックが含まれているはずで、これはノード 1 から同期されたものです。以下のようになります。

image

ノード 1 とノード 2 のブロックチェーン情報

次に、2 つのノードの暗号通貨の状況を出力します。ノード 1 はジェネシスブロックを生成した後、1 つの暗号通貨を取得しているはずで、ノード 2 は暗号通貨を持っていないはずです。以下のようになります。

image

トランザクションの機能をテストするために、ノード 1 のアカウントからノード 2 のアカウントに 0.3 の暗号通貨を送金し、分散型ネットワークに送信します。以下のようになります。

image

トランザクションの機能のテスト

次に、2 つのノードのブロックチェーンの状況を再度出力します。2 つのノードにはそれぞれ 2 つのブロックが含まれているはずです。以下のようになります。

image

この時点で、ノードの暗号通貨の状況を出力します。ノード 1 のアカウントは 0.3 の暗号通貨になり、ノード 2 のアカウントは 0.3 の暗号通貨を受け取り、採掘により 1 つの暗号通貨を獲得して合計 1.3 の暗号通貨になるはずです。以下のようになります。

image

これで、シンプルで完全な機能を備えたブロックチェーンネットワークが完成しました。読者の皆さんがこの Python 実装からブロックチェーンの基本的な機能の実装方法を学ぶことを願っています。興味のある読者は、このプロトタイプを基に改良や最適化を行ったり、自分のプログラミング言語に基づいて別のバージョンのブロックチェーンプロトタイプを実装したりすることもできます。この Python で実装されたブロックチェーン関連のコードは GitHub に公開されています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。