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つを学習しました。
Bitcoin アドレスの残高を調べる
というわけでビットコインのアドレスは使い回すは一般的には良くないが、寄付などでは良いのではないかと書いたが、寄付の受付をアドレス使い回しでやると良いといっている記事があった。
ブロックチェーンは公開された帳簿なので、誰でも全ての取引を照会することができます。したがって、寄付金を募っているウォレットにはいくら集まったのか、またどのような資金の使われ方がされているのかが一目瞭然なのです。
全取引が一目瞭然ということは悪質な詐欺を極限まで減らすことができるということです。
blockchain を全部舐めれば、どのアドレスにいくらの残高があるとか、どのアドレスに対して支払いを行ったかとかがわかるはずですね。
Blocktrail という会社が運営している Block explorer というサービスでは、(おそらく)アドレスごとに取引の内容をデータベース化しており、アドレスの残高を眺めたりすることができます。
BLOCKTRAIL | Bitcoin API and Block Explorer
たとえば この記事 で寄付受付用に公開されているアドレスがあります。
Anyway, if you like to donate for one of my projects or this article, feel to send bitcoins to 15B8b5yCB5sK7hSwbhyQQZpHrRYzvmxrAA ;-).
このアドレスの残高を見てみましょう。
これまでに6回の取引が行われ、0.71068296 BTC の残高があることがわかります。
Apache財団 のアドレスは少しずつですが寄付が集まってますね。
このように寄付に単一の bitcoin address を使えば「みなさまの寄付により〜円集まりました」とかいちいち集計しなくても誰でもわかって便利です。
一方で Mozilla財団 や Wikipedia では寄付の受付に coinbase というサービスを利用しており、一定時間ごとに違うアドレスが使われているようです。
まだまだ知らないことが多いので同じアドレスで寄付を受け付けることによるデメリットもあるのかもしれませんが、同じアドレスで受け付けたほうが透明性の点からは評価できますね。
Bitcoin のアドレスは毎回変えよう
bitcoin のアドレスって使い回しできるけどしちゃいけない類のものだったのか https://t.co/j8XPuciLmm
— KAWACHI Takashi (@kawachi) 2015, 11月 16
この先 bitcoin を扱うためのリテラシの必要性が高まるのではないかと感じている今日このごろです。 自分の子ども世代では国の発行する通貨に追加してデジタル通貨も扱えなきゃいけないんだろうなあ、大変だなあ。
というわけで bitcoin について調べているのですが、 Bitcoin に送金する際に使われるアドレスは毎回変えたほうが良い、と Address reuse - Bitcoin Wiki に書いてありました。 アドレスの使い回しはできるけどやらないほうがいい、ってことですね。 Bitcoin beginner の私は知りませんでした。
同じアドレス(以下、アドレスAと呼びます)をずっと使っていた場合、個人と結び付けられた時に厄介なことになります。 Bitcoin では取引内容、すなわちアドレスXからアドレスYへいくら移動したという情報が全て公開されています。 すなわち、アドレスAの残高も丸見えなわけです。
私が通販で買い物をして、アドレスAから送金して、自分の住所へ何かを届けてもらったとします。 そうすると、通販の運営者は、私という個人とその住所、アドレスAを関連付けることができます。 もし私がアドレスAをずっと使いまわしており、全貯蓄の100億円相当*1をアドレスAに入れていたとしたらどうなるでしょう。 通販の運営者には、私がどこに住んでおり全貯蓄がいくらあるか分かることになります。 悪意のある人にこの情報が渡ると、恐喝の対象になったり、何かの際に足元を見られたりするわけです。 あまり気持ちの良いものではないです。
ではどうするかというと、一度取引に使ったアドレスはもう使わないというのが正しい運用になります。 そうすると bitcoin の受け取り毎に別のアドレスを使うことになります。 アドレスが増えて面倒になりそうですが、複数のアドレスをまとめて扱える wallet というものを使うのが普通みたいですね。
逆に残高がわかってもいい状況、たとえば募金を募る場合などではひとつのアドレスでいいのかもしれません。
*1:もちろんそんなに持ってませんよ…