比特币的“奖励减半”代码在哪?
比特币的"奖励减半"不是靠董事会投票决定的,也不是某个服务器上的开关一拨就完事。它就写在一段公开的代码里,任何人都可以去GitHub上看。这篇文章不绕弯子,直接带你找到这段代码的准确位置,逐行看它是怎么运行的。 各大交易所:欧易官网 币安官网 芝麻Gate
一、核心代码的位置

比特币减半的核心逻辑藏在一个叫 GetBlockSubsidy 的函数里。主文件在 src/validation.cpp,官方仓库 https://github.com/bitcoin/bitcoin,最新版就在这个函数里面。
比特币网络中所有全节点都运行着同一份源代码,验证新区块时都会调用这个函数计算当前区块的奖励。如果一个矿工试图伪造一个超过规定数额的区块,网络中的所有节点都会拒绝这个区块。这不是某个人说了算的事,而是代码逻辑约束下的结果。
二、完整核心代码逐行拆解
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
// 当右移操作未定义时,强制区块奖励为零
if (halvings >= 64)
return 0;
CAmount nSubsidy = 50 * COIN;
// 补贴每 210,000 个区块减半一次,大约每 4 年发生一次
nSubsidy >>= halvings;
return nSubsidy;
}就这么几行,整个减半机制全在里面了。
三、关键参数详解
| 参数/常量 | 含义 | 具体数值 |
|---|---|---|
nHeight | 当前区块的高度,即全网已经挖出的区块数量 | 动态变化 |
consensusParams.nSubsidyHalvingInterval | 减半间隔区块数 | 210,000 个区块 |
COIN | 1个比特币等于多少"聪"的进制 | 100,000,000(1亿) |
50 * COIN | 初始区块奖励(单位是聪) | 5,000,000,000 聪(即50个BTC) |
>>= | 二进制右移运算符 | 每右移一位相当于除以2 |
halvings >= 64 | 减半次数上限 | 超过64次,奖励直接归0 |
拿一个真实例子代入公式:假设当前区块高度是704,673,减半间隔是210,000个区块。第一步,用 704,673 除以 210,000,得到 3.35,取整后 halvings = 3。第二步,3 远小于 64,继续计算。第三步,将初始奖励 50 进行右移 3 次:右移 1 次 50→25,右移 2 次 25→12.5,右移 3 次 12.5→6.25。最终得出当前区块奖励为 6.25 BTC。
四、为什么21万这个数字决定了"四年一次"?
比特币网络设计为每 10 分钟左右挖出一个新区块。210,000 个区块乘以 10 分钟,大约就是 4 年(精确计算是 210,000 × 10 ÷ 60 ÷ 24 ÷ 365 ≈ 3.995 年)。所以每隔四年左右,矿工到手的奖励就会砍一半,这不是人为安排的,是数学算出来的。
五、2100万枚BTC上限是怎么来的

总和 = 210,000 ×(50 + 25 + 12.5 + 6.25 + ……)= 210,000 × 100 = 21,000,000 BTC。
这也是为什么代码里从没有直接出现过 21,000,000 这个数字,但最终产出的总量却恰好是这个数。这不是巧合,是等比数列求和的结果,写代码的人一开始就算好了。
六、代码为什么不能改?
很多人会问:代码就在那里,我把它改了不就行了?
事情没那么简单。比特币的去中心化依靠的是共识:全网成千上万个节点必须同时接受并运行同一套规则。如果只是你一个人单方面改了代码,你挖出来的区块在其他节点眼中就是非法的,会被直接拒绝。改变减半规则需要整个社区达成分叉共识。这不是写代码的问题,而是治理和生态共识的问题。代码公开、规则写死、全网监督——这才是比特币减半机制真正靠得住的地方。
免责声明
本文仅为技术科普,不构成任何投资建议。代码位置和参数可能随版本变化,请以比特币Core官方GitHub仓库为准。





