就在今夜,比特幣迎來眾所矚目的第三次減半。
自2009年誕生,比特幣已經走過波瀾壯闊的十年。從交易所、礦機、投資者到媒體,比特幣已經帶動加密貨幣行業形成一個完整的生態系統。比特幣區塊獎勵減半從供給側直接減少一半的貨幣供給,顯然在邊際和投資者心理上都極大彰顯了比特幣的稀缺性。
因此,四年一次的比特幣減半成為整個加密貨幣行業關注的焦點。
但看了那么多比特幣減半的文章,你可能還不知道比特幣具體是怎么減半的,比如四年減半一次的四年是怎么來的,怎么計算當前區塊的獎勵等問題。
值此比特幣第三次減半之際,來跟隨金色財經記者看看Bitcoin Core的代碼是具體怎么執行比特幣區塊獎勵減半的。
比特幣減半代碼
比特幣減半,是比特幣區塊獎勵減半的簡稱。而比特幣的區塊獎勵減半是比特幣共識的一部分,直接寫在比特幣軟件代碼里。
下面是代碼截圖。
比特幣區塊獎勵減半代碼 來源:Bitcoin Core github
就這6行代碼定義的函數GetBlockSubsidy決定著不同區塊高度下的比特幣區塊獎勵。中本聰創造的比特幣共識設置區塊獎勵從50個比特幣開始每210000個區塊比特幣獎勵減半,減半64次后區塊獎勵為0。
210000個區塊的時間大約為四年,這也是幣圈人說的四年一次減半的由來。因為比特幣減半事件是寫進比特幣軟件代碼里并有分布在全世界的比特幣全節點驗證,其共識很難改變,這也是“In Code We Trust”的由來。
逐行解讀比特幣減半
上訴代碼主要有幾個函數和參數:GetBlockSubsidy、nHeight、Consensus.nSubsidyHalvingInterval、halving、nSubsidy。它們的涵義如下:
GetBlockSubsidy主要是活的當前區塊高度下的區塊獎勵(nSubsidy );
nHeight為當前區塊高度;
Consensus.nSubsidyHalvingInterval為比特幣共識決定的區塊獎勵減半間隔區塊,此值為一個常數,為210000。
halvings為減半次數,是一個整數變量,也就是對nHeight/210000取整;
COIN為常數,為100000000,也就是說,在比特幣代碼里,比特幣的單位是聰。
nSubsidy為區塊獎勵。
1239行代碼調用GetBlockSubsidy函數。
1240行代碼:halvings=nHeight/Consensus.nSubsidyHalvingInterval,計算當前區塊對應的減半次數。比如截止本文發稿,區塊高度為629929,629929/210000=2.99,取整halvings=2。當區塊高度達到630000時,halvings=3。
1242和1243行代碼:if (halvings >= 64) return 0;判斷減半次數是否大于64,如果減半次數大于等于64,則區塊獎勵為0。這也是來自比特幣共識,只有64次減半,64次減半后區塊獎勵為0。
1245行代碼nSubsidy=50*COIN,比特幣軟件每次執行代碼都把區塊獎勵設置成50* COIN,也就是5000000000。
1247行代碼nSubsidy>>=halvings,這一句是真正起作用的比特幣區塊獎勵減半代碼。>>= 是二進制右移操作,nSubsidy>>=halvings等價于nSubsidy=nSubsidy除以2的halvings次方。
1248行代碼返回比特幣當前高度的區塊獎勵值。
上述代碼最后的實質是下面的公式:
因此,1-209999區塊每個區塊獎勵為50/(2^0) =50枚比特幣;210000-419999區塊獎勵減半為50/(2^1)=25枚比特幣,420000-629999區塊獎勵減半至50/(2^2)=12.5個BTC。區塊高度630000后減至50/(2^3)=6.25枚比特幣。
大神也有BUG
不過,上述6行代碼不是中本聰的原始代碼,中本聰的原始代碼如下:
此文由 中國比特幣官網 編輯,未經允許不得轉載?。?a href="http://www.huohuxiazai.com/">首頁 > 比特幣新聞 » 解讀比特幣具體是怎么減半的