🗂

Web3.0ブロックチェーン開発の学びメモ - 5日目

2024/01/07に公開

概要

こちらの記事の 5 日目です!

全体像の再確認

再度ブロックチェーンでの取引の全体像を再度確認します。

  • ① アドレスを作成
  • ② 取引が発生する(トランザクション)
  • ③ ネットワークに取引を伝える
  • ④ マイナーがブロックを構築
    • マイナーは未検証取引を集めて Nonce という使い捨ての数字の羅列を探しにかかる(これをプルーフオブワークという)
    • (上でも説明した通り、Nonce を一番最初に発見したマイナーはビットコインなどで報酬を受ける仕組み。)
  • ⑤ マイナーはブロックを構築するとネットワークにブロックを伝える。
  • ⑥ 上記で作成されたブロックがネットワーク内で検証され正しいと判断されるとブロックチェーンに取り込まれる。

ブロックチェーンの全体の流れ

今回は上記の ⑤ のマイナーがマイニングしてブロックを構築、その後ブロックチェーンに取り込まれるところまで詳細を見ていきたいと思います!
ここがブロックチェーン技術の肝となる章だと思います!

マイニング、ブロック構築、ブロックチェーンの形成について

基本用語の整理

まずはマイニング、ブロック、ブロックチェーンの定義について再確認していきます。

マイニングとは

マイニングとはマイナー(ソロマイナーのノード)がトランザクションプールから未検証のデータを取得し、ブロックを構築すること。
マイナーはトランザクションデータを検証し、ブロックを作成する。そのブロックがブロックチェーンに取り込まれると報酬として通貨がもらえる。
この仕組みにより、中央機関がなくても、自律的にデータの検証が行われる。

マイナーが受け取る報酬は 2 種類

マイナーが受け取る報酬は以下の 2 種類です。

  • 新規発行されるコイン
    → ブロックチェーンにブロックが取り込まれるとコインが新たに発行されるが、マイナーはこれを報酬としてもらう。もらえるコインは決まっており、年々減少していく。理由はインフレを起こさないため。

  • 取引の手数料
    → 取引毎に手数料が必ず発生するということは以前記述しましたが、この手数料もマイナーの報酬となる。額としては新規発行された通貨をもらう方が大きい。

ブロックとは

複数のトランザクションデータを格納したデータの単位。ある程度トランザクションデータが溜まったところで、ブロックチェーンに取り込まれる。
マイナーがブロックを作成後、ネットワークに共有し、全てのノードが検証して正しいかをチェックする。
承認されてブロックに構築されたトランザクションデータはトランザクションプールから削除される。

ブロックチェーンとは

ブロックを数珠繋ぎで繋いだもの。

各プロセスの詳細

次に各プロセスで実際どのようなことがされているかを簡単にまとめます。

トランザクションデータの合意形成

前回の記事でトランザクションデータがネットワークに共有されると全てのノードがデータが正しいか検証していくと記述しましたが、各ノードはざっくり以下のことをチェックしています。

  • そのトランザクションデータはすでに使用されていないか。(2 重支払いのチェック)
  • input と output の総和は正しいか。(簿記で言う、借方と貸方の総和が同じになるか)
  • データの構造が決められた構造になっているか
    など

ブロックが作成される流れ

マイナーがブロックを作成していく流れは以下です。

  1. トランザクションプールから決められた優先順位に基づき複数のトランザクションデータをブロックに集める。
  2. プルーフオブワークでナンスを見つけ出す計算をする。
  3. ナンスを見つけるとブロックヘッダにその情報を格納し、ブロック作成

と言う感じです。
ブロックヘッダとはブロックに関する情報を持っているのですが、どのような情報を持っているかというと

  • プルーフオブワークの難易度(つまり数当てゲームの難易度)
  • プルーフオブワークのナンス
  • ブロックの生成時刻
  • マークルルート(トランザクションデータが要約されたもの)
プルーフオブワークとは

今までも少し出てきましたが、再度プルーフオブワークを詳しく見ていきます!
プルーフオブワークとは Nonce(ナンス)と呼ばれる数値を膨大な計算処理を行うことで導き出す数当てゲームのようなもの。
膨大な計算処理が必要であるため、時間がかかってしまうのですがコンピューターの性能が高ければ高いほど早く答えを導き出すことができます!
ただ、一定時間(ビットコインで言えば 10 分)計算に時間がかかるよう、難易度が調整されているのです。
なぜこのような計算をやっているのかというと、データの改ざんを防ぐためです。
具体的な話は省略しますが、データが改ざんされるとナンスの数値も変わってきます。そのため、再度計算が必要になるのですが、ブロックチェーンは数珠つなぎ
でデータが繋がっているため、データの変更があるとそれ以降の全てのナンスを再計算しないといけなくなります。その結果膨大な再計算が必要となり、現実的に改ざんできない仕組みになっているのです。(6 ブロック以上になるとほぼ不可能と言われているようです。)

ブロックが作成された後の流れ

  1. ブロックがネットワークに共有される。
  2. ブロックを受け取ったノードはデータが正しいかをチェックし、正しくなければ拒否(データを破棄)。正しければ次のネットワークにブロックを伝える。
  3. 検証が終わったノードは自身のブロックチェーンにブロックを取り込む
  4. ブロックが分岐した場合、チェーンが長い方のブロックが取り込まれる。

ここは流れだけで詳細は省略します。

まとめ

ざっくり概要を学んでいきました。ここら辺は明日からコードで見ていきたいと思いますので、今日はこの辺で!

GitHubで編集を提案

Discussion