比特币创世块解剖:那 50 枚为什么永远花不掉 图 1
比特币创世块解剖:那 50 枚为什么永远花不掉 · 图 1

第 0 块特殊在哪里

比特币创世块是主网高度为零的区块,也是节点识别这条链的固定起点。它的前块哈希字段仍占三十二字节,只是全部为零,因为之前没有父块。Bitcoin Core v28.0 的链参数源码保存了创世块的构造参数,并断言计算出的区块哈希与预设值一致。这里的“硬编码”描述软件怎样固定起点,不代表创世块没有工作量证明。

主网创世块的 nonce 为 2083236893,nBits 为 0x1d00ffff。对其八十字节区块头执行双 SHA256,所得哈希满足对应目标阈值。因此,不能把“节点启动时无需重新挖创世块”写成“创世块不是挖出来的”。前者是节点初始化行为,后者错误否定了区块头中已有的有效工作量证明。具体字段和比较方法见 区块头哈希与目标值

还要区分区块头和交易:报纸头条保存在 coinbase 交易的输入脚本中,并不直接占用区块头的八十字节。交易通过默克尔根与区块头关联。创世块只含一笔交易,其默克尔根就是这笔交易的交易标识;相关结构见 默克尔树与区块头承诺

那笔五十枚补贴为什么花不掉

创世块的 coinbase 含一个五十枚比特币的公钥支付输出。问题不在于奖励尚未成熟,也不在于金额小到不能支付手续费,而在于该输出没有进入可花费的未花费交易输出集合。Core 的链参数源码对此有专门注释;v28.0 的 ConnectBlock 在识别创世块后跳过连接其交易,仅按需要更新视图中的最佳块标识。

因此,在现行比特币规则下,即使有人拥有对应私钥,也不能把这笔原始输出当作普通输入花费。有效签名只能证明授权,不能凭空建立一个节点并不承认为可花费的输出。普通 coinbase 的构造与成熟要求见 coinbase 交易的结构,不要把普通奖励的等待条件套到创世块特例上。

“永远花不掉”应理解为现行规则下不可花费,而不是声称任何人连另建一套不同规则的软件都做不到。改变这项处理会涉及共识兼容性,不能通过改一个钱包选项让原有网络接受。后来向相关地址转入的款项则是另行创建的输出,不是原始补贴的续存;其花费条件应逐笔看脚本,不能由创世块特例推断。本文不宣称这些后续输出的实时余额、花费状态或私钥持有情况。

报纸头条提供什么证据

源码中的字符串是 The Times 03/Jan/2009 Chancellor on brink of second bailout for banks。它常被解读为对银行救助的评论,但这类动机解释不能冒充代码能证明的事实。可直接核对的是这段文字存在于交易输入脚本中,且被交易哈希与默克尔根承诺。

头条也给区块的形成时间提供外部线索:若文字在某个时点才公开可得,就能辅助判断包含它的数据不早于该时点。但仅凭这行文字,不能证明网络启动前不存在其他计算,也不能还原完整的挖矿过程或精确耗时。区块自身的时间戳同样不是独立授时机构的证明,相关约束见 区块时间戳与中位时间。把链上字段、外部报纸记录和对作者意图的解读分开,历史叙述才不会越界。

怎样核对,而不是只看一张截图

在自己的主网节点上,可先用 getblockhash 0 得到创世块哈希,再将它传给 getblockheadergetblock 查看区块头与区块数据。若要自行复算,应取得序列化区块头,正确处理整数的小端编码以及哈希字段的内部字节顺序,不能直接对浏览器显示的十六进制文本做摘要。

主网预设哈希为 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。核对时应分别确认字段、序列化结果、双重摘要和由 nBits 解出的目标;0x1d00ffff 是目标的紧凑编码,并非完整目标整数。复算一致能证明这些数据彼此对应,却不能单独证明你下载的软件可信,也不能替代后续区块与交易的验证。

新建链与共享历史的分叉不是一回事

复制代码后更换创世块,可以建立一条独立起点的新链;主网与测试网络也使用各自的链参数。但从比特币既有历史分裂出去的链可以保留共同创世块和分叉前区块,只在分叉点之后按不同规则继续发展。因此,“所有分叉币都重新设置创世块”是错误概括。识别网络不能只看创世哈希,还要核对分叉后的规则、链尖以及软件采用的参数。

创世块与历史检查点都涉及预设信息,但不是同一种机制:前者确定链的起点,后者在采用它的具体版本中约束某些历史分支,背景见 初始下载与历史锚点的区别。创世块告诉我们的边界是,固定起点、有效工作量证明与交易可花费性必须分别判断;三者不能互相替代,更不能据此判断资产价值。本文不构成投资建议。