
中本聪的错误:比特币产量减半为什么是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次有效减半的真实原因。
(公众号/同名推特:刘教链。知识星球:公众号回复“星球”)
(免责声明:本文内容均不构成任何投资建议。加密货币为极高风险品种,有随时归零的风险,请谨慎参与,自我负责。)
比推快讯
更多 >>- Gemini 向欧盟投资者推出新一批代币化股票,包括特斯拉、英伟达等
- 数据:沉寂 14 年的远古巨鲸控制约 8 个地址,至少拥有 80009 枚 BTC
- 马斯克发起投票,询问是否创建“美国党”
- WLFI 代币可转移提案现已生效
- 俄勒冈州检察长拟阻止 Coinbase 将证券诉讼移交联邦法院
- Ondo Finance 将收购受美 SEC 监管的经纪商 Oasis Pro
- 俄罗斯企业 Rostec 将推出卢布锚定稳定币 RUBx 及支付平台 RT-Pay
- Justin Sun 时隔十四年再登《亚洲周刊》封面,称比特币将在未来十年挑战美元储备货币地位
- 分析:炒港美股补税通知密集,境外收入征税法律层面并不突然
- 土耳其对 PancakeSwap 实施访问封锁,系首次对 DEX 实施制裁
- Bitunix 分析师:特朗普关税施压升温致加密市场震荡,关注 108,000 短期支撑与 110,348 压力位变化
- 数据:Base 跨链桥资金今年已出现 43 亿美元净流出
- 泰国动物园将为侏儒河马 Moo Deng 举办生日派对
- 数据:加密货币项目年内已融资 103 亿美元,超 2024 全年
- Vitalik:以太坊的成功超出了任何人的预期
- 反对“大而美”法案,马斯克呼吁公布爱泼斯坦文件
- 数据:2025 年上半年新增比特币百万富翁超过 26,000 名
- PancakeSwap:6 月销毁约 326.4 万枚 CAKE 代币,总供应量连续 22 个月减少
- 微软暂停约 3000 个朝鲜 IT 员工创建的 Outlook 和 Hotmail 账户
- 摩根大通:渣打较同业更能抵御稳定币冲击,或是人民币国际化主要受惠者
- Binance Alpha 将于 7 月 8 日进行 BOOM TGE
- Hilbert Group 邀请四位区块链领军人物加入 Syntetika 顾问委员会
- Greeks.Live:市场情绪呈现中性偏谨慎,处于窄幅震荡状态
- HTX DAO 上币推荐通道现已正式开启,三大路径激励全民推荐优质项目
- 香港财库局许正宇:稳定币发行人发牌制度将助推实质应用场景发展
- StoneLink 与阿里云国际签署战略合作,旨在推动数字科技与智能化发展
- A 股上市公司金一文化:开科唯识目前在探索和研究稳定币业务
- 央行就《人民币跨境支付系统业务规则》公开征求意见,更好满足 CIPS 业务发展的需要
- 以太坊基金会为 Argot Collective 提供 3 年的运营资金,支持其推进以太坊基础设施开发
- A 股上市公司海南华铁:已完成近 260 亿元资产的数字化上链,并和 RWA 研究院签署战略合作协议
- Broccoli 714 携手 OSTRA、TRAINER,布局中小企业 MiniIPO 市场
- 分析:若将《美丽大法案》类比新冠疫情放水,比特币或可攀升至 15 万美元
- 三井住友银行设立“HOOPSLINK”创新据点,推进 Web3 与稳定币业务共创
- 比利时法院对一起加密绑架案的三名绑匪各判处 12 年监禁
- 上市公司 Hilbert Group 推出以比特币为主要储备资产的综合加密资金战略
- 英国上市公司 Cel AI 斥资约 67.8 万美元购入约 6.18 枚比特币
- 数据:全球已有 66 家上市企业购入加密货币,当前加密概念股市值报 2.18 万亿美元
- Binance 任命 Gillian Lynch 担任欧洲和英国负责人,后者曾在 Gemini、爱尔兰银行担任高管
- 某新建地址向 HyperLiquid 存入 416 万 USDC,10 倍做多 HYPE
- 知名 ETH/BTC 汇率多头 James Fickel 向 Coinbase Prime 共转入 8 万枚 ETH
- 数据:某地址过去六天累计向 CEX 充值 38,100 枚 ETH,价值 9419.8 万美元
- 以太坊基金会开发团队再次内部转移 1000 枚 ETH,价值约 255 万美元
- 华夏基金:未来将继续推出更多代币化基金产品,推动代币化基金在合规平台实现二级流通
- 中国央行:支持数字人民币创新应用等推广到相关自贸试验区
- TRON 公布 6 月“生态之星”榜单
- 摩根大通:支付宝和微信支付不是未来稳定币扩张的模板
- BTFS 生态治理三项核心提案落地
- 日本三井住友银行在东京开设新事业共创设施 HOOPSLINK,聚焦 Web3 和生成式 AI 技术
- 前以太坊核心开发者:稳定币叙事、ETF 流入、CEX 余额新低等因素将促使以太坊币价爆发
- DeFi Development 购入 17,760 枚 SOL,价值约合 270 万美元
比推专栏
更多 >>观点
比推热门文章
- 马斯克发起投票,询问是否创建“美国党”
- WLFI 代币可转移提案现已生效
- 俄勒冈州检察长拟阻止 Coinbase 将证券诉讼移交联邦法院
- Ondo Finance 将收购受美 SEC 监管的经纪商 Oasis Pro
- Visa与万事达的隐身豪赌:吞下区块链能否保住支付王座?
- 俄罗斯企业 Rostec 将推出卢布锚定稳定币 RUBx 及支付平台 RT-Pay
- Justin Sun 时隔十四年再登《亚洲周刊》封面,称比特币将在未来十年挑战美元储备货币地位
- 分析:炒港美股补税通知密集,境外收入征税法律层面并不突然
- 土耳其对 PancakeSwap 实施访问封锁,系首次对 DEX 实施制裁
- Bitunix 分析师:特朗普关税施压升温致加密市场震荡,关注 108,000 短期支撑与 110,348 压力位变化