Difficulty Adjustment 会自动改变找到区块的难度。如果矿工找到区块的速度太快,规则就让搜索变难;如果太慢,就让搜索变容易。因此,即使算力大幅变化,Bitcoin 也能维持大致稳定的节奏。每个独立检查全部规则的节点都按同一套规则检查调整结果,不需要管理员决定。
设想有许多新矿机加入挖矿。它们每秒能共同尝试更多计算,在难度不变时,找到区块的平均速度就会加快。区块是一组已确认的交易,产生区块时还可能发行新的比特币。如果没有难度调整,更强的机器也会加快发行速度。矿工不断计算哈希值,也就是区块头的数字指纹;当结果足够小时,尝试才算成功。门槛越严格,每次尝试成功的概率就越低,平均需要的工作量也就越大。 [3]
在 Bitcoin 的主网络 mainnet 上,每经过 2 016 个区块,难度就会重新计算一次。按每个区块平均十分钟计算,大约是两周。但它不是一个定时闹钟:只有到达相应的区块序号,也就是区块高度,才会触发调整。如果大量矿工突然关机,剩下的区块可能要花更长时间才能产生。网络会先以旧难度完成本轮周期;mainnet 没有立即生效的紧急降难度机制。 [1] [2]
假设计算所用的时间是 10 天,而目标是 14 天。下一轮挖矿会更难:难度大约按 14 比 10 的比例提高,也就是增加 40%。反过来,如果测得的周期时间是 28 天,难度就大约减半。这两个简化例子忽略了舍入,并假定不会触及允许的最低难度。如果之后算力保持不变,新的设置会让预期出块时间重新接近十分钟。 [1] [2]
十分钟是长期平均值,并不是承诺的等待时间。两个区块可能接连出现,也可能要等很久才出现下一个。而且,你的交易未必会进入下一个区块:手续费和其他待处理交易也会影响选择。难度调整不控制 BTC 价格,也不保证矿工盈利。它同样不会改变每个区块允许发行的新比特币数量;该数量定期减半的 Halving 遵循另一条规则。 [2] [3]
规则使用一个称为 target 的数值门槛。target 越小,挖矿越难;通常所说的难度数值与它成反向关系。新的 target 等于旧 target 乘以测得的时间,再除以目标时间 1 209 600 秒。计算之前,测得的时间会被限制在目标时间的四分之一到四倍之间,避免单次调整幅度不受限制。target 也不能超过允许的最大值 powLimit。它以精度有限的紧凑格式 nBits 存入区块头,因此前面例子中的百分比是近似值。 [1] [2]
Bitcoin Core 比较已完成周期最后一个区块与第一个区块的区块头时间戳。2 016 个区块之间有 2 015 个间隔,规则保留了这一历史细节。矿工在网络规则允许的范围内填写时间戳。它们不是区块发现时刻的精确测量,也不是 Median Time Past——后者是根据之前的区块计算出的另一种时间值。理解难度调整的目的并不需要掌握这个细节,但精确复算时不能忽略它。 [1]
网站经常展示下一次难度变化的预测。在本轮周期结束前,新区块还会陆续产生,预测也可能变化。你可以用自己的节点验证已经完成的调整:比较周期边界区块的时间戳,将其 nBits 转换为数值 target,然后连同限制和舍入步骤一起重新计算。每个 Full Node,也就是独立验证 Bitcoin 规则的节点,在接受区块时都会检查所需的 target。这里描述的是 mainnet;测试网络可能使用不同规则。 [1] [2]
要获得更完整的理解,请将本词条与以下词条结合阅读: Proof of Work, 挖矿, Timechain / Blockchain, Block Subsidy. 反向关联还来自: Timechain / Blockchain, Proof of Work, 挖矿, Halving.