読者です 読者をやめる 読者になる 読者になる

中本哲史「ビットコイン: P2P電子マネーシステム」

話題なので読んでみた。

  • 1 序
  • 2 取引
  • 3 タイムスタンプサーバー
  • 4 プルーフオブワーク
  • 5 ネットワーク
  • 6 インセンティブ
  • 7 ディスク容量の再利用
  • 8 簡易版支払い検証
  • 9 値の分割と結合
  • 10 プライバシー
  • 11 計算
  • 12 結論

原文
http://www.bitcoin.org/bitcoin.pdf
翻訳
http://www.bitcoin.co.jp/docs/SatoshiWhitepaper.pdf
ビットコインwiki
https://bitcoin.it/

原論文だけだとあまりよくわからなかったが、追加でビットコインwikiを読んでいたら大まかな仕組みはわかったので適当にまとめる。間違っていたらすいません。なお、今回話題になっているMt. Goxの閉鎖でどういう影響があるのかは知りません。ビットコインは持ってないし、使ったこともありません。
なお原論文は短いので、わりと簡単に読めます。


ビットコインの売りは、「信頼できるサードパーティー」を必要としない電子マネーであること。ビットコインは信頼ではなく、暗号と証明を用いる。このため、信頼ベースのシステムに伴う決済のコストが発生しない。
論文によると、ビットコインのネットワークは以下のように処理される。

  • 1. 新しい取引は全ノードに送信される。
  • 2. 各ノードが新しい取引をブロックに取り入れる。
  • 3. 各ノードがそのブロックへのプルーフ・オブ・ワークを算出する。
  • 4. プルーフ・オブ・ワークを見つけ次第、各ノードはそれを全ノードに告知する。
  • 5. ノードは、ブロックに含まれる全ての取引が有効であり、以前に使われていない場合のみ、それを承認する。
  • 6. ノードは、承認されたブロックのハッシュを直前のハッシュとして用いて、チェーンの次のブロックの作成を開始することで、ブロック承認を表明する。


これだけではわからないので、以下に軽く解説する。
ビットコインで取引をすると、取引は全ノードに通知され、しばらくは取引プールに置かれる。取引履歴はある程度の数ごとにまとめられ、ブロックに記録される。ブロックのヘッダーには、ブロック自体のデータから計算されるnonce値をのせなければならないが、nonce値を求めるには大変な計算コストがかかるようになっている(これがプルーフオブワークというやつ)。またnonce値の検証自体は簡単にできる。もう少し詳しく書くと、HASH(data+nonce)が一定の値より小さくなるnonce値を探さないといけないらしい。これにより、ブロックの作成には計算コストがかかるが、ブロックの検証は簡単にできる仕組みになっている。
また、後続するブロックのデータも先行するブロックに依存するため、取引履歴の改ざんはとても難しい。取引履歴を改ざんするためには、改訂したブロックに加え、後続するブロックをすべて再計算しなければならないが、莫大な計算コストがかかり、おそらく正規のブロックチェーンの成長速度に追いつかないだろう(というかそれができるなら、ビットコインマイニングで儲けた方が効率がよくなってしまう)。
一方、ビットコインネットワークはこのブロックの作成にかかる計算コストをどう支払うかというと、P2Pネットワークの向こう側の不特定多数の匿名の人々を働かせるのである。ブロックの作成には報酬のビットコインが与えられるため、人々は勝手に競って計算する(これがビットコインマイニングというやつ)。
こうして作成されたブロックは全ノードに共有され、いわば公式の歴史となる(もし分岐が生じたら、長い方=計算コストのかかっている方を採用する)。
要するに、こうやって匿名の人々の協調により改訂困難な取引履歴を作成するというのがビットコインのキモらしい。ビットコインwikiによると、ビットコイン最大のイノベーションはこのブロックチェーンだということだ。
なお、原論文では各ノードがプルーフオブワークを見つけ、ブロックを作成するような書き方になっているが、現在ではここは普通のノードではなく、マイニング屋さんの領域のようだ。マイニングはもはや競争が激しすぎて個人のPCではとても太刀打ちできないらしい。
ちょっと自分で投資などに手を出す気にはなれないが、おもしろい仕組みだし、社会実験としては大変成功した部類だろう。興味のある人はよく仕組みを理解してから手を出すといいのではないでしょうか。
私は自分でマイニングのプログラムを書いてみたいと思っていたのだが、とても発掘できそうにないので、どうしようかと思っている。