7章トランザクションの作成と検証

ビットコインをコーディングする際、最も扱いに注意が必要な事項の1つがトランザクションの検証です。そしてもう1つはトランザクションの作成です。本章では、両者を正しく行う方法について順を追って解説します。本章を終えると、テストネット用のトランザクションを作成し、ブロードキャストできるようになります。

7.1 トランザクションの検証

あらゆるノードは、トランザクションを受信すると、各トランザクションがネットワークのルールに従っていることを確認します。このプロセスをトランザクションの検証と呼びます。ノードが確認する主な事項は以下のとおりです。

  1. そのトランザクションのインプットを過去に支払っていないこと。
  2. そのインプットの合計額がアウトプットの合計額以上になっていること。
  3. ScriptSigが前のScriptPubKeyのアンロックに成功していること。

1.は、二重支払いを防ぎます。支払い済みのインプット(つまり、ブロックチェーンに含まれているもの)を再度支払うことはできません。

2.は、新たにビットコインが作成されていないかを確認します(ただしコインベース・トランザクションと呼ばれる特殊なタイプのトランザクションは例外です。詳細は9章参照)。

3.は連結したスクリプトが有効であることを確認します。ほとんどすべてのトランザクションでは、これはScriptSigにある1つ以上の署名が有効であると確認することを意味します。

では次に、それぞれの条件をどのように確認するかを見ていきましょう。

7.1.1 インプットの支払い状況の確認

二重支払い防止のため、ノードは各インプットが存在することと過去に使われていないことを確認します。これはどのフルノードでも、UTXOセットを検索すれば確認できます( ...

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.