比特币发行总量真的是2100万枚吗?

96
博学于文约之以礼
2018.05.14 19:41* 字数 1179

比特币发行总量真的是2100万枚吗?

比特币是一个点对点的现金支付系统,可以认为是一个不依赖于任何国家/任何组织的“世界银行”,比特币系统实现了银行最基本的业务:货币发行和交易。在比特币网络中不依赖于任何第三方权威机构可实现不同个体之间的价值(财富)传递。

在公开资料中都说比特币的总量是2100万枚。比特币的总量真的是2100万枚吗?

先给出答案:准确的讲比特币的总量是小于2100万枚,趋近于2100万枚,却永远也达不到2100万枚,如下图。

比特币发行总量与时间关系图

那比特币是如何发行的?比特币的总量是如何计算出的?

比特币的发行

以下介绍涉及到比特币的一些专业术语,可参考比特币相关术语

比特币是通过矿工挖矿发行的。矿工是比特币网络中不断重复哈希计算来产生工作量证明的网络节点,挖矿是矿工提供算力竞争记录比特币网络中交易的权利,谁竞争获得将交易打包记录到区块链中的权利,谁将获得比特币网络的奖励。当前每区块给予矿工的奖励为12.5比特币,比特币网络给予矿工的奖励是每个区块的第一笔交易,使得比特币从无到有,完成比特币了发行。

比特币网络大约10分钟生成一个区块,区块的生成伴随着比特币的“从无到有”的发行,每个区块中被挖出的比特币是固定的,且一定的速率递减。每经过210000个区块,每区块发行的比特币减半。按照每10分钟生成一个区块,大约经过四年,每区块发行的比特币减半。

比特币网络2009年1月上线,比特币的发行速率为每区块50个比特币,也就是每个区块给矿工的奖励为50个比特币;2012年11月在第210000个区块,比特币的发行速率减半为25个比特币;在2016年7月在第420000个区块,比特币的发行速率再减半为12.5个比特币,后续的发行参照下表。

时间 每区块产量 区块开始高度
2009年1月 50 0
2012年11月 25 210000
2016年7月 12.5 420000
2020年x月 6.25 630000
2024年x月 3.125 840000
2028年x月 1.5625 1050000
2032年x月 0.78125 1260000
2036年x月 0.390625 1470000
2040年x月 0.1953125 1680000
... ... ...

比特币发行总量准确来讲并不是2100万枚

比特币的货币单位:

比特币BTC,毫比特币mBTC,微比特币uBTC,聪比特币Satoshi

1BTC=1000mBTC;1mBTC=1000uBTC;1uBTC=100Satoshi

聪Satoshi为比特币的最小单位,一比特币为10的八次方聪比特币

从以上比特币的发行机制可知比特币发行速率以四年为周期按指数方式递减。

当比特币的发行速率指数方式减半32次,在第6720000个区块(大约在2137年)比特币的发行速率将递减在每区块1聪比特币,即每区块给予矿工的奖励只有1聪比特币。

最后在6930000个区块(大约在2140年),即再经过210000个区块发行速率再减半一次,所有的比特币将发行完毕,因为1聪比特币再减半则为0.5聪比特币,而比特币的最小单位就是聪,不存在0.5聪比特币。此以后再生成的区块将没有比特币发行的奖励,只有区块中交易费的奖励。

总共发行的比特币为2,099,999,997,690,000聪比特币,即20999999.9769比特币,约为2100万枚。

比特币发行总量计算程序

如上比特币发行总量可通过一个Phython的小程序计算。

start_block_reward = 50  #初始化每区块奖励为50BTC
reward_interval = 210000 #发行速率减半的周期为210000个区块,按10分钟生成一个区块,约为4年

def max_money():  #定义函数求发行总量
 current_reward = 50 * 10**8 #当前周期每区块奖励为50乘10的八次方聪比特币
 total = 0                   #发行总量初始化为0
 while current_reward > 0:   #当每区块奖励大于0时,此处为循环语句
  total += reward_interval * current_reward  #将当前周期内发行的所有比特币累加到发行总量
  current_reward /= 2        #每区块奖励除以2(减半)
 return total                #返回发行总量
print "Total BTC to ever be created:", max_money(), "Satoshis"  #打印输出发行总量

将以上脚本保存为max_money.py,在Phython环境下执行脚本,执行结果可看到发行BTC的总量为2099999997690000聪,即20999999.9769比特币,约为2100万枚比特币。

$ python max_money.py
Total BTC to ever be created: 2099999997690000 Satoshis

总结

本文剖析了比特币网络中比特币的发行机制,并给出了比特币发行总量的计算方法及计算小程序,通过计算结论可知,比特币的发行总量为20999999.9769,约为2100万枚,所以准确的讲比特币的发行总量并不是2100万枚。

BTC
Web note ad 1