はじめに
Bitcoin の Genesis ブロックには The Times の下記のような記事タイトルが含まれている、というのは Bitcoin にある程度精通している人であれば有名な話かと思います。
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
それでは実際に該当のブロックのデータをブロックエクスプローラーで見に行ってみましょう
あれ、そのような文言は見つかりませんね。いったいブロックのどこに埋め込まれているのでしょうか。
結論
ブロック内にある Coinbase トランザクションに書き込まれている
解説
ブロックチェーンの仕組み
ブロックチェーンはブロックと呼ばれるデータ構造のものが連なっているものです。ブロックとはどのようなデータを持っているでしょうか。ブロックはメタデータが含まれる Block Headers と誰から誰にいくら送金されたかを含むn個のトランザクションで構成されています。ブロック内のトランザクション数は可変で合計1MB以下であればトランザクションをいくつでも含むことができます。
トランザクション
トランザクションにはインプットとアウトプットの2つが記述されています。インプットには送金元のアドレス(厳密にはUTXOのアドレス)が含まれており、アウトプットには送金先と送金額が記載されています。
Coinbase トランザクション
各ブロックには必ずトランザクションリストの先頭に Coinbase トランザクションというものが含まれています。これはビットコインのマイニングによって得られる、マイナーへの採掘報酬のトランザクションです。Genesis ブロック内には1つのトランザクションしか存在しておらず、それが Coinbase トランザクションになります。Coinbase トランザクションはマイナー自身が作成していて、トランザクションのインプットには下記表1のデータが含まれており、アウトプットには通常のトランザクションと同様にマイナーのアドレスと送金額が含まれています。
Size | Field | Description |
---|---|---|
32 bytes | Transaction Hash | All bits are zero: Not a transaction hash reference |
4 bytes | Output Index | All bits are ones: 0xFFFFFFFF |
1–9 bytes (VarInt) | Coinbase Data Size | Length of the coinbase data, from 2 to 100 bytes |
Variable | Coinbase Data | Arbitrary data used for extra nonce and mining tags. In v2 blocks; must begin with block height |
4 bytes | Sequence Number | Set to 0xFFFFFFFF |
ここで注目するのは Coinbase Data フィールドで、ここにはマイナーが 100 バイトまで任意の値(今だと部分的に決まったフォーマットあり)を入れることができます。実際にジェネシスブロックにある Coinbase トランザクションの内容を https://www.blockchain.com/btc/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b で見てみましょう。Inputs にある Sigscript と呼ばれる下記値が Coinbase Data になります。
ffff001d
OP_4
5468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
ffff001d というのは difficulty bits、 OP_4 というのはビットコインで使用されている Script ですがここでは説明を割愛します。546... のところの値を ASCII コードの値としてみて下記のように ASCII 文字に変換すると目的の記事タイトルが現れます。
$ echo '5468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73' | xxd -p -r
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
以上のことから、ブロックチェーンのジェネシスブロック自体に書き込まれているのではなく、ジェネシスブロック内の Coinbase トランザクションの Coinbase Data に ASCII文字を16進数エンコードされた値が含まれている。というのが正確なところでしょうか。