SUBS:金色观察 | 硬核解读比特币具体是怎么减半的_UBS

就在5月12日凌晨3:23,比特币成功完成众所瞩目的第三次减半。

自2009年诞生,比特币已经走过波澜壮阔的十年。从交易所、矿机、投资者到媒体,比特币已经带动加密货币行业形成一个完整的生态系统。比特币区块奖励减半从供给侧直接减少一半的货币供给,显然在边际和投资者心理上都极大彰显了比特币的稀缺性。

因此,四年一次的比特币减半成为整个加密货币行业关注的焦点。

但看了那么多比特币减半的文章,你可能还不知道比特币具体是怎么减半的,比如四年减半一次的四年是怎么来的,怎么计算当前区块的奖励等问题。

值此比特币第三次减半之际,来跟随金色财经记者看看Bitcoin Core的代码是具体怎么执行比特币区块奖励减半的。

比特币减半代码

金色午报 | 12月19日午间重要动态一览:7:00-12:00关键词:灰度、 詹克团、银行、FinCEN

1.媒体:詹克团与吴忌寒正式达成协议,詹克团正式回归;

2.分析师Alex?Krüger:FinCEN拟议中的加密监管改革只会影响美国公司;

3.南非金融监管机构指控投资公司MTI比特币交易欺诈行为;

4.灰度以太坊信托基金现已完成发行份额拆分;

5.MakerDAO发起有关添加Aave、UNI-V2-DAI-ETH为抵押品的一系列执行投票;

6.美国法官否决任命受托人监督加密贷款机构Cred重组的动议;

7.银行函证区块链服务平台发布;[2020/12/19 15:46:17]

比特币减半,是比特币区块奖励减半的简称。而比特币的区块奖励减半是比特币共识的一部分,直接写在比特币软件代码里。

金色热搜榜:BTM居于榜首:根据金色财经排行榜数据显示,过去24小时内,BTM搜索量高居榜首。具体前五名单如下:BTM、ONT、WICC、XTZ、NEO。[2020/7/28]

具体减半代码在这里,下面是截图。

比特币区块奖励减半代码 来源:Bitcoin Core github

就这6行代码定义的函数GetBlockSubsidy决定着不同区块高度下的比特币区块奖励。中本聪创造的比特币共识设置区块奖励从50个比特币开始每210000个区块比特币奖励减半,减半64次后区块奖励为0。

210000个区块的时间大约为四年,这也是币圈人说的四年一次减半的由来。因为比特币减半事件是写进比特币软件代码里并有分布在全世界的比特币全节点验证,其共识很难改变,这也是“In Code We Trust”的由来。

金色财经独家分析 加密货币对纳税扮演两个角色:对于“纳税”这个关键词,加密货币似乎正在扮演两个相反角色。第一是提供便利:日前美国佛罗里达州接受BTC和BCH方式纳税,此前乌干达也将利用区块链提高纳税的效率,从技术方面,加密货币可以让整个公共效率提升,这一点是正向作用;

而另一方面似乎更受关注,即加密货币为纳税制造了麻烦:通过加密货币而获得实实在在的收益却在征税上很成问题。韩国已经开始检讨虚拟货币税收的问题,以色列要求比特币投资者披露交易情况,政策似乎觉得有必要填补这种“空白”。然而,这样的努力并不如预期,亚利桑那州的加密货币支付税款法案受挫,之前的美国纳税日,加密货币报税的不到100人。coindesk调查报告也进一步揭示了这个现象:82%的受访者不容易理解自己的纳税义务。调查中指出对于数字货币的分类不明是导致困惑的重要原因。其实也不乏有人认为数字货币不算是一个应该被征税的对象。想要改变现状,一是交易的披露应更加全面,二是法律的界定应更加清晰。[2018/5/15]

逐行解读比特币减半

金色财经现场报道,启赋资本投资总监兰洪明:投资区块链应淡化其项目的概念:金色财经现场报道,启赋资本投资总监兰洪明在共识·链上未来丨区块链应用与创新论坛上表示,对于区块链的投资,我们应该淡化其区块链的概念、理解区块链背后的本质、并对业务、产品、服务所创造的实际价值进行价值判断。[2018/4/10]

上诉代码主要有几个函数和参数:GetBlockSubsidy、nHeight、Consensus.nSubsidyHalvingInterval、halving、nSubsidy。它们的涵义如下:

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:31ms0-3:792ms