中本聪那句报纸头条,是怎么写进创世区块的?(技术原理)

小编:迷魂冰 更新时间:2026-03-20 11:07

中本聪在比特币创世区块里嵌入“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、铭文等更正式的链上数据方式。

免责声明:本文所有内容及观点仅供参考,不构成投资建议,不代表本站观点和立场。投资者应自行决策与交易,对投资者交易形成的直接或间接损失,作者及本站将不承担任何责任!