Chancellor on brink of second bailout for banks
genesis blockのコインベーストランザクションについて調べたのでメモする。
is_coinbase
コインベーストランザクションは、bitcoinを新規で発生させる唯一のtxである。
その構造は、以下の例外を除き、その他の普通のトランザクションと変わらない。
1. tx inputは必ず一つである
2. そのinputの一つ前のtxは32バイトの00である
3. そのinputの一つ前のtx indexは0xffffffff
である
pythonで言えば、下記のコードの通りである。
def is_coinbase(self):
if len(self.tx_ins) != 1:
return False
first_input = self.tx_ins[0]
if first_input.prev_tx != b'\x00' * 32:
return False
if first_input.prev_index != 0xffffffff:
return False
return True
script sigにも特に制限がなく(正確には途中からBIP0034がある)、script sig単独での評価が有効である限り、マイナーが好きな値を設定できる。
genesis blockのコインベーストランザクション
なので、一番最初のblockのコインベーストランザクションのscript sigには、satoshi nakamotoがメッセージを込めている。
from io import BytesIO
from script import Script
stream = BytesIO(bytes.fromhex('4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73'))
s = Script.parse(stream)
print(s.cmds[0]) # b'\xff\xff\x00\x1d'
print(s.cmds[1]) # b'\x04'
print(s.cmds[2]) # b'The Times 03/Jan/2009 Chancellor on brink of second bailout for banks'
コマンドの1つ目(ffff001d)及び2つ目(04)についてはその意図は調べてもわからなかったが、3つ目はThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks
という、当時のイギリスの新聞の見出しとなっている。
※これらの文字は、ASCII文字に対応したbyteを、pythonが解釈して表示している
ちなみにだが、2つめのblockのコインベーストランザクションのscript sigには、特に解読できるメッセージは含まれていなかった。