比特币2140年将耗尽?我用python算了一笔账

什么是比特币

想直接看计算过程的同学可以跳过本节

首先,比特币是一种直接进行点对点交易的虚拟货币,每一笔用比特币进行的交易都需要记账。

而比特币最重要的思想之一是去中心化,以前是银行记账,现在我们不用银行了,我们发动网民参与记账。

那么问题来了,记账占用自己电脑资源还费电,怎么激励人们愿意帮忙记账呢?办法就是你记一次账,我就给你一定数量的比特币奖励。这样一来,大家都会争着帮忙记账了,怎么解决这个“争夺记账”的问题呢?

大家知道hash函数是一个单项陷阱门函数,也就是由函数的输入可以很快算出输出,但是看到输出却不能算出输入。所以给定你一个y值,没有比暴力穷举x更快的求x的办法。比特币的规则就是让你求一个指定规则的y值对应的x值,所有想要帮忙记账的人都用暴力穷举的办法算x值,谁先算出正确的x,谁就有资格记账并获得比特币的奖励。这个暴力穷举的过程,由于费时费电,所以我们把它叫做挖矿。这也是比特币的发行渠道,通过“挖矿”挖到比特币之后,我们就可以拿它去买东西了。

还有一个问题,买东西直接拿国家发行的纸币就好了,为什么还要大费周章的使用比特币?举一个例子,大家知道暗网吗?简单来说暗网是搜索引擎搜不到的网络,有一些黑市交易在暗网进行,而这些交易就是使用比特币的,因为比特币点对点交易,有高度的匿名性,两个完全不认识的人可以互相信任完成转账而不会像传统的银行转账那样留下交易痕迹。

为什么比特币2140年前后将耗尽?

比特币诞生之初,比特币的创造者一个或几个匿名为中本聪的人,制定了如下规则: 1.比特币总量为2100万个 2.比特币2008年开始使用时,每记账一次收益50个比特币。 3.每记账210000个区块,收益减半。 4.每10分钟记一次账。 根据这些规则,我们把初始sum设为2100,000,然后每10分钟设为一个循环消耗比特币,直到比特币总量降到0.0001的数量级。

import matplotlib.pyplot as plt

sum = 21000000  #比特币初始数量
revenue = 50 #每记账一次的初始收益(2008年时记账的收益)
time = 0 #2008年第一枚比特币发放之前时间记为0
block = 0 #初始时记账数为0
begin = [2008,] #初始时间2008年

year_revenue = [50,]
year_total = [21000000,]

while sum<0.0001 :
    if (block==210000) : #记账每到210000次,记账一次的收益减半
        revenue = revenue/2
        block = 0
    if( time%525600==0) : #记录每年的记账收益和剩余比特币数量,一年有525600分钟
        begin.append(begin[-1]+1)
        year_revenue.append(revenue)
        year_total.append(sum)
    #每10分钟记账一次
    time = time+10 
    block = block + 1 
    sum -= revenue

print("result is ",time)
#以下是画图过程
plt.figure(figsize=(10,10))

plt.plot(begin,year_total,'-')
plt.xlabel("year")
plt.ylabel("remain bitcoins aumount")
plt.ticklabel_format(style='plain',axis='y')
plt.xticks(np.arange(min(begin), max(begin)+1, 10.0))
plt.yticks(np.arange(min(year_total), max(year_total)+1, 1000000))
plt.grid(True, linestyle = "-.",linewidth = "1")
plt.savefig('C:/Users/username/desktop/yearAmount.png',dpi=100)

plt.figure(figsize=(10,10))
#plt.plot(begin,year_revenue,'-')
plt.plot(begin,year_revenue,'-')
plt.xticks(np.arange(min(begin), max(begin)+1, 10.0))
plt.yticks(np.arange(min(year_revenue), max(year_revenue)+1, 1))
plt.xlabel("year")
plt.ylabel("current revenue")
plt.grid(True, linestyle = "-.",linewidth = "1")
plt.savefig('C:/Users/username/desktop/yearRevenue.png',dpi=100)

最终结果如下图:

每年比特币的剩余数量

从图上可以看到,到2018年,约80%的比特币已经被发行了。根据我的程序的计算结果,比特币数量要150年才会降到0.0001(公元2158年),要137年会降到0.001(公元2145年),要124年降到0.01(公元2132年).所以网络上普遍使用的2140年比特币将耗尽的说法是比较准确的

那么现在每挖矿一次还能赚到多少比特币呢?

挖矿收益随年份变化图

2018年,挖矿一次的收益已经从2008年的50个比特币降到了12.5个比特币。从图上可以看出,2038年以后,每挖矿一次的收益已经不满一个比特币了。

最后有一个想和大家讨论的问题,比特币消耗殆尽之后,不再有新的比特币被发行,而市面上仍有比特币在流通,也就是仍有交易需要被记账,那到时候如何激励人们记账呢?

欢迎在留言区讨论~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员宝库

区块链入门教程

文章作者:阮一峰(http://www.ruanyifeng.com/) 原文链接:http://www.ruanyifeng.com/blog/2017/12...

33160
来自专栏性能与架构

区块链的核心技术

23130
来自专栏存储

区块链入门教程

区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。 可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。...

19760
来自专栏互联网高可用架构

轻松理解比特币基础技术原理1 背景2 核心要点3 区块链学习如何进阶4 本文小结

17060
来自专栏架构师之路

1分钟了解“挖矿”的本质

上一篇《1分钟了解区块链的本质》,介绍了什么是区块链,区块链是一个没有管理员,每个节点都拥有全部数据,高可用的分布式存储系统。 文章的留言里,不少朋友会用比特币...

436110
来自专栏java工会

如何用JavaScript写一个区块链?

自去年开始,伴随着比特币的火爆,区块链成为比“人工智能”、“共享”还要火的词汇。各大企业,诸如阿里、京东、腾讯、百度等纷纷入局。

10000
来自专栏信安之路

浅谈以太坊智能合约的安全漏洞

智能合约的安全是区块链安全中的热议话题,但其实 89% 的智能合约都存在漏洞,本文将浅谈以太坊智能合约出现过的一些安全漏洞。

18900
来自专栏小樱的经验随笔

【翻译】A Next-Generation Smart Contract and Decentralized Application Platform

原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时...

40860
来自专栏企鹅号快讯

《以太坊白皮书》笔记(1)——比特币介绍

#1 State Transaction System State 在 Bitcoin 当中,"state" 代表了所有被挖出且没有被消费的货币的集合 (UT...

23070
来自专栏华仔的技术笔记

以太坊白皮书(原版译文)以太坊(Ethereum ):下一代智能合约和去中心化应用平台

502100

扫码关注云+社区

领取腾讯云代金券