ビットコインブロックチェーンのブロック構造について




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

ブロックの構造

ブロックはメタデータを含むヘッダと、ブロックサイズの大半を占める大量のトランザクションのリストによって構成されています。ブロックのヘッダサイズは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を実際に稼働させてみて動作を理解するためのサンプルコードの解説もあります。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です