LoginSignup
4
5

More than 5 years have passed since last update.

ブロックチェーンのトランザクション

Last updated at Posted at 2019-02-11

ブロックチェーンを理解する前にブロックに含まれるトランザクション(Tx)について、理解する必要がある。
技術としてはラップされているので知らなくてもブロックチェーンプラットフォームは利用できるが、
分かっていたほうがどのようにブロックが積まれていくか、
ブロックの中に何が入っているか分かるのでPoCしやすい
今回はビットコインを例にトランザクションを理解する

前提知識

公開鍵暗号化方式をある程度知っていること
(参考)https://qiita.com/nkmk1215/items/f45ecf7c27520cbff673

トランザクションについて

取引情報のこと。
1つのブロックに複数含まれている。
既にブロックに格納されている取引情報の参照情報と誰にいくら送金するかの情報から成り立つ。

主な取引データの構成は以下
トランザクション.png

インプット情報

前Txのダイジェスト

新しいTxを生成するにあたり、元となるUTXO(unspent transaction output)をハッシュ化した値
※UTXO:承認されたTx(ブロックに格納されたTx)のうち、後続のTxがまだ存在しないTx

Tx生成者の公開鍵

Tx生成者が公開している鍵(≒ウォレット)

仮Txの署名

「前Txのダイジェスト」「送金額」「送金先の公開鍵ダイジェスト」の情報を
ハッシュ化した値にTx生成者の秘密鍵で暗号化した値

アウトプット情報

送金額

Tx生成者がUTXOの送金額未満で設定する値
UTXOとの差額が取引手数料となる

出金先ユーザーの公開鍵ダイジェスト

UTXOを受け取る相手の公開鍵をハッシュ化した値

生成方法

生成の流れは以下
トランザクション生成.png

  1. 前Txのダイジェストを仮Txにセット
  2. Tx生成者の公開鍵ダイジェストを仮Txにセット
  3. 出金額を仮Txにセット
  4. 送金先の公開鍵ダイジェストを仮Txにセット
  5. 仮Txをダブルハッシュ化
  6. ダブルハッシュ化した値にTx生成者の秘密鍵で暗号化し、仮Txの署名を生成
  7. 仮Txの署名を含めた5つをTxとして、ネットワークに流す

Txの検証方法

Txが改ざんされていないことを確認

トランザクション検証①.png

1-1. Tx生成者の公開鍵をハッシュ化し、仮Txを生成する
1-2. 生成した仮Txのダブルハッシュ化した値と署名から復号したハッシュ値を比較し同値であることを確認する

⇒Tx生成者が署名した時点とTxの内容に差異はない=改ざんされていないと言える

前Txの所有者がTxを生成していることを確認する

トランザクション検証②.png

2-1. Tx生成者の公開鍵をハッシュ化し、ダイジェスト化
2-2. 前Txのダイジェストから前Txを特定し、出金先ユーザーの公開鍵ダイジェストと比較し、同値であることを確認する

⇒Tx生成者の公開鍵は前Txで送金先に指定された公開鍵と同じ=Tx生成者と前Txの所有者は同じ

※検証内容は他にもある。

まとめ

ブロックの中身については別途まとめたい。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5