ログ日記

作業ログと日記とメモ

Bitcoinについて

Bitcoinの欠点はクライアントソフトが重いこと
というタイトルで下書きしてたものを書き足して公開。



各所でBitcoinが話題になっていたが、どうも違和感がある。
言及している人はみんなBitcoinを使ったことがないんじゃないかという気がする。


Bitcoinの財布を持つということをプログラマー的に説明するとgitリポジトリをcloneしてpullし続けるのに近い。
各所で話題になっているBitcoinのWebサービスを利用することはgithub上でコードをcommitしているようなもので違和感がある。


しかしクライアントソフトを動かしてBitcoinを利用するところまでいくにはかなり大変だった。

Bitcoin-Qt initial sync can take a very long time to complete. You should make sure that you have enough bandwidth and storage for the full block chain size. If you know how to download a torrent file, you can speed up this process by putting bootstrap.dat (a previous copy of the block chain) in the Bitcoin-Qt data directory before starting the software.

https://bitcoin.org/en/download

このページに書かれているが、かなりの容量が要求される。現在では18GBのディスク容量が必要で、これは増え続ける。
十分なネットワーク帯域も必要と書いてある。
18GBもあるgitリポジトリをcloneして世界中で増え続けるcommitをpullし続けることを想像すると、ちょっとげんなりする。
自分のビットコインアドレスを作るのは早い。(たぶん)ネットワークに接続にいかない。git branch くらい軽い。


仕組みとしては誰でも口座が持てるようになってるんだけれども、誰でもすぐに使えるとは言い難い。




もう一つ、財布のデータファイルを管理することが自己責任という問題がある。
セキュリティ的な問題と消失の問題がある。


オフィシャル(?)のクライアントソフトを立ち上げて口座を作った段階では、データファイルは暗号化されていない。そのまま使っていると誰でも読める状態になっている。
ビットコインアドレスはプライベートキーから生成されるので、プライベートキーを守らなければならない。そこでパスフレーズを設定して暗号化する。この「プライベートキーをパスフレーズで暗号化する」という言い回しが、opensslなんかを使ったことがない人にとってはピンとこないと思う。
詳しくは https://en.bitcoin.it/wiki/Securing_your_wallet ここ。
真面目にやろうとするとだいぶめんどくさい。

A Bitcoin address is an encoded hash of a public key.

公開鍵暗号の概要を知っていると、上の一文でBitcoinが何なのかという理解が早まると思う。



それから何万円分のビットコインがあったとしても、rmですぐ消える。一瞬で消える。パソコンが壊れても消える。
一番簡単なバックアップ方法は
https://en.bitcoin.it/wiki/Backingup_your_wallet
ここに書いている中の Email-based Archival and Remote Backup で、データファイルをGmailに送ってしまうことだと思う。自分のPCよりはGmailの方が安全だ。
データファイルを保存しておけばプライベートキーは覚えなくても良い。パスフレーズだけ覚えておけば良い。
(蛇足:パスフレーズもヒントをメールで送っておけば良いと思う。自分の場合は過去に使い回していたパスワードから「サーバー1のやつ あっと ノートパソコン2のやつ」などと書いたメモを送る。指が覚えているので忘れることはないし、自分以外が見ても分からない。8文字@8文字でランダム17文字なのでそこそこ強力なはず)



こんな苦労をするくらいなら、オンラインでさくっと利用したくなる気持ちは分かる。が、個人的には一極集中的Webサービスが話題になるよりも先にBitcoinクライアントソフトが話題になればよかったのにと思う。
P2Pとしての利用はアーリーアダプターにすらまったく広まっていない感がすごくある。



本当は何日も前にこの記事を公開するつもりだったんだけども、書くならやっぱりBitcoinを手に入れてからだと思って、paypalのアカウント作って認証待ちしてBitcoinに変えて手続き待ちしてってやってると時間がかかった。
最初の0.001BTCを手に入れること自体がハードルが高い。


待ってる間に
http://www.slideshare.net/YuichiroShibata/bitcoin-testnet
ここを参考にプライベート(?)テストネットを作ってしまった。
テストで良いからソロマイニングを試したい人は
https://gist.github.com/nishimura/9369444
どうぞ。
他に人が居ないのでCPUでも数分〜数十分ほどで採掘できる。
bitcoin-qtを立ち上げてから

bitcoind setgenerate true [スレッド数]

で。



現状、BitcoinもLitecoinもmining poolの引き出し最少額まで貯めるのがしんどい。
ちょっと試したいけどプライベートネットワークは嫌だという人はmonacoinが良いかもしれない。
最近のPCならGPUがなくてもmining poolに登録してCPUマイニングで数時間待てば引き出せそう。




余談
口座とか財布とかビットコインアドレスとか書いたけども、それぞれaccountとwalletとbitcoin addressという別の概念を一応念頭に置いている。
wikiで使われているaccount=口座は、bitcoin-qtではラベルという表記で、統一してくれと言っている人も居る。
walletはデータファイルwallet.datとほぼイコール。自分の全データ。
bitcoin addressは振込先なんだけども、実は口座の概念とは異なる。送金するときは相手のビットコインアドレスを指定するが、自分のビットコインアドレスは(何個持っていても)指定しない。自動生成・自動計算専用、使い捨て感が強い。
この辺のニュアンスも重要そうな気がする。