ブロックの構造
ブロックはメタデータを含むヘッダと、ブロックサイズの大半を占める大量のトランザクションのリストによって構成されています。ブロックのヘッダサイズは80バイトしかありませんが、1つのトランザクションのサイズは最低でも250バイトあり、2018年4月現在は平均して1000トランザクションが1つのブロックに含まれています。
したがって、ブロック全体のサイズはヘッダサイズの3000倍程度となっています。下記はブロックの大まかな構造を示しています。
サイズ | フィールド名 | 説明 |
4バイト | Block Size | ヘッダ情報とトランザクション情報を合わせたブロックサイズ(バイト単位) |
80バイト | Block Header | nonce, Merkle Tree, Difficultyなどのヘッダ情報が含まれる |
1~9バイト | Transaction Counter | ブロックに含まれるトランザクション数 |
可変 | Transactions | ブロックに含まれるトランザクションのリスト |
ブロックヘッダ
ブロックヘッダは下記データで構成されています。
サイズ | フィールド名 | 説明 |
4バイト | Version | プロトコルバージョン |
32バイト | Previous Block Hash | 親ブロックのブロックヘッダハッシュ |
32バイト | Merkle Root | ブロックの全トランザクションに対するマークルツリーのルートハッシュ |
4バイト | Timestamp | ブロックの生成時刻 |
4バイト | Difficulty Target | ブロック生成時のProof of workのdifficurty |
4バイト | Nonce | Proof of workで使用するカウンタ |
Block Hash
Previous Block Hashは1つ前のブロックのヘッダをSha-256ハッシュ関数で2回ハッシュ化した値で、全ブロックの中でユニークな値となります。ブロックハッシュは1つ前のブロックヘッダ情報を使うことでブロックの改竄を困難にしています。
Merkle RootとMerkleTree
マークルツリーにはブロックに含まれるトランザクション情報の要約が含まれます。マークルツリーは二分ハッシュ木(binary hash tree)とも呼ばれ、大規模データを効率的に要約し、検証できるようにするデータ構造です。
マークルツリーでは、トランザクション全体のデジタル指紋を作成することを通じて、あるトランザクションがブロックに含まれているかを非常に効率的に検証する方法を提供します。
マークルツリーは再帰的に葉ノードのペアから1つのハッシュ値を計算し、ハッシュ値が1つになるまで続けます、この最後に残ったハッシュ値をマークルルートと呼びます。マークルツリーに使われるハッシュアルゴリズムはSHA-256を2回適用したものでdouble-SHA-256とも呼ばれています。
最後に
最後にブロックチェーンエンジニアって何?どうやったらなれるの?という人向けに書いた下の記事も読んでみてください。
おすすめ書籍
ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。
こちらはブロックチェーンの初学者向けになります。ブロックチェーンの応用例の紹介から基礎的な理論まで分かりやすく図解で解説されています。また、ビットコインやEthereum、HyperLdger Fabricを実際に稼働させてみて動作を理解するためのサンプルコードの解説もあります。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す