酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(21):如何理解比特币的创币交易(Coinbase Transaction)?

比特币的区块体包含一笔或多笔交易,其中第一笔交易被称为创币交易或者“CoinBase交易”。

创币交易由挖矿节点构造,用来奖励该矿工所做的贡献。

跟普通交易不同的是,创币交易没有交易输入,不消耗UTXO。创币交易只包含一个被称作Coinbase的输入,用来创建新的比特币。创币交易有一个输出,支付到这个矿工的比特币地址。

创币交易的资金由两部分组成,一部分是所构造的新区块的区块奖励(coinbase奖励),另一部分是这个区块里的全部交易的手续费,即矿工费。

coinbase奖励最初是50BTC,每经过21万个区块减半,目前是12.5BTC,明年(2020年)将出现再次减半,到时减为6.25BTC。

矿工费由添加到区块交易的输入和输出分别进行求和,然后用输入总额减去输出总额得到矿工费总额,公式如下:

矿工费 = 总交易输入 – 总交易输出

coinbase奖励与矿工费加起来,就是创币交易的总资金,这笔资金奖励给构造这个区块的矿工。

创币交易的结构比较特殊,与一般交易输入需要指定一个先前的UTXO不同,它包含一个“coinbase“输入。

先前有介绍过常规交易的数据结构,现在回顾下常规交易的交易输入的数据结构:
交易输入的数据结构包含如下字段:
1. 交易哈希,前置交易的hash,32个字节。
2. 交易输出索引,前置交易的交易输出的索引,4个字节。
3. 解锁脚本长度,1~9个字节,表示脚本长度。
4. 解锁脚本,可变长度,由上一个字节确定。
5. 序列号,4个字节,用来覆盖在锁定时间之前失效的交易。这项功能目前在比特币中没有用到,大部分交易将其设置为最大整数0xFFFFFFFF。
6.

在Coinbase交易中,“交易哈希”字段32个字节全部填充0,“交易输出索引”字段全部填充0xFF(十进制的255),这两个字段的值表示不引用UTXO。“解锁脚本”由coinbase数据代替,数据可以由矿工自定义。

coinbase数据最初可以任意填写,后来改为最初的几个字节要按照特定格式写入,由特定的意义,剩余部分仍然是由矿工自由写入。

其中第一个字节的数字,表示后面跟着的字节长度,这个长度内的数字,表示这个区块的区块高度。

剩余部分的数据,现在一般用来作为挖矿的额外随机数(extra nonce)。比特币挖矿过程就是找出一个随机数,跟区块头的其他数据拼在一起取哈希,找到的哈希值小于或者等于目标值。这个随机数的保存在区块头,他的长度是32位,这个取值范围是比较有限的,仅仅靠这个,可能找不到一个值满足挖矿条件。这里就用得到coinbase数据的extra nonce。改变extra nonce的内容,将会导致这笔交易的哈希值发生变化,从而导致全部交易的merkle根字段发生变化。

coinbase数据的extra nonce实际上扩大了随机数的取值范围,从而有更大的输入去产生区块的哈希值。

未经允许不得转载:酸饼 » 区块链入门100问(21):如何理解比特币的创币交易(Coinbase Transaction)?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