Mastering Bitcoinの第6章をまとめます。

Perr-to-Peerネットワークアーキテクチャ

ビットコインはインターネット上のpeer-to-peerネットワークアーキテクチャとして構築されています。
peer-to-peerはP2Pと呼ばれ、そのネットワークに参加しているノードが全てクライアントであり、またサーバーであるようなネットワークです。

ノードタイプと役割

ビットコインノードは、

  • ルーティング
  • ブロックチェーンデータベース
  • マイニング
  • ウォレット
    という機能の集合体です。
    これら4つ全ての機能を持つものがフルノードと呼ばれます。

また、全てのノードはネットワークに参加するためにルーティング機能を必ず持っています。

ネットワークの発見

新しくノードを建てた場合、まず最初にネットワーク内の他のノードを見つけなければなりません。
他のノードのIPを全く持っていない場合、「DNSシード」に問い合わせることでランダムにIPのリストを返してくれます。
新しいノードが他のノードと一度接続を確立すると、そのノードを通して隣接するノードに自分のIPを知らせることができます。
また、他の隣接するノードのIPのリストも受け取ることができます。

在庫の交換

フルノードがぴあと接続して最初に行うことは、完全なブロックチェーンを構築することです。
ブロックチェーンの同期はversionメッセージから始まります。
versionメッセージには自分の現在のブロックチェーン高の情報を含んでおり、これを見ることで自分が相手のノードよりブロック数が多いのか少ないのか分かります。
自分のブロックが最新でない場合はリクエストを送り、相手に追いつくまでブロックをもらい続けます。
こうすることでブロックチェーンを最新の状態に更新することができます。

SPVノード

全てのノードがブロックチェーンの全てのデータを持っているわけではありません。
多くのビットコインクライアントはディスク容量や計算速度が限られているスマートフォンやタブレット、組み込みシステムなどのデバイス上で動作するように設計されています。
このようなデバイスではSPV(simplified payment verification)が使われます。
SPVノードはブロックヘッダのみをダウンロードし、トランザクション自体は使用しません。
そのため、フルブロックチェーンの1/1000くらいの大きさになります。
SPVノードは必要に応じてトランザクションの情報をフルノードから受け取って使用します。
この時、プライバシーに関するリスクからブルームフィルタと呼ばれる機能を使います。

ブルームフィルタ

ブルームフィルタはN個のビット列とM個のハッシュ関数からなります。
これにハッシュ関数に入力する探索パターンを付けてピアに送信します。
これを受け取ったピアは探索パターンをハッシュ関数に入力します。
ハッシュ関数は1〜Nの数字を返すようになっており、これはビット列の場所に対応しています。
M個の出力値に対応する場所のビットを1にしていきます。
最終的に得られたビット列を見て、1になっている部分が一致しているトランザクションをまとめて返します。
こうすることでリクエストしたノードが本来どのトランザクションを欲しがっているのか分からなくしています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です