“你们怎么确定比特币最后只有 2100 万枚?你们全都读过那段算法吗?真的都信?我一直对类似说法保持怀疑。”
—— 摩根大通 CEO Jamie Dimon,2021 年 10 月 11 日
类似质疑再常见不过,但真相并没有隐藏在深奥的黑箱里。比特币的共识规则与几句简洁的数学逻辑,就让 2100 万枚上限成为一种“程序化的必然”。这篇拆解会带你亲自到源代码里按图索骥,把 2100 万比特币的供应上限算得一清二楚。
为何要看 GetBlockSubsidy() 函数?
所有新比特币都诞生于矿工领取的区块奖励(block subsidy + 交易费)。只要读懂决定补贴数量的核心函数,也就握住了供应总量的钥匙。
函数完整签名如下:
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)这三行最关键:
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
if (halvings >= 64) return 0;
nSubsidy >>= halvings;它们分别解决——
- 如何数清减半轮次
- 何时让补贴归零
- 如何把补贴按二进制位移折半
计算减半轮次:每 21 万个区块发生一次
nHeight就是当前区块高度,写稿时约 740,805。nSubsidyHalvingInterval被写死为 210,000 次区块。- 二者相除、向下取整,就能得出已经历的减半轮次。
举例: 740805 / 210000 = 3.527… → 第 3 次减半(从此时起再过约三年触发第 4 次)。
这个简单数学式就是比特币发行节奏的全部秘密。
区块补贴如何被“折半”
初始值:
CAmount nSubsidy = 50 * COIN;COIN = 100,000,000聪(Satoshi),于是 50 BTC = 5,000,000,000 聪。每轮减半运算:
nSubsidy >>= halvings;>>是 C++ 中的右移运算符,右移一位=除以 2。
移 3 次 → 补贴从 5,000,000,000 聪降到 625,000,000 聪(即 6.25 BTC)。
右移到第 33 次后,由于>>33≈“把 5,000,000,000 除以 2³³”,剩下的数字已不足 1 聪,连续 33 次右移也就在代码层面彻底归零。
把补贴“数”完:2100 万是这样加总出来
把每一减半区间的补贴乘以当期的区块总量,再逐轮累加,你会发现总和无限逼近 2100 万,更精确的数字是 20,999,999.9769 BTC。
再考虑创世区块不可花、早期 bug 及个别矿工少领奖励的情况,实际最高供应量约 20,999,817 BTC。
至此,“肉眼可见”的 2100 万上限在数学与代码层面双双锁定。
拓展阅读与深层疑问
如果未来有人改动上限呢?
所有节点运行的是同一组共识规则,也共享同一份 consensusParams.nSubsidyHalvingInterval = 210,000 常量。想变 2100 万?必须让全网约 51% 以上矿工 + 运行节点的绝大多数用户 同时接受并升级软件——几乎不可能达成。
遇到二进制右移 64 次会怎样?
右移 64 次会撞进 未定义行为 的黑洞。if (halvings >= 64) return 0; 是故意设计的“保险”,提前刹车,彻底杜绝代码漏洞致使补贴再次启动。
为什么用移位而非直接除法?
- 性能:位运算直接映射到 CPU 指令,比除法更高效。
- 简洁:一眼可见“每次减半”的逻辑一致性。
- 安全:排除浮点误差风险,确保货币学意义下的货币供应精确无误。
常见疑问 Q&A
Q1:真的只有 2100 万枚还是只是营销口号?
A:不依赖口号。上文公式算到小数点后 8 位,多 0.00000001 枚都没有。比特币稀缺性写在算术里,而非白皮书第几页。
Q2:减半会不会被开发者偷偷取消?
A:取消减半同时意味着改变发行时间表,这需要得到整个网络升级共识。任何单方擅自写的新代码,只会被其他节点直接拒绝。
Q3:所有比特币挖出后,矿工靠什么赚钱?
A:区块补贴归零后,交易手续费将持续提供激励。历史数据表明,手续费占比正逐年抬升,已形成天然缓冲。
Q4:如果 50% 节点故意延长出块间隔,可否多产出币?
A:不会。区块间隔拉长并不会改变已写死的 55 次减半倒计时。时间只能延后封顶日期,无法增加总量。
Q5:早期丢币让市场永远流动的比特币少于 2100 万,会不会冲击通胀控制机制?
A:反而增强通缩预期。丢币相当于被动销毁,供需杠杆更向持有者倾斜,币价并不因此脱锚。
实战与延伸
想亲手验证?将 50 BTC 作为初始值,用“55 次连续除以 2”,再把每轮补贴乘以 210,000 个区块,就能用任何计算器复现上述累加结果。
想深入体验真实节点运行的细节,可查阅比特币核心开发者 Pieter Wuille 的技术解释,或直接使用 一站式区块链浏览器 实时监控区块高度与补贴数额👉 点点这里直击主链数据。
总结
一句话总结:
2100 万枚比特币不是靠“声明”存在,而是靠 33 次固化右移的精确数学与全球数万个节点同步执行的共识规则共同写死。当最后一聪落地,数学彻底封洞,稀缺模型就此闭环,任何质疑都无法绕过这片由二进制构成的“数字铁幕”。