Nodes in the Bitcoin Network: Comparative Measurement Study and Survey

Abstract


この論文では、Bitcoin P2Pネットワークにいわゆる”ボランティア”(フルノード)がどれだけいるのかを調査し、2013-2016 年に行われた先行研究と比較を示す。この調査には Bitcoin ノードの IP アドレス、ネットワーク規模、地理的分布、プロトコル、クライアントバージョン、ネットワークレイテンシを含んでおり、以前と比べてどのような変化が見られるかを示す。また、調査結果に基づき高速なデータ伝搬と接続性の向上のために、距離ベースの簡単なピア選択方法を提案する。この方法はデータ分布の遅延を減らすことが見込まれることが評価された。

BITCOIN-NODE-SCANNER


Bitcoin ネットワークの情報を集めるために作成した BITCOIN-NODE-SCANNER の構造について解説する。このスキャナは Bitcoin プロトコルに基づきクライアントとして動作するためにその機能の一部を実装している。できる限り多くの Bitcoin ノード(フルノードも軽量ノードも含む)の情報(IP アドレス)を集め、各ノードの接続性を検証する。もし、接続できればそのノードのプロトコルバージョン、クライアントエージェントタイプ、スキャナからの応答時間などが得られる。先行研究でも同じような手法で行われている。

スキャナが動き始める時、スキャナは他のピア情報を何も知らない。getaddr コマンドをDNS シードに発行することでそのシードが知っているノードのリストを得られる。(この論文の著者の経験では、DNS シードは通常~400ノード(IPv6 を含む)の情報を送ってくるらしい。)到達性のあるノードに同じ操作(教えてもらったノードにgetaddr コマンドを送って新たなノード情報を得る)を反復的に繰り返せば、より多くのノードを見つけることができる。

上図はスキャナの概略を表している。< IP Queue > はまだ接続性が確認されていないノード情報をいれておくもので、getaddr で得られた情報を入れていく。ただし、< Filter > で同じピアが重複してキューに入らないようにしている。フィルタリングと同時にすべての一意の IP アドレスは < Data Repository (DB) > の一部である Connection DB に保存される。

そして、スキャナは < IP Queue > から IP アドレスをデキューしてそのノードに接続を試みる。もし、失敗すれば結果を Connection DB に記録し次のノードを検証する。もし、接続に成功すればスキャナは getaddr コマンドを送信してそのノードが知っているノード情報を得る。得られたノード情報は < Filter > でフィルタリングを行い、まだ接続性を検証していない新規のノード情報のみをキューに入れる。この一連の手続きを < IP Queue > が空になるまで行う。

もし、スキャナがノードとの接続に成功したが10秒間メッセージが返ってこなければ、タイムアウトとして接続を切断し次のノードの検証を開始する。

Measurement


Methodology

スキャナを使用して 2018 年 1 月 16 日から 2 月 21 日の 37 日間毎日調査を行なった。各スキャンは 8 時間から 10 時間を必要とした。37 日間というの期間は先行研究と同じ条件にしたためである。今回の調査では IPv6 はサポートしていないため、実際の値とは多少の誤差があることに注意されたい。

以下の節で使われる単語を定義しておく。

これらの定義は潜在的な制限を持っており正確でない場合がある。なぜなら、ノードは動的 IP アドレスを使用していたり、NAT 下にいたり、ファイヤウォール下にいたり、マイニングプールに隠れていたりする場合があるからだ。さらに、返信を返さないフルノードもいるかもしれないし、getaddr の返信でそのノードが知っているすべてのノード情報が返ってこないかもしれない(addr メッセージの上限は 1,000 ノードだから)。これらの理由により、正確な数字を集めることは難しく、フルノードとクライアントノードの違いも曖昧である。

Number of nodes and IP addresses

37 日間の調査によって合計で 1,099,322 の一意な IP アドレスを見つけることができた。そのうち 504,283(45.8%)ノードは初日の調査で発見できた。上図はその日の調査によって新しく見つけたノードの数の推移を表している。この図から、1 日で新しく見つかったノードの数が約 12,000 に向かって徐々に減少していることがわかる。全体のうち 23,725 個がフルノードであり、そのうち 8,527 個が初日に見つかった。平均して毎日約 ~8,500 個のフルノードが発見でき、新しく見つかるフルノードは約 300 ~ 1,000 個であった。下図は 1 日ごとに見つかった一意の IP アドレス数と固有の IP アドレスの累積の推移を表している。また、見つけたフルノード数の推移も示している。

見つけた IP アドレスの総数は 2013 年に比べて 31.5 倍の量が観測されたが、フルノード数は 2.4 倍しか増加していなかった。これは、軽量ノードばかりが増えたことを示している。つまり、ブロックチェーンをローカルに保存し P2P ネットワークを維持するフルノードが増えていないことがわかる。

Port number

Bitcoin で使われているデフォルトの TCP ポート番号は 8333 である。いくつかのノードはハードフォークやファイヤウォール、マイニングプールなどの様々な理由によって異なる番号を使用している。例えば、Bitcoin からハードフォークした暗号通貨は異なるポート番号をデフォルトで使用しているが、同じプロトコルやネットワークを使用している(Bitcoin Cash:8335, Bitcoin Gold:8338)。今回の統計ではフルノードの 96.8%、すべてのノードの 93.7% が 8333 番を使用していた。これは多くのユーザはポート番号を変更していないことがわかる。その他では、8555 (3.7%), 9145 (1.5%), 8338 (0.41%), 8334 (0.22%) など。

