什么是比特幣
想直接看計算過程的同學可以跳過本節
首先,比特幣是一種直接進行點對點交易的虛擬貨幣,每一筆用比特幣進行的交易都需要記賬。
而比特幣最重要的思想之一是去中心化,以前是銀行記賬,現在我們不用銀行了,我們發動網民參與記賬。
那么問題來了,記賬占用自己電腦資源還費電,怎么激勵人們愿意幫忙記賬呢?辦法就是你記一次賬,我就給你一定數量的比特幣獎勵。這樣一來,大家都會爭著幫忙記賬了,怎么解決這個“爭奪記賬”的問題呢?
大家知道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年以后,每挖礦一次的收益已經不滿一個比特幣了。
最后有一個想和大家討論的問題,比特幣消耗殆盡之后,不再有新的比特幣被發行,而市面上仍有比特幣在流通,也就是仍有交易需要被記賬,那到時候如何激勵人們記賬呢?
歡迎在留言區討論~