当前位置:首页 > BTC入门 > 正文内容

比特币的“奖励减半”代码在哪?

newbie1个月前 (06-07)BTC入门35

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


一、核心代码的位置

程序员正在 GitHub 上查看比特币的核心源代码

比特币减半的核心逻辑藏在一个叫 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 个区块
COIN1个比特币等于多少"聪"的进制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 个区块组成的循环

总和 = 210,000 ×(50 + 25 + 12.5 + 6.25 + ……)= 210,000 × 100 = 21,000,000 BTC

这也是为什么代码里从没有直接出现过 21,000,000 这个数字,但最终产出的总量却恰好是这个数。这不是巧合,是等比数列求和的结果,写代码的人一开始就算好了。


六、代码为什么不能改?

很多人会问:代码就在那里,我把它改了不就行了?

事情没那么简单。比特币的去中心化依靠的是共识:全网成千上万个节点必须同时接受并运行同一套规则。如果只是你一个人单方面改了代码,你挖出来的区块在其他节点眼中就是非法的,会被直接拒绝。改变减半规则需要整个社区达成分叉共识。这不是写代码的问题,而是治理和生态共识的问题。代码公开、规则写死、全网监督——这才是比特币减半机制真正靠得住的地方。


免责声明

本文仅为技术科普,不构成任何投资建议。代码位置和参数可能随版本变化,请以比特币Core官方GitHub仓库为准。


相关文章

比特币2100万上限是如何保证的?

比特币2100万上限是如何保证的?

过去十多年,比特币换了很多标签——从"极客实验"变成"数字黄金",从"泡沫"变成"战略储备资产"。但在所有叙事变化之中,...

比特币的创世区块里写了什么:那个被锁在时间胶囊里的265个字符,远不止一条新闻标题

比特币的创世区块里写了什么:那个被锁在时间胶囊里的265个字符,远不止一条新闻标题

打开任何一个比特币区块浏览器,把高度调到0,你会看到一个和其他区块长得差不多的数据块。哈希以一连串的0开头,交易只有一笔,时间戳定格在2009年1月4日凌晨。大多数人听说过它里面嵌着一行《泰晤士报》的...

比特币的隔离见证到底好在哪?

比特币的隔离见证到底好在哪?

2017年那阵子,比特币社区为"要不要把签名数据挪出去"吵得不可开交,中文社群里隔三差五就有人转发隔离见证的科普帖。我当时对比特币的理解还停留在"数字黄金"层面...

比特币的数字签名是如何工作的?从"签字画押"到全网验证

比特币的数字签名是如何工作的?从"签字画押"到全网验证

现实中签支票签合同,你签下的名字代表"我同意这笔交易,我是本人"。但比特币这个没有银行、没有中间人的系统里,问题来了——谁能证明一笔转账真的是你发起的?答案不靠任何第三方,靠的是密...

比特币难度调整怎么算?公式只有一个

比特币难度调整怎么算?公式只有一个

比特币挖矿大家多少都听过,知道算力、区块奖励、减半这些词,但问到一个关键问题就卡住了——不管多少人在挖矿,比特币怎么保证出块速度稳定在10分钟左右?答案藏在代码里一个反复执行的函数中:每2016个区块...

比特币的 OP_RETURN 是什么?

比特币的 OP_RETURN 是什么?

比特币诞生之初只有一个使命:做一套点对点的电子现金系统,忠实记录谁向谁转了多少币。但后来开发者们发现可以在转账时塞点"私货",一个新问题就摆在眼前——能不能在不破坏记账功能的前提下...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。