9章ブロック

トランザクションは、ビットコインをある当事者から別の当事者へと転送します。また、トランザクションは署名によりアンロック、すなわち使用が許可されます。署名によって送信者がトランザクションを承認したことが確実になるわけですが、もし送信者が複数の相手に同じコインを送ったとしたらどうなるでしょうか? ロックボックスの所有者は同じアウトプットを2回使おうとするかもしれません。これは、二重支払い問題と呼ばれるものです。不渡りの可能性がある小切手を受け取る場合と同様で、受け取る側がトランザクションの有効性を確認する必要があります。

ここで登場するのがビットコインの優れた革新的技術の1つ、ブロックです。ブロックは、各トランザクションを整列する手段とお考えください。トランザクションを整列し、それ以降の競合するトランザクションを無効にすることで、二重支払いを防ぐことができます。これは、早いほうのトランザクションを有効なものとして受け入れるのと同じことです。

仮に、トランザクションを一度に1つずつ整列できるなら、このルールの実装は簡単(最初のトランザクションを有効に、後続のトランザクションを無効にする)になるでしょう。しかし、そのためにはネットワーク上のノードが、どのトランザクションが次になるか合意する必要があり、その合意(コンセンサス)に達する際に、多くの伝送オーバーヘッドが発生してしまうことになります。あるいは、大量のトランザクションを1日1回程度にまとめて整列する方法も考えられますが、トランザクションが1日に1回しか決済されず、それ以前に決済が確定しなくなることから、あまり実用的とは言えません。

そのような極端な方法ではなく、10分ごとにまとまった単位でトランザクションの集まりを決済することで、ビットコインは妥協点を見つけます。このようなトランザクションの集まりが、ブロックなのです。本章では、ブロックをパースする方法と、プルーフオブワーク(Proof-of-Work、PoW)を確認する方法を説明します。はじめに、コインベース・トランザクションと呼ばれる、すべてのブロックのトランザクションの先頭に来る特別なトランザクションから見ていきましょう。 ...

Get プログラミング・ビットコイン ―ゼロからビットコインをプログラムする方法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.