Re: IRC ブートストラッピングについて

人物: Xunie

我々はみんなブートストラップシステムについて話しているが、私のアイデアはもう少し良いかもしれない。

ユーザーが初めてホスト上で bitcoin を起動すると、最初に接続先のノードのリストをダウンロードする。 (もちろん、bitcoin にハードコードできる静的ノードがたくさん揃うまでの話だが……) 次にクライアントは、ダウンロードしたリスト上の IP に接続を試みる。前回 bitcoin を起動したときからリストを持っているなら、それらに接続する。 接続できたら、クライアントは各ノードに対して知っているノードのリストを問い合わせ、自分のノードリストを更新する。 完全なリストが取得できたら、ハードドライブに保存し、メモリーにもコピーを保持する。(これは、実際にインデックスサーバーに接続しなくてもノードのリストを持っていたいからだ。) そして最終的に、ノードは完全にネットワークに接続された状態になる。 新しいノードが接続してきたとき(「新しいノードパケット」を受信したとき)、リストはメモリー上で更新されると同時に、再びハードドライブにも保存される。 新しいノードでのリスト更新をできる限り帯域幅に優しくするため、私は各ノードがネットワークに接続してきた新しいノードの IP を、自分が知っている全ノードに「エコー」することを提案する……

利点:

  • ブートストラップを念頭に置いている。
  • ノードリストを持っているクライアントに対して分散している

欠点:

  • ブートストラップが終わるまで、新しいクライアントは新しいノードリストを取得するためにサーバーに接続する必要がある。

私の目にはこれがブートストラップ問題への最良の解決策に思える…… 追伸:もしこれを実装するなら、受け取った「新しいノードパケット」に偽の IP や.gov ドメインに解決される IP が含まれていないかチェックしたくなるかもしれない! 😛