术语表 /挖矿与共识
Coinbase 成熟期
又称 Coinbase maturity、币基交易成熟期。
- Coinbase 成熟期是什么?
- Coinbase 成熟期是一项共识规则:区块新产生的币被锁定,在其后100个区块产生之前,任何交易都不得花费它们。
挖矿奖励在区块被找到的那一刻并不是可花费的资金。Bitcoin Core 在其共识头文件中将 COINBASE_MATURITY 设为100,因此等待时间为100个区块,按十分钟的出块目标约为16小时40分钟。您在交易所购买的币不受该规则影响,因为转到您手中的币都已至少花费过一次。
运作方式
Coinbase 成熟期由每个全节点作为网络规则强制执行,这意味着任何设置、任何钱包和任何矿池都无法放宽它。
检查本身只是一次减法。验证交易时,节点会检查每个输入,如果该币来自 coinbase 交易,就用该花费将落入的区块高度减去该币所在的区块高度。如果差值小于100,Bitcoin Core 会拒绝该交易,返回代码 bad-txns-premature-spend-of-coinbase,并附带一条说明尝试时所处深度的信息。在区块900,000中发放的奖励,最早可在区块900,100中花费,这是该减法结果达到100的最低高度。
设置这一延迟,是因为 coinbase 输出是唯一可能不复存在的一类币。普通的币能够经受区块链重组:持有它们的交易会回到内存池并被再次挖出。区块的奖励只因该区块在链中才存在,所以如果竞争分支获胜,奖励就会消失,由它衍生的一切也随之消失。如果基于后来消失的奖励构建花费,所有接触过它的钱包都会受到牵连。
Bitcoin Core 也会防范区块之间的空档。内存池中的每个条目都带有标记,说明它是否花费 coinbase 输出,源代码中的注释解释了原因:这些条目会在重组期间被重新扫描,以检查是否仍满足100个区块的规则。凡是再次变为未成熟的,都会被丢弃,而不会被挖入区块。
该规则有一个特点容易让人措手不及。等待时间按区块而不是按小时计算,因此难度周期缓慢时会延长,周期较快时会缩短。比特币的目标是每600秒出一个区块,16小时40分钟和人们熟悉的每天144个区块都由此而来,而平均十一分钟一个区块时,同样的100个区块会延长到18小时20分钟。
在哪里会遇到它
coinbase 成熟期最常见的表现,是钱包显示两个余额而不是一个。
Bitcoin Core 的 getbalances 会返回一个 immature 字段,源代码将其记录为来自未成熟 coinbase 输出的余额,而 getreceivedbyaddress 和 listunspent 都接受一个 include_immature_coinbase 标志,该标志默认为 false。Core 钱包比共识规则严格一个区块:在发放奖励的区块达到101个区块深度之前,奖励一直被视为未成熟,因此单独挖矿的矿工会看到余额比仅按网络规则要求的时间晚一个区块解锁。
矿池面板使用自己的术语,通常在已确认列旁设有待处理或未成熟列。按每份额固定金额付款的矿池,会在币成熟之前很早就为矿工记账,也就是用尚无法动用的奖励预付资金,如果该区块被替换,承担风险的是矿池而不是矿工。
该规则也为挖出的币进入市场的速度设定了下限。想要出售的矿工要等待100个区块,再转入交易所,然后等待其充币政策,通常是少量确认而不是一百次。
Coinbase 成熟期 vs 确认
Coinbase 成熟期是写入共识的一个固定深度,而确认数是一个持续累计的数字,任何人都可以从中选取一个门槛。
要求六次确认后才为充币入账的交易所,是自行选定这个数字的,明天就可以更改。100个区块的规则不是一种选择。它只涵盖由区块创建的币,在每个验证节点上的适用方式完全相同,违反它的交易不是慢,而是无效:任何矿工都无法将其打包,因为包含它的区块同样会被拒绝。