In Code We Trust:读比特币减半代码( 二 )


在减半之际 , 我想来想去最有意义的事情应该是让更多人了解比特币减半的真实执行层面的机理 。 这篇文章我会尝试逐行给大家解释比特币减半代码 , 希望每个人都能相信的是自己理解的东西 , 而不是某个人 , 某个虚幻的概念 , 或者“信仰”本身 。
美元本是美联储发行的永续债 , 在墨绿色的纸上印上In God We Trust后变得似乎异常神圣 。 可是每个地方 , 每个人的 “上帝” 都各有各的不同 , 该相信哪个“上帝” 呢?骨子里千百年来不相信鬼神的中华民族的上帝又是什么的?
代码真实可见 , 执行逻辑可被校验 。 与人类自发形成的社会协议不同 , 代码的存在让执行变得“不可逆” 。 所以可能更准确的说法应该是 “Code is Law Enforcement'' (代码即执法) 而不是 “Code is Law'' 。 当国家机器垄断了暴力机构 , 当立法执法成为了巨大的黑盒 , 选择相信一个可审查的“enforcement” 机制 , 是比特币带给我们的一个选项 。
In Code We Trust:读比特币减半代码
本文插图

下面上代码和解释 , in code we trust
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval

  • 这里定义了减半次数halvings , 即“减半次数”为整数变量
  • nHeight 是当前区块高度 , 后面那一堆调用了共识里的一个“减半间隔区块数” , 在比特币代码里是210,000
  • halvings 在每次代码执行的时候都会返回 当前区块高度/210000, 因为定义为整数变量 , 当不被210,000整除的时候 , 小数部分不会被存储 , 所以在5月11号晚上之前(区块高度630,000) , 都是2
  • 每到新的整除高度 , 譬如630,000 -变为3 , 再下次的840,000- 变为4 , halvings变量都会相应增加
if (halvings >= 64) return 0;
  • 如果减半次数大于等于64 , 区块奖励返回0
  • 这个可以保证最多只有64次减半 , 到了64次之后 , 矿工将不再有奖励
  • 届时的比特币网络必须依靠手续费来保证网络的安全和矿工的激励制度
  • 当年有人问过中本聪 , 担心不担心“无奖励终局” 中本聪的回答其实非常好: “到了那个时候(100多年以后) , 比特币要么已经灭亡 , 要么挖出来的比特币已经成为大规模的流通价值载体 。 ” 两种情况都不需要担心没有无挖矿奖励矿工拒绝挖矿的情况
CAmount nSubsidy = 50 * COIN;
  • 这里的nSubsidy = 挖矿奖励
  • 每次代码执行都会把挖矿奖励设置成50个比特币* COIN
  • COIN是常数变量100,000,000 用来把挖矿奖励变成聪的单位
nSubsidy >>= halvings;return nSubsidy;
  • 最后两行是真正的减半执行命令
  • 挖矿奖励>>= 减半数中用了C++里的一个右移操作 。 因为是是二进制右移 , 所以 x>>=y 表示 x = x除以2的y次方
  • 当到了630,000 区块高度的时候 , y在这里是减半数halvings , 减半数从2变成了3
  • 所以挖矿奖励从50个比特币除以2的2次方 , 变成了50个比特币除以2的3次方 , 由此完成了减半
下面我把完整的减半代码贴上 , 感兴趣的同学可以去点击阅读原文的比特币源代码自行查阅
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams) { int halvings = nHeight / consensusParams.nSubsidyHalvingInterval; // Force block reward to zero when right shift is undefined. if (halvings >= 64) return 0;CAmount nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. nSubsidy >>= halvings; return nSubsidy;
}
最后 , 减半不是什么大节日 , 你庆祝也好 , 看衰也罢 , 减半都会如期进行 , 直到全世界只剩下最后一个比特币全节点 。 安安静静找个喜欢的人 , 看看夜光白皮书 , 一起读一读完成减半的代码 , 聊聊人生 , 这也许是作为比特币爱好者你我最好的安排 。 Dovey


推荐阅读