
比特幣(5):區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)
如果把比特幣比喻為「虛擬黃金」的話,那么比特幣的挖坑,你好比當年美國淘金熱時,成千上萬的淘金者去美國西部淘金的事跡。淘金者付出體力,獲得金子;挖礦者付出算力,獲得比特幣。
比特幣是一種總量恒定且通貨緊縮的電子貨幣??偭亢愣ㄊ侵副忍貛趴偣仓挥?100萬個,到2140后就不會再產(chǎn)生新的比特幣。通貨緊縮是指新產(chǎn)生的比特幣的數(shù)量每4年減半,2009年1月比特幣誕生的時候每個區(qū)塊獎勵50個比特幣,然后到2012年11月減半為25個比特幣,在2016年再次減半為12.5個比特幣?;谶@個公式,比特幣挖礦獎勵以指數(shù)方式遞減,直到2140年為0。因此比特幣在這點上和各國央行發(fā)行的法幣是有本質(zhì)區(qū)別的,不用擔心政府濫發(fā)貨幣導(dǎo)致個人資產(chǎn)縮水。
比特幣挖坑的過程簡單說就是:礦工使用挖礦節(jié)點嘗試解一道數(shù)學難題,誰先解出來誰就能獲得新產(chǎn)生的比特幣和交易費。具體過程如下:
1.整合交易至候選區(qū)塊
挖礦節(jié)點不斷監(jiān)聽比特幣網(wǎng)絡(luò)中的交易信息,并將這些交易信息暫存到自己的內(nèi)存池里,挖礦節(jié)點會根據(jù)以下信息對這些交易進行排序:
1)優(yōu)先選擇「塊齡」更大的交易,「塊齡」是指自該交易被記錄到區(qū)塊鏈為止所經(jīng)歷過的區(qū)塊數(shù),即這個交易在區(qū)塊鏈中的深度。簡單說,就是會優(yōu)先處理那些舊的交易,這樣確保即使沒有交易費的交易最終也能得到確認,只是要等的時間比較長一些。
2)優(yōu)先選擇相對交易費更高的交易,也就是說出的交易費越高,越有可能越快得到確認。因此如果你想你的交易被盡快確認,應(yīng)該主動多付些交易費。
挖礦節(jié)點根據(jù)上述條件排序后生成候選區(qū)塊,同時會在候選區(qū)塊里加入一筆特殊的交易-「Coinbase交易」,該交易是候選區(qū)塊的第一筆交易,它會把新產(chǎn)生的比特幣(當前是12.5個)和交易費發(fā)送給礦工的地址,是給礦工挖礦的獎勵。
2.求解數(shù)學難題使候選區(qū)塊成為合法的新區(qū)塊(PoW)
構(gòu)建候選區(qū)塊完畢后,礦機就要開始使用PoW(Proof of Work,工作量證明)算法來獲得一個正確的nonce值,來向全網(wǎng)證明新區(qū)塊是它挖的。
所謂的PoW算法其實并不復(fù)雜,假設(shè)你是一個礦機,你會不斷的嘗試改變nonce值,并計算區(qū)塊頭的哈希值,如果你足夠幸運,算出的哈希值正好小于難度值,說明你的這個nonce值是有效的,表示你成功挖到礦了,于是你會迅速的向全網(wǎng)廣播,告訴大家這個區(qū)塊我已經(jīng)挖到了,你們繼續(xù)挖下一個吧。但現(xiàn)實更多的情況是,你嘗試了成千上億次后,還是沒有猜出有效地nonce值,卻收到了其它礦工發(fā)來的通知說他已經(jīng)挖到了,于是你只好放棄之前的所有工作,繼續(xù)嘗試挖下一個區(qū)塊。上述描述的整個過程大概每10分鐘會重復(fù)一次,生生不息,永不停止。
看到這里,相信很多人會有以下兩個疑問。
第一個疑問是「我難道只能不斷嘗試不同的nonce值這種暴力破解的笨辦法嗎?是否存在更好的辦法呢?」。我可以明確的告訴你,數(shù)學家已經(jīng)證明沒有比暴力破解更好的辦法,所以這也是很多人詬病比特幣不環(huán)保、空耗大量算力的原因,但這也是比特幣能夠維持一個去中心化共識的根本原因。
第二個疑問是「難度值是如何確定的?」。比特幣為了確保平均每10分鐘出個新區(qū)塊,它必須能夠動態(tài)調(diào)整難度值,起初由于全網(wǎng)算力很小,因此難度值也比較小,但隨著全網(wǎng)算力越來越大,難度值必須不斷動態(tài)增大才行。但大家知道比特幣是去中心化的,也就是說從來沒有一個中心可以動態(tài)調(diào)整難度值,那比特幣是怎么做到的呢?它把難度值的調(diào)整交給了每個全節(jié)點(什么是全節(jié)點可參考「比特幣(4):網(wǎng)絡(luò)架構(gòu)」),具體是這樣的:每2,016個區(qū)塊調(diào)整一次難度值,難度的調(diào)整公式是由最新2,016個區(qū)塊的真正花費時長與20,160分鐘(兩周,即這些區(qū)塊如以10分鐘速率所期望花費的時長)比較得出的,如果發(fā)現(xiàn)平均時長小于10分鐘,說明之前的難度值過小,需要加大難度,反之亦然。
3.區(qū)塊鏈分叉
上述描述的基于PoW算法的挖礦過程可能會產(chǎn)生這樣一種狀況:假設(shè)礦工A挖到了新區(qū)塊,但由于比特幣的節(jié)點分布在全球各地,網(wǎng)絡(luò)傳輸需要一定的時間,所以在他向全網(wǎng)廣播的過程中,正好又有一個礦工B挖到了新區(qū)塊,他也會向全網(wǎng)廣播他挖到的新區(qū)塊,這時就會出現(xiàn)兩個新區(qū)塊互相競爭的情況,這就是區(qū)塊鏈分叉。
那么比特幣是怎么解決分叉的問題呢?答案是暫時不解決,就讓分叉存在著,相信時間最終來解決。也就是說,這時候比特幣網(wǎng)絡(luò)被分成了兩派,一派基于A繼續(xù)挖新區(qū)塊,另一派基于B繼續(xù)挖新區(qū)塊,隨著時間的推移,一定會出現(xiàn)其中一個分叉成為主鏈,另外一個分支慢慢被放棄。注意:這里誰能成為主鏈,并不是簡單的基于誰先挖到算誰的,而是誰后續(xù)能獲得大多數(shù)節(jié)點的認可。
這樣又會帶來兩個問題:
問題1:有可能導(dǎo)致已被確認的交易被取消。比如上述例子我們假設(shè)A成為了主鏈,B被拋棄了,那么B挖到的這個新區(qū)塊,雖然已被確認是有效的,但由于不是主鏈,最終會被拋棄,也就是說B創(chuàng)建的這個新區(qū)塊上的交易都失效了。這也是為什么雖然比特幣平均每10分鐘生成一個區(qū)塊,但一個交易真正被確認需要60分鐘,因為一般認為經(jīng)過后續(xù)6個區(qū)塊的確認后,基本就很難被取消了。

問題2:有可能受到51%的算力攻擊。假設(shè)有個人或機構(gòu)非常強大,他能控制比特幣全網(wǎng)51%的算力,就可能隨意強行分叉,并讓他的鏈總是成為主鏈,那么比特幣的共識就崩潰了。雖然理論上存在這樣的可能性,但由于現(xiàn)在比特幣全網(wǎng)的算力過于強大,想要控制51%的算力,幾乎不可能,美國總統(tǒng)都做不到。