Geographical location

集められた IP アドレスの地理的位置を決定するために geolite2 を使用した。上図は各国にどれくらいのノードが分散されているかを表している。アメリカは "すべてのノード" と "フルノード" どちらも全体の 30% を超えていることがわかる。フランスやオランダ、カナダは比較的にフルノードの割合が多い。フルノードの地理的分布の感覚を得るために任意の 2 つのピア間(観測で見つけたフルノードのペア)の距離の累積分布関数(CDF)を下図に示す。この図は物理的にどれくらいの距離でどれくらい群がっているかを表している。これは 2,500km 以下と 5,500km ~ 12,000km に急な斜面があり、4,000km ~ 6,000km と 12,500km 以上では緩やかになっていることがわかる。これは北大西洋を跨いだ北アメリカとヨーロッパ間の距離が約 6,000km ~ 8,000km であり、太平洋を跨いだアジアと北アメリカ間が 95,00km ~ 11,000km である。アメリカが最もノードが多いので同じ大陸内(< 2,500km)と大陸間(6,000km ~ 12,500km)で多くのペアができている。

Peer selection rule


この章では、Bitcoin ネットワークでの情報伝搬遅延を減らすことができるシンプルで下位互換性のある距離ベースのピア選択ルールを提案する。ネットワーク遅延はブロックチェーンフォークの主要な原因の 1 つであるが、コンセンサスメカニズムの不一致を意味するので、できる限り避けなければならない。Bitcoin でのデフォルトの振る舞いはランダムにピアを選択する。我々の目的は、プロトコルを変えることなく接続性を向上するためにこのランダム選択を修正することである。詳細は以下の通りである。

Proposal

Bitcoin クライアントソフトウェアのデフォルトでは、最大 8 つの外部接続と 117 個の内部接続を定義している。ノードは他のノード情報を得るとそこから接続するノードを選ぶ。選択されたノードは接続要求を断るかもしれない。例えば、フルノードではない、内部接続を受け付けたくない、すでに最大数の接続を持っているなどの理由がある。

我々の提案手法はフルノードの地理的分散に基づいている。我々のアイデアでは $x$ 個のノードを近距離ノードから選ぶ。$y$ 個のノードを中距離から選ぶ。$z$ 個のノードを長距離から選ぶ($x + y + z = 8$)。近距離 / 中距離 / 長距離 の違いは上図の勾配が増えている境界を元にした確率ベースになっている。物理的な距離はネットワークトポロジーによって決められる伝搬遅延は間接的に関連がある。

提案手法を比較するために 5 つのルールを実装した。

Evaluation methodology

提案手法を評価するために Bitcoin マルチホップオーバーレイネットワークにおける再帰的フラッディングの情報伝搬遅延をシミュレーションするイベントベースのシミュレータを JAVA に実装した。このシミュレータはインプットでフルノードの IP アドレスリストを渡す。任意の 2 つのノード間での伝搬遅延をシミュレートする必要があるため、全 IP アドレスに ping を送って集めた RTT を使用した。ただし、Bitcoin フルノードにアクセスすることなく実際のネットワークトポロジーを知ることはできないので、我々のアプローチはベストエフォートな近似値である。

Evaluation result

上図は様々なピア接続ルールを用いたときの情報伝搬遅延を示している。"Near-Mid-Far" アプローチが他の手法に比べて、平均値・中央値・最大値・最小値・標準偏差が小さくなったことがわかる。また、"Nearest" と "Clustering" 手法は好ましくないことを示している。"Near-Mid-Far" 手法による改善は大きなものではないが、実験において明らかで一貫した向上があった。"random" 手法は実装簡潔性のトレードオフである向上志向な戦術の合理的な近似であり、ネットワーク内からの完全なトポロジー情報を必要としない選択手法である。

下図は上図の結果における CDF を表している。これは "Near-Mid-Far" 手法は情報伝搬の遅延分散を改善する手法であることをより明らかにしており、"Nearest" と "Clustering" 手法は使うべきではないことを示している。その原因は情報を伝搬するために必要なホップ数の CDF を示した下図から推察される。そのグラフは、より良いピア選択ルールは接続性グラフに影響してホップ数の観点からネットワークの直径が減少し、結果として遅延が少なくなる。

Conclusion


この論文では 2018 年の 37 日間の Bitcoin ネットワークをスキャンすることによって Bitcoin ノードの比較計測研究を表した。我々の計測では Bitcoin ネットワークに約 100 万ユーザがおり、約 8,500 ~ 23,000 個が情報を伝搬するフルノードとして機能している。フルノード数も増加しているが、トランザクション数や Bitcoin の価値の増加に比べてかなりゆっくりとした増加である。観測研究から接続性と情報の高速な伝搬を向上させるためにシンプルな距離ベースのピア選択手法を提案した。評価結果では、提案した軽量かつ下位互換のあるピア選択手法はデータ伝搬遅延を減らすポテンシャルがあることを示した。今後の研究として、より正確な Bitcoin ネットワークをシミュレーションできる NS-3 へのオープンソースライブラリを設計し実装することを計画している。