今更ながらbitcoinの仕組みを調べたのでまとめる。
bitcoinの仕組み
お金の決済においては、不正取引の無効化の仕組みが必須。
お金の所有者以外の取引の防止(トランザクション)
bitcoinでは、各通貨(おそらく最小単位である1satoshi毎)を取引履歴の塊として表現する。
この仕組みを使うことで、送り手と受け手が正しいことが保証される。受け手が正しいことは、次回の送り手が正しいかの判定に利用する。
試しに、最後のトランザクションにおいて、本人確認が出来るか検証する。
- 前回のトランザクションに、Bさんの公開鍵情報が入っている。
- それを使って今回のトランザクションの署名を解くとある値(X)が出てくる。
- また、前回の取引全体のハッシュをCさんの公開鍵で暗号化すると、ある値(Y)が出てくる。
- XとYが等しければ、BとCの取引であることが第三者にもわかる。
これにより、お金の所有者を偽造することができなくなった。 残る不正は、送り手が複数の取引を同時に行うことができてしまうこと。(二重取引) これによって、同一(同じ取引履歴)のビットコインが複数の相手に渡ることになる(偽札を掴まされたこととほぼ同義。)
二重取引の防止(ブロックチェーン)
上述の仕組みだけでなく、どの取引が正しいのかを判定する必要がある。 この判定は個人間ではいくらでも偽造できるので、全体で承認される必要がある。
しかしp2pにおいては、承認を担う役割の人がいない。(普通は銀行やカード会社がそれを担っている。) p2pにおいて全体で承認されるということは、ネットワーク上で多数(過半数)に承認されることを意味する。
その仕組みとして、bitcoinでは全体で一つのブロックチェーンを共有することになっている。 ブロックチェーンが持つ情報は以下
これにより、ブロックチェーンをたどれば、どの取引が正しいのか、誰がいくら所持しているのかがわかる。 また、ブロックチェーンの特徴として、
- 各ノードの計算能力を利用して一定時間掛けて生成される。
- 個人(閉じた一部のネットワーク)がブロックチェーンを生成するのは膨大なコストがかかる。
- ブロックが生成されるまでの間に、取引は各ノードに普及すると考えて良い。
- もしチェーンが分岐した場合、長い方のノードを正とする。
- ブロックは複数の取引を含んでいる(理由は後述)
が挙げられる。
さて、これによって先ほどの二重取引がどう解決されるかを見ていく。
ほぼ同時のタイミングで同じbitcoinの授受が発生した場合。
- 2つの取引が各ノードに行き渡る。
- 各ノードがブロックの生成を行うが、同じbitcoinを用いた取引が複数ある場合、その取引は無効として除去してブロック生成を行う。
- 生成されたブロックが市場に出回り、それが正しいブロックチェーンとして認定される。
- 同じbitcoinを用いた取引はいつまでもブロックチェーンに組み込まれることがないので、承認されない取引となる。
一定以上の間隔を空けて同じbitcoinの授受が発生した場合。
- 一つ目の取引が各ノードに行き渡る。
- 各ノードが、その取引を含んだブロックを生成する。
- 生成されたブロックが市場に出回り、それが正しいブロックチェーンとして承認される。
- 2つ目の取引が市場に出回っても、既に別の取引が承認されているため、いつまでも承認されない。
微妙にずらしたタイミングで同じbitcoinの授受が発生した場合。
- 一つ目の取引がある程度のノード(範囲X)に行き渡る。
- 範囲Xが、その取引を含むブロックを(Xブロック)を生成する。
- 2つ目の取引がある程度のノード(範囲Y)に行き渡る。
- 範囲Yが、その取引を含むブロックを(Yブロック)を生成する。
- Xブロックを含んだチェーンがネットワークの多数を占めると、一つ目の取引が承認される。
- 逆にYブロックを含んだチェーンがネットワークの多数を占めると、2つ目の取引が承認される。
- (長いブロックチェーンが勝つため、あとから承認された方はいずれ消えていく。)
ここで問題になるのが2つ。
- ブロックを生成するのにコストがかかる。
- 取引が承認されるまでに時間がかかる。
ブロックを生成するのにコストがかかる
個人でブロックを生成するにはコストがかかると書いた。(そのため不正をするのは割に合わない) しかし、コストがかかるだけでは誰もやりたがらない。
そこでbitcoinは、そのブロックチェーンを作る処理に報酬を与えることで解決した。 報酬は、新規にコインを発行する場合もあれば、手数料をもらう場合もある。 (俗に言うマイニングとはこのブロックの生成を指す。)
手数料をもらう場合、ある程度の規模のお金が動かないと手数料が割に合わなくなるため、複数の取引をまとめることになった。 (また、これは取引をひとつずつ承認する場合と比べて時間短縮にもなる。)
取引が承認されるまでに時間がかかる
これはbitcoinがもつ本質的な問題で、p2pを使う以上避けられないと考えられる。
これを解決するスキームもあるらしいが、理解できていない。 (p2pのやり方ではなく、スキームの運営者が権限とコストを担うことで成立するモデルのように見える。。)
もう10分待たなくてもいい、ビットコイン取引承認時間への解法「Impulse」
参考資料
図は「Bitcoinの仕組み」のものを拝借しました。