字段 | 大小 | 格式 | 描述 |
---|---|---|---|
Version | 4 字节 | 小端序 | 区块版本号 |
Previous Block | 32 字节 | 自然字节序 | 前一个区块的区块哈希 |
Merkle Root | 32 字节 | 自然字节序 | 区块中包含的所有交易ID的默克尔根 |
Time | 4 字节 | 小端序 | 当前时间的 Unix 时间戳 |
Bits | 4 字节 | 小端序 | 目标值的紧凑表示 |
Nonce | 4 字节 | 小端序 | 随机数,用于尝试找到有效哈希 |
Transaction Count | 动态 | compact size | 区块中包含的交易数量 |
Transactions | 动态 | 交易数据 | 区块中包含的所有原始交易数据 |
区块头中的 4 字节 version
字段表示创建该区块时使用的比特币协议版本。
历史
-
以上为正常字节序, 实际的区块数据中, 以小端序显示。
-
在激活高度前面的区块中, 会发现有相同的
version
值, 用于表示矿工支持该升级, 直到激活高度后, 才会真正使用该版本号。
2015 年 10 月, BIP 9 被提出, 旨在提供更灵活和可扩展的升级机制, 其规定 version
字段的比特位分配, 称作 version bits
。
Version Bits
version
字段占据 4 个字节, 即 32 个比特位。前 3 个比特位必须为 001
, 用于表示正在使用 version bits
。后 29 个比特位用于不同的软分叉升级提议, 意味着可以同时支持最多 29 个不同功能的升级。
该版本号也成为了当前默认版本号。
对于不同的软分叉升级需将对应的比特位设置为 1。
Bit 1
BIP 141 隔离见证升级, 从0开始计数, 将倒数第 1 个比特位设置为 1。
如下是激活高度 481824 的区块头数据
0x02000020
转换为正常字节序为 0x20000002
, 转换为二进制为
Bit 2
BIP 341 Taproot升级, 将倒数第 2 个比特位设置为 1。
如下是激活高度 709632 的区块头数据。
0x04002020
转换为正常字节序为 0x20200004
, 转换为二进制为
软分叉激活
软分叉激活使用了该版本协议, 在一个目标值调整周期(2016个区块)内, 有 90% 区块的 version
字段将对应的新功能的比特位设置为 1, 则该升级将激活。
由于 version
字段对于版本位没有特定的限制, 所以经常可以看到区块头数据中包含一些奇怪的版本号, 这是因为矿工将其作为额外的随机数计算区块哈希了。
例如区块 860498 的区块头数据
0x00606821
转换为正常字节序为 0x21686000
, 转换为二进制为
再比如区块 860362 的区块头数据
0x00801520
转换为正常字节序为 0x20158000
, 转换为二进制为
这些版本位并没有针对任何特定升级进行信号传递, 只是方便矿工可以快速计算出小于目标值的区块哈希, 以便获得区块奖励。