比特币知识(3)——比特币上限为什么是2100万

比特币知识(3)——比特币上限为什么是2100万

比特币总量为2100万,它是固定数量的。所有比特币被挖取(奖励发行)出来之后,它就不产生新的比特币了。

从创世区块(也就是第一个区块)开始,每个区块产生50个新的比特币,每210000个区块产生后(大概每四年),生成的新比特币会减半,也就是 第210000个区块及其之后的区块产生时候,会生成50/2 = 25个新比特币,第420000 个区块及其之后的区块产生时候,会产生25/2 = 12.5个新比特币,之后类推。

这就是一个数学问题了,

210000 * 50 + 210000 *50 / 2 + 210000 *50 / 4 + 210000 *50 / 8 ……

= 210000 * 50 * (1 + 1/2 + 1/4 + 1/8 ……)

≈ 210000 * 50 * 2

= 21000000(也就是2100万)

所以这个问题,归根是“为什么开始每个区块产生50个新比特币,为什么每210000个区块产生后,生成的新比特币会减半?”这里可能没有为什么,游戏规则如此而已!比特币的算法决定了发行总数极限为2100万BTC。

比特币的最小单位是“聪”(satoshis),一个比特币等于1亿个“聪”。为什么不继续细分成其他的更小单位,比如10亿、100亿?据说是和计算机语言支持的整形数据范围有关,不过这不是比特币学习的重点,就不做什么的探讨了。

上面用约等,数学上上面的极限是会接近该值的,但是准确的说是20999999.97690000BTC,比2100万少一点。这个20999999.97690000BTC 是如何来的?因为1BTC = 10^8“聪”,可以使用脚本计算下具体总量是多少个“聪”:

#-*- coding: UTF-8 -*-

# 初始的块奖励为50BTC
start_block_reward = 50

reward_interval = 210000

def max_money():
    # 50 BTC = 50 0000 0000 Satoshis
    current_reward = start_block_reward * 10**8
    total = 0
    while current_reward > 0:
        total += reward_interval * current_reward
        current_reward /= 2
    return total

if __name__ == "__main__":
    print "Total BTC to ever be created:", max_money(), "Satoshis"

运行结果:Total BTC to ever be created: 2099999997690000 Satoshis

结果 2099999997690000 Satoshis 也就是 20999999.97690000BTC了。

每四年新区块生成的比特币减半,其实这个说法是大概的估算,实际上系统控制生成块难度,使得是大约每10分钟产生一个区块(注意!这个10分钟也不是一定的,也是个大概值),而210000个10分钟接近4年。

210000 * 10 / 60 / 24 / 365 ≈ 3.9954337899。

(全文完)

(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注