

送金リクエストの検証作業
送金リクエストを受け取ったパソコンなどのコンピュータ(ノードと呼ばれます)は、どのようにこの送金リクエストが正しいと確認するのでしょうか。また、二重払いを防ぐ方策はどうなっているでしょうか。
これを確実に実行する方法として、「ブロックチェーン」と呼ばれる技術が使われています。ブロックとは、正しい取引の記録の集まりです。それがつながっているのでブロックチェーンです。
ちなみに、「正しい」とは、送金者が希望の送金先に間違いなく送ることができるかどうかという意味の正しいとは少し異なります。送金者が送金先のビットコインアドレスを間違えて入力すれば、意図した送金先でないところに送金されてしまいます。
ここでいう「正しい」とは、ビットコインのシステムに照らし合わせて不整合がないという意味です。例えば、残高が1BTCなのに5BTCを送金したいと要求していないということであり、送金先に指定されたビットコインアドレスが存在するということです。
ブロックチェーンの仕組み
ブロックに含まれる情報
さて、ブロックには、以下の情報が格納されます。
- 1.直近10分程度の間に世界中で出された送金リクエスト内容
- 2.ひとつ前のブロックの計算結果(ハッシュと呼ばれます)
- 3.ノンス(nonce)
ノンスは、このブロックを計算してハッシュを計算するために必要な文字列です(ノンスについては、後ほど説明します)。
ノードはブロックのデータを検証して、すべて正しい(二重払いなどの要求がない)と認定すれば、タイムスタンプを押して確定し、ブロックチェーンの最後にくっつけます。そして、そのデータはもう変更しません。この作業を10分ごとに繰り返します。

送金リクエストの不正防止
送金リクエストが正しいかどうか(すなわち、第三者が不正に送金依頼をしたものではないか)を調べるには、送金者の公開鍵を使ってリクエスト内容を確認できることをチェックすればOKです。
送金したいという人が作った公開鍵でなければ、暗号化されたリクエストを見ることができないからです。
また、リクエストの内容を見れば、例えば「1BTCをもっているのに10BTCを送金したい」といった間違ったリクエストをしていないか?という検証も可能になります。
この検証が可能なのは、ビットコインのサービスが始まった2009年以来の全ての取引記録が、ブロックチェーン内のデータで公開されているからです。送金リクエストと過去の履歴を照らし合わせれば、その送金が正しいか不正かの判定が可能です。
重複する正しいブロック情報の処理
さて、このようにして、P2Pネットワークに参加しているあるコンピュータ(ノード)が、このブロックを検証したところ、すべて正しいと分かったとします。
そこで、このブロックのデータは計算の誤りもなくOKですよ!と世界中に宣言したいです。しかし、同じように計算しているコンピュータは世界中にいくつもあります。
取引データは全世界で1種類だけですから、いろいろなコンピュータがそれぞれ正当性を主張しても、どれを採用してよいのか分かりません。全世界で正当な取引データは一つしかないからこそ、ビットコインのデータは信用できます。
また、仮にどのコンピュータの検証も正しいとしても、それぞれのコンピュータが検証したブロックの内容が同一のものだとは限りません。
というのは、ブロックは直近10分間くらいの送金リクエストをまとめたものですが、それぞれのノードが自由にブロックを作ることができるからです。
このため、ある送金リクエストが出されて全世界に広まる途中でブロックが作られたり、(送金手数料がゼロに設定されたなどの理由により)送金リクエストがあるブロックには掲載されずに放置されたりする可能性があります。
その他、正当性を主張しているコンピュータの中には、ビットコインを盗もうと考えている不正なものが紛れ込んでいるかもしれません。
こうして考えると、どのコンピュータの主張を正当なものとして採用すれば良いのかが分からなくなります。この問題を解決するのが「プルーフ・オブ・ワーク(proof of work)」と呼ばれる作業です。
ちなみに、送金手数料は、送金する側が自由に決めることができます。紳士協定でいくらかの手数料を支払うことが望ましいですが、義務ではありません。
また、ビットコインの送金能力に比べて送金要請数が大きすぎる場合は、手数料を高額にしないと送金してもらえません。よって、送金手数料をいくらにすべきか?というのは、送金の混雑状況を見ながら決めることになります。
次頁では、正式なブロックの認証に関わる『プルーフ・オブ・ワーク』について説明していきます。