Coinbase 是一种双方同意的交易类型,而不是 Coinbase 公司或定期付款。节点与区块一起验证零出点、根据 BIP34 的高度、奖励上限、零位置、成熟度和可能的 SegWit 承诺。它不被单独接受到内存池中。
一个区块必须包含至少一个交易,并且 coinbase 只能是第一个。 Bitcoin Core 通过其精确结构来识别它:单个输入,在先前输出的哈希值中包含 32 个零字节,索引为 0xffffffff。输入不会解锁现有的 UTXO,因此它没有常规签名或 prevout 值。一笔交易仍然可以有多个输出、常规版本以及锁定时间和自定义 txid。 [比特币开发者参考 — Coinbase 输入] [比特币开发者参考 — 区块链] [比特币核心 — transaction.h (IsCoinBase)]
coinbase 输出的总和不能超过该金额的 GetBlockSubsidy 加上该区块中所有其他有效交易的费用。只有新发行的奖励组件才能创造新的聪;费用转换预先存在的聪。矿工可以索取更少的钱,差异就会永远消失,但是超过限制的单个聪会使整个区块失效。共识并不能决定矿池、矿工或多个脚本之间的划分。 [比特币核心-validation.cpp] [比特币核心-miner.cpp]
从 BIP34 开始,scriptSig coinbase 必须以当前区块高度作为最小编码的 CScript 编号开始。整个scriptSig为2到100字节。其余的可能带有额外的随机数、池标签或合并的挖掘承诺,但它并不超出规则:不正确的高度或长度将使块无效,并且嵌入的签名操作码可能会消耗 sigop 限制。 [比特币开发者参考 — Coinbase 输入] [BIP 34 — coinbase 中的区块高度]
ASIC 更改标头中的随机数,但 32 位空间很快就会耗尽。因此,挖矿软件将额外的随机数转化为币库;这将更改其 txid、Merkle 根交易以及随后的块头,因此它会获得新的哈希空间。池协议在工作人员之间划分此空间,以便他们的份额不会发生冲突。额外的随机数是一个协调块,而不是额外的发射。 [比特币核心 — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — 挖矿协议规范]
Coinbase 输出使用通用锁定脚本,可以在多个地址或策略之间分割。矿池可以支付给收款地址,立即分割收入,或者为运营商保留产出。然而,节点验证金额和脚本,而不是合同或实际所有者。支付阈值、PPS、FPPS、PPLNS 和后续提款都是非协议池规则。 [比特币核心 — miner.cpp] [BIP 22 — getblocktemplate]
如果该块包含见证交易,则 BIP141 需要在一个输出中进行 coinbase 见证承诺:以 6a24aa21a9ed 开头的 OP_RETURN 和 32 字节承诺。 coinbase 输入见证包含单个 32 字节保留值。如果匹配输出较多,则共识取最高索引。此输出绑定见证 Merkle 根;不是对矿工的奖励。 [BIP 141 — 隔离见证承诺]
coinbase 的输出在 UTXO 集合中被标记了一个特殊的标志,只有当支出和创建区块的高度差达到 COINBASE_MATURITY,即今天的 100 时才可以被花费。因此,来自高度 H 的奖励可以在区块 H+100 中第一次被花费。钱包可能会显示一次确认的明显差异,因为生成块首先计数。成熟并不是终结。 [比特币核心——consensus.h (COINBASE_MATURITY)]
如果一个开采的区块在重组期间从工作量最大的活动链中退出,则其 coinbase 输出将从活动 UTXO 集中消失。已经花费到期奖励的后续交易也可能无效。 100 个区块的延迟限制了短期重组的损害,但并不能保证不变性。矿池必须单独监控活跃链、成熟度及其对矿工的承诺。 [比特币核心——validation.cpp] [比特币核心——consensus.h (COINBASE_MATURITY)]
全节点在验证期间要求 coinbase 位于零位置,拒绝额外的 coinbase,检查 scriptSig 长度和 BIP34 高度,计算其他交易的费用并拒绝高于新发行加费用的奖励。它还验证价值范围、重量、见证人承诺和支出的后期到期日。没有高度和区块上下文的单独币库不属于内存池。 [比特币核心 — transaction.h (IsCoinBase)] [比特币核心 —validation.cpp] [BIP 141 — 隔离见证承诺]
在早期的区块中,可以创建相同的 txid coinbase,因为高度尚未强制要求。 BIP30 防止旧交易的未使用输出被覆盖,BIP34 使现代币库通常具有独特的高度。 Genesis 是一个历史例外:它的 coinbase 位于序列化区块中,但初始化代码从未将其输出放入可消耗的 UTXO 数据库中。所以,著名的50个BTC是花不完的。 [BIP 30 — 重复交易] [BIP 34 — coinbase 中的区块高度] [比特币核心 — chainparams.cpp(创世构造)]
要获得更完整的理解,请将本词条与以下词条结合阅读: 区块, 区块补贴, 交易费, 挖矿, Block Template, Bitcoin. 反向关联还来自: 区块补贴, 确认, Nonce.