通过这些计算,Jing 的节点随后构建 coinbase 交易,以支付他自己的区块奖励。
coinbase 交易具有特殊的格式。它不是像普通交易输入一样指定要花费的前一个 UTXO,而是有一个“coinbase”输入。我们在“Inputs”(第123页)中研究了交易输入。让我们将普通交易输入与 coinbase 交易输入进行比较。表12-1显示了普通交易的结构,而表12-2显示了coinbase交易输入的结构。
表12-1. “正常”交易输入的结构
大小 | 字段 | 描述 |
---|---|---|
32字节 | 交易哈希(Transaction Hash) | 指向要被消费的 UTXO 所在的交易 |
4字节 | 输出索引(Output Index) | 要被消费的 UTXO 的索引号,第一个是 0 |
1-9字节(紧凑编码) | 脚本长度(Script Size) | 脚本长度(以字节为单位),后跟着 |
可变长度 | 输入脚本(Input Script) | 一个满足UTXO输出脚本条件的脚本 |
4字节 | 序列号(Sequence Number) | 用于BIP68时间锁定和交易替换信号的多用途字段 |
表12-2. Coinbase交易输入的结构
大小 | 字段 | 描述 |
---|---|---|
32字节 | 交易哈希(Transaction Hash) | 所有位都是零:不是交易哈希引用 |
4字节 | 输出索引(Output Index) | 所有位都是一:0xFFFFFFFF |
1字节 | Coinbase 数据大小(Coinbase Data Size) | Coinbase 数据的长度,从 2 到 100 字节 |
可变长度 | Coinbase 数据(Coinbase Data) | 任意数据,用于额外的 nonce 和挖矿标签;在 v2 块中,必须以区块高度开头 |
4字节 | 序列号(Sequence Number) | 设置为0xFFFFFFFF |
在 coinbase 交易中,前两个字段的值不代表 UTXO 引用。第一个字段不是“交易哈希”,而是填充了 32 字节,全部设置为零。而“输出索引”填充了 4 字节,全部设置为 0xFF(十进制 255)。输入脚本被 coinbase 数据替代,这是矿工使用的数据字段,我们将在接下来看到。