ビットコインの元帳

ビットコインの取引は、すべて、この支払証文(トランザクション)に記録されているので、すべての証文を保存して置き、ビットコインの移動を追跡できるようにしておけばよい。これがブロックチェインと呼ばれるビットコインの元帳である。ビットコインの支払証文が公開であるのと同じように、この元帳も公開であり、ビットコインのネットワークに加入しているメンバーは誰で見ることができる。

このブロックチェインは、トランザクションをまとめて記録したブロックが繋がった形で作られている。ちょうど、ブロックが元帳の1ページで、そこにいくつかのトランザクションが記録されており、このページが連なったものが元帳=ブロックチェインという感じである。

図6に示すように、各ブロックは、ブロックヘッダと呼ぶ部分と、そのブロックに含まれるトランザクションから構成される。ブロックは、平均的に10分間に1個のペースで作られるので、1つのブロックには、おおよそ10分間に広報されたトランザクションがまとめて記述される。

図6 ブロックの構造とブロックチェインへの繋ぎこみ

そして、ブロックヘッダの中には前のブロックのHash値という欄がある。これで前のブロックを識別して、ブロックの繋がりであるブロックチェインを構成する。

集中的なシステムの場合は、ブロックに一連番号を付けるというような形でブロックを識別して順序付けをすることができるが、分散システムであるビットコインでは、ブロックヘッダのHash値をブロックを識別する番号として用いる。この番号は、単なる一連番号ではなく、ブロックヘッダのHashであるので、ブロックヘッダが改変されていないことも保証する機能を持っている。

ビットコインの採掘が取引の正当性を確保する

ビットコインのシステムでは、すべてのトランザクションが整合がとれており、矛盾がない状態になっている必要がある。しかし、 Walletのプログラムはオープンソースであるので、悪意のある人間が、プログラムを書き変えて、存在しない過去の受取トランザクションを作ったり、あるいは、存在する受取トランザクションの金額を水増ししたり、すでに支出した受取トランザクションのビットコインを2回使ってしまうトランザクションを作ったりというようなことが行われると、システムは成り立たない。

このため、支払いの原資となる受取トランザクションが存在するか、その原資を使う権利を持っているか、同じ原資が2重支出されていないかなど、そのトランザクションの正当性を確認する必要がある。この作業がビットコインの採掘と呼ばれる作業の重要な目的である。

採掘者(Miner)は、ネットワークに広報された、通常、100~1000のトランザクションをひとまとめにしてブロックを作る。各トランザクションについて、ブロックチェインに含まれる過去のトランザクションとの整合性をチェックし、すべてのトランザクションが正当なものであることが確認できると、そのブロックを取引の元帳であるブロックチェインに繋げることを広報する。

他の採掘者は、広報された新しいブロックを検査して問題がないことを確認すると、そのブロックを自分の持っているブロックチェインに繋ぎこむ。そして、皆のブロックチェインに広報された新しいブロックがつなぎこまれると、そのブロックに含まれるトランザクションが元帳に記入されたことになり、それらのトランザクションは確認された取引とみなされる。なお、例外的な場合であるが、チェインされたブロックが取り消されることもあるので、高額の取引の場合は、6ブロック以上が追加されるまで待った方が良いと推奨されている。後続のブロックが取り消される確率は指数関数的に減少するので、6ブロックが取り消されることは事実上あり得ない小さな確率となるからである。

そして、他の採掘者は、広報された新しいブロックを自分のチェインに繋ぎこむと、次のブロック作りに取り掛かる。