Bitcoin P2P 通信の seed
金曜日ですね。ビールが美味しいです。
Bitcoin で通信してみたいと思って bitcoin wiki を眺めていました。
Bitcoin は P2P で動作します。 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
irc.lfnet.org の #bitcoin00
から #bitcoin99
までのルームのうち、ランダムなルームに join します。
nick は IP アドレスをエンコードしたものにします。
チャネルに参加している nick 一覧を得て、decode すれば bitcoin の seed が得られるって寸法です。
IRC使うのかー。洒落てるな(?)と思いましたが、この方法はバージョン 0.6.x 以降ではデフォルトでオフられているようです。
以上、最初の接続先を得る方法3つを学習しました。