1. 程式人生 > >區塊鏈100篇之第四篇--礦工及挖礦

區塊鏈100篇之第四篇--礦工及挖礦

在第二篇中我遺留了一個問題,就是雖然收款人沒辦法驗證付款人是否真的有足夠的餘額進行支付轉賬(因為現在沒有一箇中心機構進行認證),所以這時候就需要礦工來進行確認,對於為什麼需要礦工這個角色和礦工是幹什麼的以及挖礦的過程,下面就來一一細說。

為什麼需要礦工?

比特幣是一個點對點去中心化的網路,在這個網路裡任何人都可以參與進來,成為這個網路中的節點(普通節點或者礦工節點),正因為比特幣的世界中沒有一箇中心機構來確保比特幣整個系統的正常執行(這與我們現在中心化系統不一樣,是比特幣的一大魅力),那麼如何確保比特幣正常執行呢?這就需要礦工了。

礦工是幹什麼的?

因為比特幣的交易需要進行確認,並需要將多筆交易打包成區塊,礦工便是幹這個的。礦工接收到使用者廣播的賬單後,要對賬單的合法性和真實性進行驗證,這裡的合法性,是指礦工會檢驗支付方的比特幣是否充足。礦工們按照交易中支付方的地址,在過往合法的交易中查詢該賬戶“轉入”的比特幣數量,當大於或者等於本賬單中填寫的數額時,這筆交易就是合法的,這回答了我們一開頭的那個問題;接著礦工需要開始用不同的隨機數進行雜湊計算,直至找到符合目標值特徵的隨機數,如果找到了這個隨機數,礦工需要將在 10 分鐘左右發生的驗證過的交易內容打包成一個不超過1MB大小的區塊,然後全網廣播出去,告訴其他礦工節點已經生成一個新的區塊了,你們不需要再進行隨機數的計算了,於是其他礦工就會進行驗證這個隨機數是否是正確的,如果通過了驗那麼這個新區塊就會被新增到最長鏈的尾部(為什麼說最長鏈,這裡涉及到比特幣的分叉,在第七篇講),然後他們就會放棄當前區塊的計算,馬上繼續下一個區塊的隨機數計算。

舉個例子就是現在我和小明、小花、小白以及小李進行記賬競賽(誰贏了誰就有糖吃,所以都很努力的記賬),我們都把每一筆有效的交易記錄在一個本子上,因為我們的記賬速度都差不多,所以我們幾乎是同時把本子上的一頁紙(相當於一個區塊)寫滿,這個時候並不能以誰記賬速度快來分勝負(因為大家幾乎同時完成記賬),所以我們還需要進行計算一道數學方程題,誰先接觸這道題誰就可以獲得糖果;於是大家開始埋頭計算數學題,假設這時小明最先解除了答案,於是他就大喊一聲,“我解出來”,這時大家就開始停下手上的計算工作,開始驗證小明的答案是否就是這道題的解,結果大家都認為小明解出了答案,於是這顆糖(比特幣)便屬於小明的了。

挖礦的過程

挖礦的過程其實就類似於解題,誰先找到答案誰就獲得記賬權,從而獲得比特幣獎勵。
挖礦的具體過程為:參與者根據上一個區塊的hash值,10分鐘內的驗證過的交易內容,再加上自己猜測的一個隨機數X,讓新區塊的hash值小於比特幣網路中給定的一個數。這個數越小,計算出來就越難。系統每隔兩週(即經過2016個區塊)會根據上一週期的挖礦時間來調整挖礦難度(通過調整限制數的大小),來調節生成區塊的時間穩定在10分鐘左右。為了避免震盪,每次調整的最大幅度為 4 倍。

比特幣如何保證礦工積極挖礦?

我在第一篇講比特幣的時候有簡單提到過比特幣的獎勵機制,比特幣的激勵機制就是獎勵礦工一些比特幣用來激勵礦工積極的記賬以此來達到整個系統穩定執行的效果,所以礦工節點就需要不斷的提高自己的算力來爭奪打包區塊的權力,因為你的算力越大你就有可能先計算出符合某一個標準的比特幣區塊頭的雜湊雜湊值,這就是工作量證明共識機制,簡稱POW,除了POW外還有POS、DPOS、RAFT等等(這個留到第六篇講共識機制的時候再說)。比特幣是通過工作量證明的共識機制來決定記賬權的,通俗來講,誰證明了自己的工作量最大,誰就負責記賬。
礦工除了可以得到比特幣網路獎勵的比特幣,還可以獲得每一筆交易的手續費,獎勵手續費可以保證當所有的比特幣發行完畢後(總量2100萬,預計到2140年發完)比特幣網路仍然可以正常執行。

總結

比特幣是一個設計很巧妙的系統。