中本聪那句报纸头条,是怎么写进创世区块的?(技术原理)
中本聪在比特币创世区块里嵌入“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”,这条著名的“报纸头条”确实嵌入在创世区块(Block 0)里,但它既不是写在UTXO里,也不是用后来的OP_RETURN或铭文(Inscriptions),它是用2009年比特币协议允许的最原始方式嵌入的,coinbase交易的scriptSig字段。

创世区块的结构回顾
创世区块(hash: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f)只有一个交易,coinbase交易(也叫创币交易)。
比特币是UTXO模型(Unspent Transaction Output,未花费交易输出)。
普通交易:消耗旧UTXO(input)→ 创建新UTXO(output)。
创世区块例外:没有“旧UTXO”可消耗,它直接凭空创建了第一个50 BTC的UTXO(给地址 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)。
消息到底写在哪里?coinbase的scriptSig
比特币交易结构(简化)
交易
├── inputs(vin)
│ └── input[0](coinbase专用)
│
├── prev_tx_hash = 0000...0000(全0,假的)
│
├── prev_output_index = 0xFFFFFFFF(最大值,标记coinbase)
│
└── scriptSig ←←← 这里就是嵌入消息的地方!
└── outputs(vout)
└── output[0]:50 BTC + P2PK公钥脚本(真正创建UTXO的地方)
coinbase交易的 scriptSig 字段在早期协议里被设计成可以放任意数据(miner可以用来写矿池名称、版本、额外nonce等),中本聪就利用这一点,把报纸头条塞了进去。
原始scriptSig的完整hex
04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
拆解一下(比特币Script脚本是栈式操作)
1、04 ffff001d → push 4字节(nBits难度值)
2、01 04 → push 1字节(额外nonce)
3、45 → push接下来的69字节数据
4、5468652054696d657320... → 这69字节正是ASCII编码的,The Times 03/Jan/2009 Chancellor on brink of second bailout for banks,转换成可读文字就是大家熟悉的那句话(证明区块至少在2009年1月3日之后创建,同时讽刺银行救市)。
为什么当时能这么做?
2009年协议规则:coinbase的scriptSig长度上限很宽松(早期允许100+字节任意数据),矿工可以随便写。
没有OP_RETURN:OP_RETURN(专门用来嵌入数据)是2014年才引入的。
没有铭文(Ordinals):铭文是2023年用Taproot witness数据玩出来的“艺术字”,创世区块时根本不存在。
这就是比特币最早的链上留言机制,纯靠coinbase的灵活性,后来比特币社区把这个字段限制得更严(防止滥用),但coinbase至今仍能放少量自定义数据(比如矿池名字)。
现在scriptSig主要用途
1、存放区块高度(BIP-34,2012年生效):scriptSig必须以区块高度的变长整数开头(little-endian编码),这是为了防止coinbase交易重复(避免txid碰撞),如高度800000的区块,scriptSig开头是03 40 0c 0c(3字节表示800000)。
2、矿池的extranonce:矿工/矿池把这个字段的后半部分用来放“额外nonce”或矿池标签(pool tag),帮助区分不同矿工的份额,避免重复工作,这是最常见的实际用途。
3、SegWit承诺(witness commitment):如果区块包含SegWit交易,coinbase scriptSig里会额外嵌入witness merkle root的hash(通常用OP_RETURN或特定格式)。
4、合并挖矿(merged mining):一些侧链/辅助链(如Namecoin)会把他们的根hash塞进coinbase scriptSig。
5、其他小用途,少数矿池放版本号、信号支持某个BIP、或简单标识(如“/F2Pool/”)。
限制越来越严(不能随便乱写了)
共识规则上限:scriptSig最大100字节(从早期就有限制,BIP-34后更严格)。
必须以高度开头:如果不放或格式错,区块会被全节点拒绝(invalid block)。
不能放超大数据:不像OP_RETURN(可放80字节任意数据)或铭文(Ordinals用witness),coinbase scriptSig不适合“铭文式”大量数据存储,社区早就把“滥用数据嵌入”转移到OP_RETURN、witness等地方。
能在哪里看到它?
用任意浏览器查看创世区块
mempool.space → Block 0 → 第一笔交易(Coinbase)→ Input → ScriptSig(或Coinbase字段)
blockchain.com → 同上,原始区块hex文件里也能直接搜到上面那串字符。
中本聪的这条消息不是藏在UTXO输出里,而是写在coinbase交易的input scriptSig里,利用了比特币创世时允许“任意数据”的设计,这既是技术实现,也是宣言,证明比特币诞生于金融危机时刻,它开创了“在区块链上写字”的先河,后来才演化出OP_RETURN、铭文等更正式的链上数据方式。






