聽到「挖礦」一詞,很多人馬上想到的情境應該就是頭戴鋼盔,手拿十字鎬到某深山去挖黃金吧。區塊鏈世界所說的挖礦,是指節點將新區塊寫入區塊鏈的過程,而第一個驗證成功的節點可以從區塊鏈平台得到礦工獎勵,參與挖礦的節點我們又稱之為「礦工」。
PS: 礦工獎勵通常是該區塊鏈的原生加密貨幣,Ex: 在比特幣區塊鏈上挖礦,礦工獎勵就是比特幣,在以太坊上挖礦,礦工獎勵則是以太幣。
既然挖礦過程的標的物是區塊,我們就先來聊聊區塊吧!
區塊
在我們之前的文章
《區塊鏈是什麼?》有提到區塊的內容物是
交易紀錄,但其實區塊裡除了交易紀錄外,還有存許多資訊,我們這邊來介紹幾個區塊裡一定要有的資訊吧。
區塊一定要有的資訊包含以下8項:
1. 交易紀錄(transactions)
2. 前一個區塊的雜湊值(previous hash value)
3. 此區塊的雜湊值(hash value)
4. nonce
5. 當前難度(difficulty)
6. 區塊產生的時間戳(timestamp)
7. 礦工(miner)
8. 礦工獎勵(miner reward)
之前常看到其他文章說,區塊鏈就是區塊串成鏈,而區塊串成鏈的方法,就是每個區塊會存前一個區塊的雜湊值,使得每個區塊是環環相扣的,形成鏈狀,這也就是區塊鏈實作的方式囉。
挖礦的流程
挖礦的流程就像成一群學生(礦工)在做填空題,而題目就是區塊裡面的這8個欄位(交易紀錄、時間戳、難度…),第一個填完這8個欄位的學生可以得到獎勵,得到獎勵的學生必須將答案告知其他學生,讓其他學生一起把答案記錄下來,並開始下一題。
學生做填空題的過程可分成10個步驟:
Step1: 填寫交易紀錄欄位。節點從交易池驗證及打包交易紀錄進尚未上鏈的新區
塊。
Step2: 填寫時間戳欄位。交易紀錄打包進尚未上鏈的新區塊後,節點將當下
的時間點記錄進該尚未上鏈的新區塊。
Step3: 填寫前一個區塊雜湊值欄位。節點去查看區塊鏈上最新區塊的雜湊
值記錄進該尚未上鏈的新區塊。
Step4: 填寫難度欄位。節點直接取得現在區塊鏈上記錄的難度值進該尚未上鏈的
新區塊。
Step5: 填寫礦工獎勵欄位。以比特幣為例,節點能得到的獎勵是被定義好的,每
21萬個區塊,獎勵會減半,初始為50個比特幣。
Step6: 計算雜湊值欄位。節點會先隨機產生一個值填入nonce,再將nonce和
Step1~Step3填完的3個值(交易紀錄, 時間戳, 前一個區塊的雜湊值),整
包丟進雜湊函數,取得雜湊值。
Step7: 判斷雜湊值是否符合規定。區塊鏈平台會規定產生出來的雜湊值須符合某
規定,才代表該雜湊值正確。以比特幣區塊鏈為例,其規定產生出來了雜
湊值的前n個值要是0,而這個n值會隨著難度值變高而變高。若符合規
定,nonce和雜湊值欄位就都找到正確值了,若不符合規定,則回到
Step6,繼續猜nonce的值。
Step8: 填寫礦工欄位。第一個找到符合規定雜湊值的節點,將其帳戶填入礦工欄
位。
Step9: 廣播給其他節點知道。第一個找到符合規定雜湊值的節點,將它完成8個
資訊填空傳給其他節點確認,其他節點確認無誤後,就會將此區塊記錄上
區塊鏈了。
Step10: 第一個找到符合規定雜湊值的節點收到區塊鏈平台給的礦工獎勵。
看完上面的流程,應該不難發現在 Step6~Step7是最花時間的,因為要不斷嘗試不同的nonce,努力讓雜湊函數產生符合規定的雜湊值。由於只有第一個猜出nonce值的節點才會獲得礦工獎勵,所以礦工電腦的效能就是能否獲得挖礦獎勵的重大關鍵了。
PS: 以上的內容,皆是以工作量證明(Proof Of Work, POW)這個共識機制來說明的,也是目前比特幣區塊鏈採用的共識機制。共識機制我們未來會再寫一篇文章跟大家分享喔^^
挖礦難度調整
現今礦工電腦大多採用專門挖礦的ASIC晶片,效能可以說是非常驚人,而電腦規格提升,挖礦的時間便大幅的縮短。比特幣區塊鏈規定每10分鐘產出一個區塊,並在每2016個新區塊上鏈後,調整一次難度。當比特幣區塊鏈發現區塊的平均產出時間低於10分鐘,就會將難度上調,試圖讓挖礦時間靠近10分鐘。
以比特幣區塊鏈為例,難度調高就是增加雜湊值前面為0的個數。假設難度為8,代表猜出雜湊值為前8位0才符合規定,當這個難度平均產出區塊時間小於10分鐘,可能就會把難度調整成9,也就是猜出雜湊值為前9位0才符合規定。
以上就是挖礦的內容啦~
相信看完文章的大家對挖礦應該有一定瞭解了,如果喜歡可以幫我們推薦給更多想了解區塊鏈知識的朋友呦~
想要知道區塊鏈還有哪些有趣的內容的話
千萬別錯過接下來的文章喔
看完文章的你/妳覺得有更進一步了解區塊鏈的朋友,請記得繼續關注我們喔~