今回はブロックチェーンにおけるトランザクションについて紹介します。
できる限り「Short & Simple」を心がけます。
なお、私もブロックチェーン初学者なので、内容に誤り等ありましたらご指摘いただけると幸いです。
トランザクションって何?
ブロックチェーンの世界におけるトランザクションとは取引記録のこと。ブロックチェーンネットワーク参加者間での価値の移転を記している。なお、個々のトランザクション(取引記録)はブロックチェーン上にあり、誰でも見ることができる。
トランザクションのライフサイクル
トランザクションのライフサイクルは大まかに以下の流れとなる。
- 生成
- ブロックチェーンネットワークへのブロードキャスト
- ブロックチェーンネットワーク上での伝搬
- マイニングノードによるブロックへの記録
生成
トランザクションは、ウォレットアドレスAに入っているお金をウォレットアドレスBに移動させるという取引内容により生成され、作成日時(タイムスタンプ)と電子署名が施されることによって有効となる。
トランザクションは、ブロックチェーンネットワーク参加者の誰でも生成できる。トランザクションを生成した人はトランザクションに署名している人である必要はない。
ブロックチェーンネットワークへのブロードキャスト
トランザクションを生成したら、ブロックチェーン上の複数のノードへブロードキャストする。
複数のノードへブロードキャストするため、送信者はノードを信用する必要はない。ノードも送信者を信用する必要はない。また、送信者が誰なのかを特定する必要もない。
トランザクションは署名されており、一切の機密情報(秘密鍵や証明書)も含まれないため、どのようなオープンな転送手段を使っても問題ない。
ブロックチェーンネットワーク上での伝搬
トランザクションがネットワークに参加しているノードに送られると、送られたノードはこのトランザクションが有効なものか検証する。有効なものだと確認されると、そのノードは接続している他のノードにこのトランザクションを伝搬する。同時に、送信成功メッセージが発行ノードに返される。
ブロックチェーンネットワークはP2Pネットワークであり、接続しているノードはpeer-to-peerプロトコルに従ってノードを起動した時に発見したノードである。
※P2Pネットワークについては以下の記事をご参照ください。
マイニングノードによるブロックへの記録
※ブロックへの記録については以下の記事をご参照ください。
トランザクションの構造
トランザクションは資金のソース(インプット)から送り先(アウトプット)への価値の移転を記号化したデータ構造である。このインプットやアウトプットは、アカウントやIDなどといった個人を特定できる情報とは結びついていない。トランザクションは資金の所有者だけが持っている秘密鍵でロックされているコインの固まりと考えることができる。
トランザクションの構造は以下の通り。
サイズ | フィールド名 | 説明 |
---|---|---|
4バイト | Version | このトランザクションがどのルールに従っているかを指定 |
1-9バイト | Input Counter | いくつのインプットが含まれているか |
可変 | Inputs | 1つまたは複数のトランザクションインプット |
1-9バイト | Output Counter | いくつのアウトプットが含まれているか |
可変 | Outputs | 1つまたは複数のトランザクションアウトプット |
4バイト | Locktime | Unixタイムスタンプ、またはブロック高 |
トランザクションアウトプットとインプット
トランザクションアウトプット
すべてのトランザクションはアウトプットを作る。ほとんどすべてのアウトプットは未使用トランザクションアウトプットまたはUTXOと呼ばれる、使用可能なコインの固まりである。UTXOはブロックチェーンネットワーク全体によって認識されている。
誰かに送金することは、送り先のウォレットアドレスと紐づけられたUTXOを作り出すこと。
トランザクションアウトプットの構造は以下の通り。
サイズ | フィールド名 | 説明 |
---|---|---|
8バイト | Amount | コイン金額 |
1-9バイト | Locking-Script Size | 次に続くLocking-Scriptのバイト長 |
可変 | Locking-Script | アウトプットを使用するために必要な条件を定義したscript |
(scriptについては別途記事を書こうと思います)
トランザクションインプット
トランザクションインプットはUTXOへのポインタ。トランザクションインプットは、トランザクションのハッシュと、UTXOが記録されているブロックチェーン内の場所を示すシーケンス番号により、特定のUTXOを指定する。
UTXOを使用するために、トランザクションインプットはunlocking scriptというUTXOのロックを解除するscriptも持っている。unlocking scriptは、通常locking scriptの中にあるウォレットアドレスの所有権を証明する署名である。
トランザクションインプットの構造は以下の通り。
サイズ | フィールド名 | 説明 |
---|---|---|
32バイト | Transaction Hash | 使われるUTXOを含むトランザクションハッシュ |
4バイト | Output Index | 使われるUTXOのトランザクション内インデックス。最初のアウトプットの場合は0 |
1-9バイト | Unlocking-Script Size | Unlocking-Scriptのバイト長 |
可変 | Unlocking-Script | UTXOのlocking scriptを満たすscript |
4バイト | Sequence Number | トランザクションのlocktimeが無効になる前にトランザクションを書き換えるために使われる |
トランザクション手数料
トランザクション手数料については別記事を書きましたので、そちらをご参照ください。