值得信赖的区块链资讯!
中本聪的错误:比特币产量减半为什么是32次?
在24号文章(《摩根大通CEO吉米·戴蒙质疑比特币2100万枚上限的道理和错误》刘教链,2023.1.24)里介绍和引用了比特币源代码中关于减半的代码片段:
01 CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
定义函数
02 {
代码开始
03 int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
用当前区块高度除以减半间隔(210000),得到当前减半数(注意C++语言在这里会自动取整)
04 // Force block reward to zero when right shift is undefined.
注释:当减半数过大时将结果强制为0
05 if (halvings >= 64)
如果减半数大于等于64
06 return 0;
返回0,不再继续执行后续代码
07
空行
08 CAmount nSubsidy = 50 * COIN;
计算当前区块奖励(单位:聪),等于50乘以比特币的聪数(100000000)
09 // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
注释:区块补贴(奖励)每21万个区块减半,大约是4年
10 nSubsidy >>= halvings;
使用右移位做整数除法,每右移1位相当于除以2(只保留商数),总共右移位数等于减半数
11 return nSubsidy;
返回计算得到的当前区块奖励
12 }
代码结束
为了方便阅读和理解,笔者给每行代码添加了行号,并在每行代码的下方逐行添加了解释。
这里面有一个小细节,不仔细看可能就忽略过去了,仔细看了可能会产生困惑。
这个问题就是,比特币总共减半多少次?64次?还是32次?
我们经常听到的说法就是比特币总共要经过32次产量减半。每次间隔大约4年,那么挖矿时间总共就是(32 + 1) * 4 = 132年。
从2009.1.3开始,挖矿132年,到2141年初就采光了,也就是说,不再有额外的区块奖励或者叫区块补贴了。
自此之后,矿工将必须依靠用户交易转账支付的手续费来维持矿机的运行。比特币将达到其设计发行总量上限,不再增发。
这就是坊间传说的2140年是比特币最后一个挖矿年的由来。
但是深究一下代码,发现代码里写的减半数上限,居然并不是32(或者说33),而是64:
05 if (halvings >= 64)
如果减半数大于等于64
这又是怎么回事呢?
说到这里要提到一个很有趣的往事。第05行和第06行代码其实在中本聪的原始代码里是没有的。
是的,中本聪在这里犯了一个编码上的错误。换句话说,他在这里留下了一个bug。一个240多年以后才会出现的bug。
这些小细节也向我们表明,中本聪是人,不是神。
如果大家对C++中的右移位运算符的规则有所了解的话,就会知道,当右移位的位数超过了被操作的整数的总位数之后,它就会开始循环了。
也就是说,当移位数增加到65的时候,第10行 nSubsidy >>= 65 会相当于 nSubsidy >>= 1,也即是回到了当初的第一次减半后25个BTC的区块奖励。
这显然是个今天不会发生,但是未来如果不加以修复就会导致共识崩溃的万分重要却又相当不紧急的bug。
好在比特币的开源是一个无比明智的决定。
比特币的社区开发者ditto-b等人发现了这个bug。
2014年3月14号,他提交了修复方案。(https://github.com/bitcoin/bitcoin/pull/3842)
从当时的交流中,我们还能看到更多不为人知的小插曲。
Wladimir van der Laan (laanwj),今天bitcoin-core代码维护的领导者,针对这个bug修复方案提问说,看起来右移位32次以上就会归零了,超过64看起来也是安全的吧。
他@了当时还在负责领导代码维护工作的Gavin Andresen (gavinandresen),也就是中本聪的衣钵传人,说,我们会合并这个方案还是不合并呢?看起来代码是安全的,但是我不想自作主张。
后面其他多位开发者指出了他的错误:C++右移位操作是会循环移位的。这会给今天的代码阅读者造成错觉,以为比特币是循环无限增发的;并且会给未来的人们造成可能的bug,因为随着时间的推移,大家可能越来越难以就修复bug达成一致意见。
最终大家决定采纳这个修复方案。
好了,插曲讲完了。
问题的答案,往往就隐藏在明面的文字里。
Wladimir van der laan已经指出来了这个答案,那就是比特币减半代码这里隐藏的有效减半数,其实只有32次。
匆匆忙忙的中本聪,没有做任何边界条件的检查。这是几乎每一个写过程序代码的人都曾经犯过的错误,只是程度大小不同罢了。
那么为什么说有效减半数只有32次呢?
因为:(1)比特币的起始区块奖励是50个BTC;(2)BTC的最小精度是1亿分之一,也就是后人所谓的“1聪”;(3)比特币代码中,整数是用64位二进制来表示的。
50个BTC用整数表示就是:50 * 1亿 = 50 * 100000000 = 5000000000 聪。
5000000000用二进制表示就是100101010000001011111001000000000。这个数只有33位。
这意味着,补齐到64位正整数最高位都要填充0,也就是这个样子:
0000000000000000000000000000000100101010000001011111001000000000
当130多年过去,2140年比特币的矿工们又高高兴兴地挖了一整年矿之后,2141年初比特币第33次产量减半,这个数字向右移33位,就会变成0。也就意味着不再有新的区块奖励了。
比特币永久停止增发,总量达至设计上限约2100万枚BTC。
这就是比特币32次有效减半的真实原因。
(公众号/同名推特:刘教链。知识星球:公众号回复“星球”)
(免责声明:本文内容均不构成任何投资建议。加密货币为极高风险品种,有随时归零的风险,请谨慎参与,自我负责。)
比推快讯
更多 >>- 数据:ATOM 本周跌超 18%,多个代币触及今日新低
- 数据:过去 24 小时全网爆仓 3.89 亿美元,多单爆仓 1.98 亿美元,空单爆仓 1.91 亿美元
- 数据:若 BTC 突破 69,628 美元,主流 CEX 累计空单清算强度将达 12.57 亿美元
- 欧洲央行内格尔:美元避险地位受到质疑,汇率疲软将持续
- 特朗普:计划与伊朗政权进行新谈判
- 数据:ETH 当前全网 8 小时平均资金费率为 0.0036%
- BitRing 将以 1 克黄金价格预售 1 克纯金智能戒指,限量 5 万枚并需 KYC 验证
- 比特币提币情绪延续,过去 24 小时 CEX 净流出 1124.44 枚 BTC
- 特朗普谈及霍尔木兹海峡和石油:什么都不担心
- 新银行:地缘风险加剧,黄金仍处“顺风局”
- Michael Saylor 再次发布比特币 Tracker 信息,或暗示再次增持 BTC
- 美联储 3 月降息 25 个基点的概率仅为 7.4%
- 分析师:这次中东危机可能不一样,建议不要立即买入任何下跌
- Opinion:已完成 S1 快照,并上线 S2
- 策略师:中东冲突升级,如果黄金创下历史新高不会感到惊讶
- 分析师:黄金将重新成为首选避险资产
- 伊朗外长:新的最高领袖可能在一两天内选出
- 某地址从 Binance 提取 384 枚 PAXG,约合 207 万美元
- 伊朗向美航母发射 4 枚导弹
- SpaceX IPO 前比特币持仓市值降至约 5.45 亿美元,后续或面临账面盈亏披露压力
- 若比特币跌破 6.5 万美元,主流 CEX 累计多单清算强度将达 7.36 亿
- Tether 过去三年已冻结价值 42 亿美元的 USDT
- MANTRA 代币将于 3 月 3 日完成升级:将进行代码更新并按 1:4 拆分
- 前瑞信 CIO:周末 CME 休市期间代币化黄金承担“几乎 100%价格发现”
- 中国外交部提醒:中国公民暂勿前往伊朗周边地区
- 比特币 3 月历史回报率:2013 年起 6 次收涨 7 次收跌,平均回报率 11.28%
- Hyperliquid 2 月收入超 6200 万美元,环比下降 9.8%
- Sam Altman 回应 OpenAI 国有化:政企建立紧密合作关系“极其重要”
- Tron Inc 披露增持 176,081 枚 TRX 代币,总持仓突破 6.84 亿枚
- 中东紧张局势升级,霍尔木兹海峡外积压大量油轮
- Avantis 确认第二季空投将于 3 月 5 日进行
- 加密恐慌指数回升至 14,市场仍处于极度恐慌状态
- X 禁止加密货币付费推广并非新规
- 驻阿联酋使领馆发布安全提醒中国公民注意安全
- Polymarket 上预测比特币今年跌至 5 万美元概率回落至 62%
- 陈茂波:区块链、AI 等技术赋能金融服务,开创更高效交易体系
- 派盾:2026 年 2 月加密领域被盗资金达 2650 万美元,同比下降 98.2%
- 伊朗股市暂停交易至下周
- 分析:比特币重要支撑位为 64,500 美元,目前空头不足以使比特币快速跌破 6 万美元
- 明尼苏达州提议全面禁止加密货币 ATM 以应对老年人受骗激增
- 中信证券:伊朗局势仍在快速变化,预计难以一次性按最终情景推测并演绎
- 数据:多个代币出现冲高回落,MDT 跌超 17%
- SUI Group 财报:SUI 持仓突破 1.08 亿枚并完成 8.8%已发行普通股回购
- 分析师:地缘政治风险加剧或使纽约期银重回 100 美元/盎司上方
- 美股上市公司 AEHL 启动数字资产配置“天才计划”,并完成首笔 100 万美元 BTC 购买
- Bakkt 拟通过发行 A 类普通股及预付认股权证募资 4812.5 万美元
- 某鲸鱼今日开设 40 倍杠杆 BTC 和 20 倍杠杆 SOL 多单后遭部分清算
- 香港警方:2025 全年接获 12505 宗网购骗案,最大一单涉加密货币损失逾 370 万港元
- 伊朗总统:复仇是“合法权利和义务”
- 美国比特币现货 ETF 2 月净流出 2.066 亿美元
比推专栏
更多 >>- Big player's 『Trigger moment』|0227Europe
- 简街有没有「操纵」BTC?拆解 AP 制度,读懂 ETF 申赎机制背后的定价权博弈
- Happy new year【Horse success】|0213Asian
- Was it finished?|0206 Asian
- 围猎以太坊多头:「巨鲸」们暴亏 70 亿美元,正被集体围观
- Challenge,risk And chances|0130 Asian
- Meta 豪赌 AI:砸钱 1350 亿美元,2026 的扎克伯格,值得相信么?
- Variables: Terrible snowstorm|0128 Asian
- 英特尔「生死线」时刻:在 ICU 门前,陈立武如何清算遗产并开启自救?
- 從1月13號到今天,提前到5100|0126Asian
观点
比推热门文章
- 数据:ATOM 本周跌超 18%,多个代币触及今日新低
- 数据:过去 24 小时全网爆仓 3.89 亿美元,多单爆仓 1.98 亿美元,空单爆仓 1.91 亿美元
- 数据:若 BTC 突破 69,628 美元,主流 CEX 累计空单清算强度将达 12.57 亿美元
- 欧洲央行内格尔:美元避险地位受到质疑,汇率疲软将持续
- 特朗普:计划与伊朗政权进行新谈判
- 数据:ETH 当前全网 8 小时平均资金费率为 0.0036%
- BitRing 将以 1 克黄金价格预售 1 克纯金智能戒指,限量 5 万枚并需 KYC 验证
- 比特币提币情绪延续,过去 24 小时 CEX 净流出 1124.44 枚 BTC
- 特朗普谈及霍尔木兹海峡和石油:什么都不担心
- 新银行:地缘风险加剧,黄金仍处“顺风局”
比推 APP



