1 週間ほど前、#bitcoin と#bitcoin-dev チャンネルでとても親切な Freenode のスタッフに出会った。彼は#bitcoin チャンネルがボットネットのコマンド・アンド・コントロールチャンネルのように見えるとして Freenode のレーダーに引っかかったと教えてくれた。しかし、ビットコインの仕組みと IRC が必要な理由を説明したところ、現在の規模であればチャンネルは問題ないと言ってくれた。
しかし、これがきっかけで考えるようになり、その週の後半に IRC でもこの話題を議論した。その結果、IRC はブートストラッピングには不適切な方法であるという結論に至った。特に現在の形式においてはなおさらだ。現在、各クライアントは IRC に接続し、接続し続ける。/who コマンドと join メッセージを使い、クライアントは発見した IP にポート 8333 で接続するブートストラッピング方式を取っている。しかし、クライアント同士はビットコインプロトコルを通じて内部的にも通信し、新しいノードをブロードキャストしている。それでもなお、常に IRC に接続し続けている。これにはいくつかの欠点がある:
ブートストラッピングに IRC 接続が必要(ファイアウォールがしばしばブロックし、Freenode は TOR をブロックする)単一障害点がある(Freenode)自前のインフラを使わず Freenode のサービスにただ乗りしている。多くのサーバーは実際に MOTD でボット接続を禁止している。些細な点:ビットコイン内の追加プロトコルが余計な複雑さをもたらしている このフォーラムには常時稼働しているビットコイン IP のリストがすでに出回っており、良いアイデアではあるが、あまりスケーラブルではない。そこで以下の解決策を提案する:Gnutella と MUTE は非常に似たブートストラッピングの問題に直面している。それを解決するために、「Gnutella Webcache」のリストに依存している。これらの Webcache はボランティアがシンプルな PHP サーバー上で運用しており、マスターリストが各 Gnutella/MUTE リリースに同梱されている。クライアントがネットワークに参加したい場合、HTTP を通じて Webcache の 1 つか 2 つに他のノードのリストを問い合わせ、自身もそのリストに追加される(通常、最後に X 件確認されたクライアントのリストだ)。数時間(または数日)ごとに、実行中のクライアントは Webcache に再接続し、まだ稼働中でリストから削除する必要がないことを通知する。ビットコインにも同じ仕組みを実装することを提案する。ボランティアが安価な PHP ウェブスペースでこれらの Webcache を運用し、Satoshi または Sirius に URL を伝え、各リリースにリストを追加してもらう。これにより、制限的なファイアウォールや TOR 環境下のユーザーも手動でノードを探すことなくビットコインを使用でき、はるかにスケーラブルなアプローチとなる。(おまけとして、whatismyip.com などへの HTTP コールも不要になる)
もちろん、ビットコインのブートストラッピングにはもっと良いアイデアがあるかもしれないし、ぜひ聞きたい。あるいは Webcache のアイデアへの提案でも。ぜひここに投稿してほしい!
よろしく、 soultcer