比特幣居然是這樣挖出來的(高能預警,全程燒腦)

傳統的挖礦比如黃金,需要準備鐵鍬、鑽機、燈、礦車等一系列設備,才能開始工作。

比特幣居然是這樣挖出來的(高能預警,全程燒腦)

比特幣生產被稱為挖礦,是因為生產過程很像挖黃金。挖比特幣也需要準備一系列的工作,比如先構建一個區塊頭。

△區塊頭

長度

字段

描述

4字節

版本

版本號,就是第幾個版本

32字節

前區塊哈希

可以在上一個區塊找到

32字節

Merkle根

由區塊中所有的交易組成的merkle樹的哈希值

4字節

時間戳

由Unix紀元1970.1.1開始到當下秒數,記錄該區塊生產的時間

4字節

難度目標

挖礦標準的核對目標

4字節

Nonce

挖礦就是找到該隨機數

曠工在填寫好這些信息後,會生出一個區塊頭,但是該區塊頭暫時不被比特幣系統認可。

需要找到本區塊的哈希值,然後廣播給全網,獲得全網認可後,把該區塊鏈接到當前的區塊鏈上,形成一個+1區塊鏈,不斷重複此過程就叫挖礦。

說簡單點,任何曠工都可以填寫該信息,此時每個曠工填寫的區塊都是“假區塊”,一旦有某個曠工找到了該區塊的哈希值,它的“假區塊”就變成了真區塊,被比特幣系統認可,然後獲得比特幣獎勵。

所以,挖礦的本質是找到本區塊的哈希值,找到該哈希值的曠工會獲得比特幣獎勵。

如何找到該區塊的哈希值呢?

你猜,你猜,你猜猜猜。

比特幣居然是這樣挖出來的(高能預警,全程燒腦)

其實找哈希值的過程真是靠猜。那如何猜呢?

找到區塊頭裡Nonce的哈希值,小於難度目標的哈希值。難度目標是固定的,我們要猜的就是這個隨機數Nonce,區塊的哈希值就是Nonce哈希運算後得出的哈希值。

我們以277316的區塊舉例,難度目標為0x1745fb53,哈希計算後的哈希值為:

0x0000000000000003A30C00000000000000000000000000000000000000000000

*如何哈希計算?可以查看《精通比特幣》8.7.2難度表示

我們要找到一個小於目標哈希值A的哈希值B,通過把Nonce套進公式,會得到一個哈希值B,拿該哈希值和目標哈希值A比較,小於A,那就尋找成功。

為方便理解,我把與Nonce有關的公式做了修改。你也可以查找精通比特幣,8.7.1工作量證明算法,查看原公式。

公式如下:

聽風很帥=》1ce654cf64656ba43247

聽風很帥(1)=》512198e52aa12427531

聽風很帥(2)=》101654c68d5321c9647

聽風很帥(3)=》0cb82dq9846fa6c48647

聽風很帥(4)=》0465464ce20cc21e7541

聽風很帥(5)=》14edc1cad25121e25487

()裡的數就是Nonce,公式右邊是哈希值,通過不斷地Nonce+1的方式套進公式,讓左邊哈希運算,得出右邊的哈希值。

然後拿該哈希值與目標哈希值0x0000000000000003A30C00000000000000000000000000000000000000000000比較。如果運算出的哈希值小於該值,就找到了正確的Nonce。

平時我們的理解是A+1

不斷拿Nonce去套的過程,也叫哈希碰撞,就是試圖找到一個符合條件的Nonce。

最終套到924591752時,得出哈希值

0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4

拿它與目標值比較

0000000000000003A30C00000000000000000000000000000000000000000000

左邊0數量一樣,1比3小,證明是我們要找的Nonce

然後曠工把924591752填入Nonce,再把區塊接入區塊鏈中,接著廣播給其他節點驗證是否小於目標值,其他節點驗證驗通過,把該區塊加入區塊鏈中。

比特幣居然是這樣挖出來的(高能預警,全程燒腦)

驗證過程就很簡單,把得出的Nonce套進公式,就會得出一樣的哈希值輸出。只有同一個輸入,才能得到同一個輸出。

拿輸出結果與目標哈希值一對比,就知道是否小於目標值。比特幣的挖礦需要N億次計算,驗證答案是否正確,只需要1次計算即可。

這就是比特幣的挖礦,不斷把Nonce套進公式,直到找出符合條件的那個Nonce,然後經過哈希運算,把哈希值填入區塊,廣播給全網認證,認證通過獲得比特幣獎勵的過程。

比特幣居然是這樣挖出來的(高能預警,全程燒腦)


分享到:


相關文章: