想直接看计算过程的同学可以跳过本节
首先,比特币是一种直接进行点对点交易的虚拟货币,每一笔用比特币进行的交易都需要记账。
而比特币最重要的思想之一是去中心化,以前是银行记账,现在我们不用银行了,我们发动网民参与记账。
那么问题来了,记账占用自己电脑资源还费电,怎么激励人们愿意帮忙记账呢?办法就是你记一次账,我就给你一定数量的比特币奖励。这样一来,大家都会争着帮忙记账了,怎么解决这个“争夺记账”的问题呢?
大家知道hash函数是一个单项陷阱门函数,也就是由函数的输入可以很快算出输出,但是看到输出却不能算出输入。所以给定你一个y值,没有比暴力穷举x更快的求x的办法。比特币的规则就是让你求一个指定规则的y值对应的x值,所有想要帮忙记账的人都用暴力穷举的办法算x值,谁先算出正确的x,谁就有资格记账并获得比特币的奖励。这个暴力穷举的过程,由于费时费电,所以我们把它叫做挖矿。这也是比特币的发行渠道,通过“挖矿”挖到比特币之后,我们就可以拿它去买东西了。
还有一个问题,买东西直接拿国家发行的纸币就好了,为什么还要大费周章的使用比特币?举一个例子,大家知道暗网吗?简单来说暗网是搜索引擎搜不到的网络,有一些黑市交易在暗网进行,而这些交易就是使用比特币的,因为比特币点对点交易,有高度的匿名性,两个完全不认识的人可以互相信任完成转账而不会像传统的银行转账那样留下交易痕迹。
比特币诞生之初,比特币的创造者一个或几个匿名为中本聪的人,制定了如下规则: 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年以后,每挖矿一次的收益已经不满一个比特币了。
最后有一个想和大家讨论的问题,比特币消耗殆尽之后,不再有新的比特币被发行,而市面上仍有比特币在流通,也就是仍有交易需要被记账,那到时候如何激励人们记账呢?
欢迎在留言区讨论~