就在5月12日凌晨3:23,比特币成功完成众所瞩目的第三次减半。
自2009年诞生,比特币已经走过波澜壮阔的十年。从交易所、矿机、投资者到媒体,比特币已经带动加密货币行业形成一个完整的生态系统。比特币区块奖励减半从供给侧直接减少一半的货币供给,显然在边际和投资者心理上都极大彰显了比特币的稀缺性。
因此,四年一次的比特币减半成为整个加密货币行业关注的焦点。
但看了那么多比特币减半的文章,你可能还不知道比特币具体是怎么减半的,比如四年减半一次的四年是怎么来的,怎么计算当前区块的奖励等问题。
值此比特币第三次减半之际,来跟随金色财经记者看看Bitcoin Core的代码是具体怎么执行比特币区块奖励减半的。
比特币减半代码
金色晚报 | 8月20日晚间重要动态一览:12:00-21:00关键词:苏州、BlockFi、Filecoin、DeFi、BCH
1. 苏州破获虚拟货币黑客案,涉案金额达3000余万元。
2. BlockFi宣布完成新一轮5000万元融资 摩根溪领投。
3. Slack用户称将在Filecoin大矿工测试期间实施网络攻击。
4. 波卡官方发布XCMP跨链消息传递总体架构。
5. Messari前主管:一些新“DeFi”项目与早期的EOS或Tron应用没有本质区别。
6. BCH社区成员发文希望ABC首席开发者Amaury下台。
7. 宝武集团旗下欧冶云商上线区块链服务平台“欧冶链”。
8. Tether CTO:迁移10亿枚USDT系应某家交易所的要求。
9. yearn.finance公布YFI新增vault。[2020/8/20]
比特币减半,是比特币区块奖励减半的简称。而比特币的区块奖励减半是比特币共识的一部分,直接写在比特币软件代码里。
分析 | 金色盘面:ETH有望进入多头趋势:金色盘面分析:ETH在经过一天的高位震荡之后,有望进入多头趋势,1小时级别走出上升通道,但macd有个轻微背离,而2、4小时正在努力变轨中,目前看效果不错,而我们期待的日线底背离有望在今天形成,大级别反弹将会展开,但能否重回300美元需要市场验证。短线我们维持谨慎乐观,市场有风险,投资需谨慎。[2018/9/15]
具体减半代码在这里,下面是截图。
比特币区块奖励减半代码 来源:Bitcoin Core github
就这6行代码定义的函数GetBlockSubsidy决定着不同区块高度下的比特币区块奖励。中本聪创造的比特币共识设置区块奖励从50个比特币开始每210000个区块比特币奖励减半,减半64次后区块奖励为0。
分析 | 金色盘面:USDT/CNY 走势分析:金色盘面综合分析:USDT/CNY昨天受到市场影响,出现较大波动,目前看一方面是人民币汇率对美元出现反弹,造成下跌,另一方面是BTC急速跳水,让价格再次走高,但价格并未创出新高,所以我们分析BTC短线有可能形成底部。[2018/8/8]
210000个区块的时间大约为四年,这也是币圈人说的四年一次减半的由来。因为比特币减半事件是写进比特币软件代码里并有分布在全世界的比特币全节点验证,其共识很难改变,这也是“In Code We Trust”的由来。
逐行解读比特币减半
上诉代码主要有几个函数和参数:GetBlockSubsidy、nHeight、Consensus.nSubsidyHalvingInterval、halving、nSubsidy。它们的涵义如下:
金色财经独家分析 购买比特币 美国人正在加杠杆:证券监管机构约瑟夫·伯格说,人们正在办理抵押贷款以购买比特币。再加上用于获得比特币的信用卡和股票贷款的账户,它增加了风险投资者的可能性,让他们负债累累,甚至可能无家可归。金色财经独家分析,对于杠杆率的限制一直是金融监管的一项重要内容。此前日本就加密货币杠杆交易上限问题展开讨论,欧洲证券市场监管局也将差价合约(CFD)散户投资者限制在2倍的杠杆率,但对于通过抵押质押的方式来购买虚拟货币的限制还么有被广泛注意,这就像是银行的消费贷一样,存在监管去向的难度。数字货币不需要像传统金融那么大的杠杆,因其价格波动性强大,数倍杠杆就可以达到数十倍的杠杆的收益,当然,也可以造成相对应的损失。为控制此类风险,银行在提供贷款时,应该加强对款项去向的监控,控制加杠杆炒币的风险。[2018/4/17]
GetBlockSubsidy主要是活的当前区块高度下的区块奖励(nSubsidy );
nHeight为当前区块高度;
Consensus.nSubsidyHalvingInterval为比特币共识决定的区块奖励减半间隔区块,此值为一个常数,为210000。
halvings为减半次数,是一个整数变量,也就是对nHeight/210000取整;
COIN为常数,为100000000,也就是说,在比特币代码里,比特币的单位是聪。
nSubsidy为区块奖励。
1239行代码调用GetBlockSubsidy函数。
1240行代码:halvings=nHeight/Consensus.nSubsidyHalvingInterval,计算当前区块对应的减半次数。比如截止本文发稿,区块高度为629929,629929/210000=2.99,取整halvings=2。当区块高度达到630000时,halvings=3。
1242和1243行代码:if (halvings >= 64) return 0;判断减半次数是否大于64,如果减半次数大于等于64,则区块奖励为0。这也是来自比特币共识,只有64次减半,64次减半后区块奖励为0。
1245行代码nSubsidy=50*COIN,比特币软件每次执行代码都把区块奖励设置成50* COIN,也就是5000000000。
1247行代码nSubsidy>>=halvings,这一句是真正起作用的比特币区块奖励减半代码。>>= 是二进制右移操作,nSubsidy>>=halvings等价于nSubsidy=nSubsidy除以2的halvings次方。
1248行代码返回比特币当前高度的区块奖励值。
上述代码最后的实质是下面的公式:
因此,1-209999区块每个区块奖励为50/(2^0) =50枚比特币;210000-419999区块奖励减半为50/(2^1)=25枚比特币,420000-629999区块奖励减半至50/(2^2)=12.5个BTC。区块高度630000后减至50/(2^3)=6.25枚比特币。
大神也有BUG
不过,上述6行代码不是中本聪的原始代码,中本聪的原始代码如下:
尽管中本聪是大神,但不代表其代码就没有bug。因为nSubsidy是个64位的有符号整数,而>>= 超过64在C++中属于未定义行为,会导致数值环回,最终导致BTC数量不断重复2100万个比特币的释放过程,见下图。
Pieter Wuille修复了这个bug,有一个专门的比特币改进协议BIP042描述这个bug,文档见这里。
参考资料:
Where in the Code Does the Halving Take Place
BIP042
金色财经 区块链5月5日讯 根据最新消息显示,隐私即时通讯应用Telegram将不会使用GRAM代币偿付其投资者.
1900/1/1 0:00:00(出发到塔哈斯孔的画家,梵高)前言:去中心化的做市商模式备受欢迎,其中为去中心化交易提供流动性的流动性提供商是关键角色。提供流动性可以赚取费用收益或代币,但当前的设计并不能保证一定带来收益.
1900/1/1 0:00:00全国政协委员、中国联合网络通信集团有限公司研究院院长、党委副书记张云勇向全国政协十三届三次会议提交了关于正确对待区块链推动实体经济高质量发展的相关提案.
1900/1/1 0:00:00金色周刊是金色财经推出的一档每周区块链行业总结栏目,内容涵盖一周重点新闻、行情与合约数据、矿业信息、项目动态、技术进展等行业动态。本文是其中的新闻周刊,带您一览本周区块链行业大事.
1900/1/1 0:00:00金色晨讯 | 9月15日隔夜重要动态一览:21:00-7:00关键词:YAM Finance、Compound、SushiSwap、以太坊2.0 1.
1900/1/1 0:00:00金色财经讯,5月9日,Polkadot(波卡)社区成员发起一项更改DOT代币供应量的公投提案。提案内容如下:1. DOT总量从1000万增至10亿,增加100倍;2. DOT.
1900/1/1 0:00:00