计算中本聪如何设置的比特币数量

计算中本聪如何设置的比特币数量

本人菜鸟一个,最近想了解一下比特币的技术原理,就顺道想看看比特币到底有多少个,百度一下,发现大家都说是2100万个,不明白为什么是这个数,就又百度了一下。。。。中本聪为了控制比特币数量,在程序中定义了每生成21万区块,将奖励给矿工的比特币砍一半,也就是50–>25–>12.5…往下演变。那么为什么会是2100万那?一个一个加很慢,我用Python简单实现了一下。

简单介绍

中本聪设计的比特币主要解决了大规模的拜占庭将军问题,至于何为拜占庭将军这里就不在复述,下面简单描述一下比特币:
  1. 比特币总量2100万枚(不是特别确定,后续膜拜一下比特币源码)。
  2. 平均每十分钟记一次帐,也就是增加一个区块。
  3. 每记一次账也就是增加一个区块,程序系统自动发行该阶段比特币奖励给记账节点。
  4. 每增加21万个区块(大约四年),奖励给记账节点的比特币减少一半。直到2140年,2100万枚比特币发行完毕。
  5. 只有答对问题的节点才有记账的权利。
  6. 记账节点只承认最长的那条区块链。
  7. 所有想记账拿奖励的节点需要同时解一个题,谁先解出答案,谁就能把最近收集到的交易内容写入区块放到区块链上,并且广播给其他节点。其他收到广播的节点验证你的答案正确后会停止解题,并且把自己的区块链同步更新,然后继续解答下一题。
  8. 每增加2016个区块(大约二周),根据解题的快慢,调整一次题的难度,以保证平均解题时间稳定在10分钟(也就是平均10分钟增加一个区块)。

代码计算比特币数量

菜鸟一个,代码质量有限,望给位大佬多多指点。

#encoding=utf-8
import sys
sys.setrecursionlimit(35)


def cal(start, step, sumtmp, i):
    sum_l = sumtmp
    i = i + 1
    print(i)
    print(start,step,sumtmp)
    if i < 33:
        sum = round(210000 * start, 5)
        sum_l = round(sum + sumtmp, 5)
        print(sum_l)
        start = float(start / step)
        cal(start, step, sum_l, i)


if __name__ ==  '__main__':
    cal(50, 2, 0, 0)

猜你喜欢

转载自blog.csdn.net/sinat_38189661/article/details/91429053