ブロックヘッダー
ブロックヘッダーとは、ブロックチェーン上の
ブロックの要約部分であり、トランザクションの全リストではなく、そのブロックを識別するための中核データを保持しています。
ヘッダーが保持する
メタデータにはブロックの作成時刻、直前のブロックとの接続関係、ブロック内のすべてのトランザクションを表す単一のハッシュ値が含まれます。つまりブロックヘッダーは、トランザクションの生データを除いた、ブロックの識別情報を集約したものだといえます。
ビットコインにおいて、ブロックヘッダーは固定長80バイトの構造で、次の6つのフィールドから構成されています。
バージョン:そのブロックが準拠するコンセンサスルールを示し、プロトコルアップグレードへの対応を示すためにも使用できます。
直前のブロックのハッシュ:一つ前のブロックのヘッダーから算出された
ハッシュ値で、ブロック同士を連結してチェーンを形成する役割を担います。
マークルルート:ブロック内のすべてのトランザクションから導き出される単一のハッシュ値です。各トランザクションのハッシュを段階的に組み合わせてツリー状に集約する
マークルルート構造によって生成されるため、いずれか一つのトランザクションが変更されると、この値も必ず変化します。
タイムスタンプ:ブロックが作成されたおおよその時刻を、Unixタイムスタンプの形式で記録した値です。
難易度目標(nBits):ヘッダーのハッシュ値に要求される上限値を符号化した値です。ネットワークの難易度はこの値から算出されるものであり、ヘッダーに直接記録されているわけではありません。
ノンス:有効なハッシュ値を見つけるために、マイナーが
ノンスフィールドを繰り返し書き換えていくカウンターです。
マイナーはブロックを有効化する際、このブロックヘッダーをハッシュ化します。ヘッダーはわずか80バイトしかないため、数千件に及ぶこともあるブロック内の全トランザクションをハッシュ化するよりもはるかに効率的です。ブロックが
マイニングされる際には、ヘッダーがダブルSHA-256によってハッシュ化され、その結果がそのブロックの識別子となります。
ブロックヘッダーのサイズが小さいことは、ライトクライアントにとってもメリットとなります。
ビットコインの全ブロックチェーンを保存するには膨大なストレージが必要ですが、ブロックヘッダーだけを保持するのであれば、必要な容量はごくわずかで済みます。各ヘッダーはマークルルートによってそのブロックのトランザクションと紐づいているため、ライトクライアントはブロックチェーン全体をダウンロードしなくても、特定のトランザクションが特定のブロックに含まれているかどうかを後から確認できます。このアプローチは依然としてデータの一部を第三者に依存するため、完全な独立検証とは言えません。それでも、リソースが限られたデバイスで一定レベルの検証を行うことは可能です。