Satoshi Nakamotoのgenesisブロックメッセージ

ブロックチェーンgenesisブロックといわれるSaoshi Nakamotoが作った一番最初のブロックのに刻んだメッセージをプログラムでみてみましょう。 ちなみにこのgenesisブロックは、libbitocoinのソースに組み込まれているそうです。

mastering bitcoinのソースをちょっと書き換えて、libitcoinの最新バージョンに対応してみました。

#include <iostream>
#include <bitcoin/bitcoin.hpp>
using namespace bc;

int main() {

    //genesisブロックの取得
    chain::block block = chain::block::genesis_mainnet();

    //ブロックの最初のトランザクションの取得つまりcoinbaseトランザクションの取得
    chain::transaction coinbase_tx = block.transactions().at(0);
    assert(coinbase_tx.inputs().size() == 1);

    const chain::transaction::ins& coinbase_inputs = coinbase_tx.inputs();
    const chain::input coinbase_input = coinbase_inputs.at(0);

    //scriptをrawデータに変換
    const chain::script scr = coinbase_input.script();
    const data_chunk raw_message = scr.to_data(false);
    std::string message;
    message.resize(raw_message.size());
    std::copy(raw_message.begin(), raw_message.end(), message.begin());

    // genesisブロックメッセージの表示
    std::cout << message << std::endl;
    
    return 0;
}

コンパイルして実行すると...

$ ./satoshiwords
EThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks

訳すと タイム紙 2009年1月3日 大臣は銀行への二度目の救済を決めようとしている

おお、これがSaoshi Nakamotoのメッセージか! 既存の通貨の脆弱な点をニュースを取り上げる照ところがおもしろい。

ここからビットコインのすべてが始まった。