ブロックチェーンとはなにか、ざっくりまとめてみた③

①にて、ブロックチェーンとはなんぞやというのをまとめてみた。②では、ブロックチェーンを支える技術についてまとめた。

今回は①+②で、ブロックチェーンを支える技術は、実際どこでどうやって使われてるの?をまとめる。

blog.akagoma.com

blog.akagoma.com

トランザクション(取引)

トランザクションの構成要素

トランザクションは、以下の情報で構成されている。

トランザクションの生成方法は、以下の通りで

  1. 前取引のハッシュ値を取引(仮)にセットする。
  2. 取引をする人の公開鍵のハッシュ値を取引(仮)にセットする。
  3. 送金額を取引(仮)にセットする。
  4. 送金先の公開鍵のハッシュ値を取引(仮)にセットする。
  5. 取引(仮)をハッシュ関数でハッシュ値にする。(厳密には2回ハッシュ化する)
  6. ハッシュ値を秘密鍵で暗号化し、取引(仮)の電子署名を作成する。
  7. 取引(仮)の1.~4.の情報に、電子署名、取引をする人の公開鍵を追加する。

前回のまとめ②と見比べれば一目瞭然だが、取引(トランザクション)には、電子署名とハッシュ関数の仕組みが利用されているのが分かる。

トランザクションの流れ

では、トランザクションはどのようにしてノードに渡っていくのかというと、下図のようになる。トランザクションを受け取ったノードはその取引が正しいものなのかどうか、また取引作成者が本人かどうかの検証を行う。(実際には他にも検証項目はある。)

まず、取引が正しいものなのかどうか(改ざんされた取引ではないことを確認)は

  1. 取引②作成者の公開鍵のハッシュ値を作成する。
  2. 前取引のハッシュ値、1.で作成した取引②作成者の公開鍵のハッシュ値、送金額、送金先の公開鍵ハッシュ値をまとめて、取引②(仮)を作成する。
  3. 取引②(仮)のハッシュ値を作成する。
  4. 取引②の電子署名を、取引②作成者の公開鍵で復号化する。
  5. 3.と4.が同じであることを検証する。

取引作成者が本人かどうかは

  1. 取引②作成者の公開鍵のハッシュ値を作成する。
  2. 前取引の送信先の公開鍵のハッシュ値と1.が同じであることを検証する。

その取引が正しく、また取引作成者が本人が作成したものであることが検証できれば、隣り合うノードに取引を転送する。このようにして、ノード全体にトランザクションが行き渡る。

なぜ前取引が必要なのか?

ビットコインを例にするが、ビットコインのブロックチェーンには「誰がいくら持っている」の情報を保持する場所がなく、取引に関する情報のみが書き込まれている。

そのため、「誰がいくら持っている」の情報を得るには、その人が関わるすべての取引から残高計算する必要がある。が、もちろんそのような処理は時間がかかるので、採用されていない。

ビットコインでは、UTXO(Unspent Transaction Output)データベースというものが存在し、ウォレットのアドレスに関わる取引の情報がノード毎に保管されている。(ただし、これは共有されておらず、ノードが独自に管理している。)

取引作成者のアドレスに紐づく取引で承認されている取引の中で、後続の取引が存在していないものを「残高」として考えている。

この場合、緑色となっている取引②、④、⑥が後続の取引が存在しないUTXOとなる。

この状態で、150を送金したい場合は取引②+取引⑥が前取引となる。

(なので、前取引のハッシュ値は複数になる場合がある。)

※正確には手数料もあるため、ここまで単純ではない。

ブロック

トランザクション(取引)がどのようにノードに流れていくかの次は、トランザクションをまとめたブロックがどのように作られるかというところになる。トランザクションが1MB集め、1つのブロックを生成する。

ブロック生成タイミングになると、ノードの中でもマイナーと呼ばれるノードが、取引をひとまとめにブロックを生成する。ただし、ブロックはハッシュ関数に通した時に一定個数の0が先頭に並んでいる必要があるので、一定個数の0が先頭に並ぶようなナンス値を総当りで0, 1, 2, 3…と探していく。(この行為をマイニングという。)

ノードの中で、最も早くナンス値を見つけた人がブロックを追加する権利を得る。(あくまで権利を得るだけで、ブロックが不正な場合は追加されず報酬ももらえない。)

あとは、①での内容と同様に、全ノードでこのブロックが正しいことを検証する。全ノードの51%が正しいと判断した場合、このブロックは台帳に書き込まれる。

 

Copyright (C) 2018-2022 akagoma. All Rights Reserved.