Bitcoin P2P 通信の seed

金曜日ですね。ビールが美味しいです。

Bitcoin で通信してみたいと思って bitcoin wiki を眺めていました。

BitcoinP2P で動作します。 Client-server のように決まったホストがないので、どこにつなげばいいかはどうやれば分かるでしょうか?

Network - Bitcoin Wiki に書いてありました。

3 つあるので順番に見ていきましょう。

Addr

ひとつめは固定の IP アドレスリスト。 これらの IP アドレスには bitcoin が動作するノードが居るので信じてつないでくださいね、というやつ。

bitcoin レポジトリの nodes_main.txt にかかれているのがこれでしょう。 先頭のほうをみると次のような行が確認できます。

1.34.168.128:8333
1.202.128.218:8333
2.30.0.210:8333
5.9.96.203:8333
5.45.71.130:8333

DNS

ふたつめは DNS

IP アドレスリストと同じく、このリストを信じてね。というやつですね。 bitcoin レポジトリの chainparams.cpp に書かれているのがこれぽいですね。 6つのドメインが書かれています。

  • seed.bitcoin.sipa.be
  • dnsseed.bluematt.me
  • dnsseed.bitcoin.dashjr.org
  • seed.bitcoinstats.com
  • bitseed.xf2.org
  • seed.bitcoin.jonasschnelli.ch

ソースの方には各行の後ろにコメントで人の名前がかかれています。 bitcoin 界で信頼の置ける御仁だったりするのだろうか?知らないけど。

DNS 問い合わせると IP アドレス一覧が返ってきます。 返ってくる IP アドレスの port 8333 で動いていると仮定していいんでしょうか。

試しに問い合わせてみるとこんな感じでズラーっと返ってきます。

$ dig +short dnsseed.bluematt.me
24.130.44.69
5.196.82.16
221.146.232.87
198.71.92.235
195.154.15.146
(以下続く)

他の 5つはそれぞれいくつか IP アドレスが返ってきたんですが、 seed.bitcoin.sipa.be はひとつもアドレスが返ってきませんねえ。 Pieter Wuille さん頑張って。とか言っとけばいいのだろうか?

IRC

3つめは IRC。えっ IRC

irc.lfnet.org の #bitcoin00 から #bitcoin99 までのルームのうち、ランダムなルームに join します。 nick は IP アドレスをエンコードしたものにします。 チャネルに参加している nick 一覧を得て、decode すれば bitcoin の seed が得られるって寸法です。

IRC使うのかー。洒落てるな(?)と思いましたが、この方法はバージョン 0.6.x 以降ではデフォルトでオフられているようです。

以上、最初の接続先を得る方法3つを学習しました。