2019[キャッチアップ]ブロックチェーンを動かす3(Python)株式会社プライムストラクチャーの若手エンジニアのSayaです。今回も前回同様、キャッチアップを兼ねてこちらを参考にブロックチェーン技術を検証していきたいと思います。ブロックチェーンとのやりとりを行う今回はPostmanを利用してローカルでやりとりをします。blockchain.py`を入力してblockchain.pyを起動します。次にPostmanを開き、下記の画像で表す赤枠内にhttp://localhost:5000/mineを入力してGETリクエストをSendします。するとブロックのマイニングが行われ、下記の画像のように表示されます。このtransactionsに入っている3つの値をコピーして、POSTリクエストでhttp://localhost:5000/transactions/newを指定し、Body、raw、JSONを選択して貼り付けてSendします。すると下記のようなメッセージが表示されます。次にhttp://localhost:5000/chainをGETリクエストすると、下記のようにマイニングされたブロックの数が表示されます。}コンセンサスアルゴリズム(合意形成)コンセンサスアルゴリズムは改ざんを防止する為に分権化する重要な技術で、仮想通貨によって取り入れられている技術が異なります。プルーフオブワークもその一つです。コンセンサスアルゴリズムを実装する前に、まずネットワーク上の隣接するノード同士を知らせるようにします。ネットワーク上の各ノードは、ネットワーク上の他のノードのレジストリを保持する必要があります。したがって、より多くのエンドポイントが必要になります。URL形式で新しいノードのリストを受け入れる。コンセンサスアルゴリズムを実装して、ノードが正しいチェーンを持つことを保証する。ブロックチェーンのコンストラクタを変更し、ノードを登録するメソッドを用意します。下記のコードを該当する箇所に追加します。self.nodes.add(parsed_url.netloc)コンセンサスアルゴリズムの実装あるノードが別のノードと異なるチェーンを持つ場合に競合します。これを解決するために、一番長い有効なチェーンが信頼できるものとしてルールを作成します。このアルゴリズムを使用して、ネットワーク内のノード間の合意を得ます。下記のコードを該当する箇所に追加します。Falsevalid_chain()は各ブロックのハッシュとプルーフの両方を検証することによってチェーンが有効かどうかをチェックします。resolve_conflicts()はすべての隣接ノードをループしてチェーンをダウンロードし、valid_chain()で検証します。長さがより大きい有効なチェーンが見つかった場合は、それに置き換えます。APIに2つのエンドポイントを登録します。1つは隣接ノードを追加する為のもので、もう1つは競合を解決する為のものです。'__main__':の上に貼り付けてください。200これにより、他のマシンからでもネットワーク上の別のノードを回すことができるようになります。同じマシン上の異なるポートを使用してプロセスを回すこともできます。今回は一つのマシンで2つのノードを動かしてみたいと思います。blockchain.pyをコピーしてblockchain2.pyを作成します。port=5001)とします。blockchain.pyと新しいタブでblockchain2.pyを起動します。以下の画像のようにPostmanで新しいノードを登録します。このようにして新しいノードが登録されたことが分かります。したらノード1であるhttp://localhost:5000/とノード2であるhttp://localhost:5001/でmineします。ノード1で3回mineしました。http://localhost:5000/nodes/resolveで確認すると、3回mineされ、かつメインのチェーンになっていることが分かります。次にhttp://localhost:5001/で5回mineします。その後またhttp://localhost:5000/nodes/resolveで確認します。ノード2の方が最も長いチェーンである為、ノード1が置き換えられました。この他にも色々な順番でやってみると面白いかもしれません。まとめブロックチェーンの基本的な機能を一通り見ていき、様々な工夫がなされていることやその動きが分かりました。最近ではこの技術を様々な分野に応用していると聞くので、どのような分野で活躍するのか今後色々と調べてみたいと思います。OneGithubに今回行なった内容が載せてあります。