ブロックチェーンを理解する前にブロックに含まれるトランザクション(Tx)について、理解する必要がある。
技術としてはラップされているので知らなくてもブロックチェーンプラットフォームは利用できるが、
分かっていたほうがどのようにブロックが積まれていくか、
ブロックの中に何が入っているか分かるのでPoCしやすい
今回はビットコインを例にトランザクションを理解する
前提知識
公開鍵暗号化方式をある程度知っていること
(参考)https://qiita.com/nkmk1215/items/f45ecf7c27520cbff673
トランザクションについて
取引情報のこと。
1つのブロックに複数含まれている。
既にブロックに格納されている取引情報の参照情報と誰にいくら送金するかの情報から成り立つ。
インプット情報
前Txのダイジェスト
新しいTxを生成するにあたり、元となるUTXO(unspent transaction output)をハッシュ化した値
※UTXO:承認されたTx(ブロックに格納されたTx)のうち、後続のTxがまだ存在しないTx
Tx生成者の公開鍵
Tx生成者が公開している鍵(≒ウォレット)
仮Txの署名
「前Txのダイジェスト」「送金額」「送金先の公開鍵ダイジェスト」の情報を
ハッシュ化した値にTx生成者の秘密鍵で暗号化した値
アウトプット情報
送金額
Tx生成者がUTXOの送金額未満で設定する値
UTXOとの差額が取引手数料となる
出金先ユーザーの公開鍵ダイジェスト
UTXOを受け取る相手の公開鍵をハッシュ化した値
生成方法
- 前Txのダイジェストを仮Txにセット
- Tx生成者の公開鍵ダイジェストを仮Txにセット
- 出金額を仮Txにセット
- 送金先の公開鍵ダイジェストを仮Txにセット
- 仮Txをダブルハッシュ化
- ダブルハッシュ化した値にTx生成者の秘密鍵で暗号化し、仮Txの署名を生成
- 仮Txの署名を含めた5つをTxとして、ネットワークに流す
Txの検証方法
Txが改ざんされていないことを確認
1-1. Tx生成者の公開鍵をハッシュ化し、仮Txを生成する
1-2. 生成した仮Txのダブルハッシュ化した値と署名から復号したハッシュ値を比較し同値であることを確認する
⇒Tx生成者が署名した時点とTxの内容に差異はない=改ざんされていないと言える
前Txの所有者がTxを生成していることを確認する
2-1. Tx生成者の公開鍵をハッシュ化し、ダイジェスト化
2-2. 前Txのダイジェストから前Txを特定し、出金先ユーザーの公開鍵ダイジェストと比較し、同値であることを確認する
⇒Tx生成者の公開鍵は前Txで送金先に指定された公開鍵と同じ=Tx生成者と前Txの所有者は同じ
※検証内容は他にもある。
まとめ
ブロックの中身については別途まとめたい。