區塊鏈中的挖礦原理(POW演算法)

買賣虛擬貨幣

大家如果要來學習區塊鏈,比特幣系統是我們一定會面對的第一個大的知識模組。為什麼是這樣?在昨天的分享中,我們已經提到了,比特幣是區塊鏈的前身實現,區塊鏈是比特幣的後期提煉,兩者的邏輯關係決定了比特幣是個繞不開的傢伙;如果大家是初次接觸比特幣,當你想和別人交流的時候,面對的第一個概念可能就是挖礦。

那麼問題來了?挖礦是什麼意思?挖礦和比特幣是什麼關係?挖礦的原理是什麼?等等。這些問題在我學習區塊鏈的過程中,困擾過我很長一段時間。下面呢,就讓我們來逐一看看。

首先讓我們從 比特幣和挖礦的關係說起;

在開始這個話題之前,我先提個問題:大家有沒有想過為什麼每個區塊鏈系統都要發行自己的數字貨幣?也就是前段時間的ICO熱;這裡面就涉及到區塊鏈的根本作用,這個作用就是:實現社會價值在區塊鏈上的自由流通(類比下網際網路的根本作用:實現資訊的自由流通);比如我可以針對汽車開發一個汽車鏈,針對房子開發一個房子鏈,針對母豬開發一個母豬鏈;等等;如果一個組織或個人的能量足夠大,也可以釋出一個面向全行業的鏈,這個事估計只有央行能做;那汽車、房子、母豬…想在各自的鏈上自由流轉,從A的名下流轉到B的名下,或者從C的名下流轉到D的名下,一定需要個度量的尺度;這個尺度就是靠支出相應的數字貨幣來完成的;換句話說,每條鏈釋出的數字貨幣,充當的是該鏈上價值流通的一般等價物;做個現實的類比:也就是我們生活中用於交易的人民幣、美元、泰銖、英鎊等中央貨幣,在我們購物時充當的作用。每條鏈可以類比成一個國家,每個國家是不是都有自己的貨幣系統?這樣一想,是不是就清楚為什麼每條鏈發行數字貨幣的原因了,其目的就是促使鏈上資產的順利流通;


就數字貨幣而言,對於想做事的人,他充當的是價值流通的一般等價物;對於斂財的人,就是個圈錢的工具;

下面我們就進入正題:分析下比特幣和挖礦的關係;說起二者的關係,需要先說一下在區塊鏈中,數字貨幣的釋出模式;

從籠統的角度來說:區塊鏈釋出鏈上的數字貨幣有兩種主要形式:一種就是像比特幣這種的,透過挖礦節點,不斷消耗自身的算力,也就是不斷挖礦的意思,來換取比特幣;由於比特幣系統是完全開源的,在這套開源的程式碼裡,包含了挖礦的功能,只要一個人懂程式碼,就可以把這套程式碼進行編譯部署,加入到比特幣網路裡面去,把挖礦功能開啟,那你的宿主機開始挖礦了;在比特幣系統,透過自身的演算法可以動態調整全網節點的挖礦難度,保證每過大約10分鐘,比特幣網路中,就會有一個節點挖礦成功;一旦有人挖礦成功,比特幣系統就會獎勵此人一定數量的比特幣,這個數量也是透過演算法控制的,這個演算法可以說一下:最開始的頭四年,每個挖礦成功的人會得到25個比特幣的獎勵,每過四年衰減一半;也就是下一個四年挖礦成功獎勵12.5個,再下一個四年獎勵6.25個,以此類推;大約到2140年的時候,區塊鏈發行完畢,共計約2100萬個比特幣;

透過上面的闡述,大家應該明白挖礦和比特幣的關係了,這個關係就是:挖礦,是比特幣系統發行自身數字貨幣,也就是比特幣的必經之路。比特幣系統,藉助挖礦完成自身數字貨幣的發行;發行數字貨幣的過程,就是各個礦工競爭挖礦的過程。在每一個10分鐘內,看誰先挖到礦,就獎勵一定數量的比特幣,這個獎勵的過程就是比特幣發行的過程;每個挖礦節點,受利益的驅使,也是不斷的想辦法能更快的挖礦,這也就催生了市面上的各種各樣的礦池節點;


剛才我們說了,數字貨幣的發行有兩種主要形式;比特幣的是一種;另外一種,我以國內的NEO為例;NEO的發行模式是:在系統建立的時候,一次性的在創世塊裡,寫入1億個NEO;藉助ICO,使用者可以直接用人民幣認購持有;這種模式有點類似於央行發行人民幣;而比特幣那種發行模式,和淘金很相似;

在剛才的分享中,我們不斷提到了挖礦,那比特幣中的挖礦到低是怎麼一回事呢?

其實挖礦是比特幣系統中一個形象化的表達;它背後真正的名稱是POW演算法,也就是工作量證明演算法;工作量證明,是從經濟學中來的;是1993年,由兩個經濟學家提出來的一種策略,就是,防止對服務濫用或者資源濫用,而採取的一種有效阻斷的經濟策略;


這個POW在比特幣之前就已經被廣泛使用了;其中比較有名的就是Google郵箱的反垃圾郵件系統;Google是怎麼用的呢?google是這樣做的:他要求每一個給google郵件伺服器發電郵的對方伺服器,必須先完成一定量的計算工作;這個計算可能會耗時對方服務執行緒2到3秒;2到3秒,如果是一個人在發郵件,是完全可以忍受的;如果對方是個傳送垃圾郵件的指令碼程式,他是根本無法忍受的,郵件指令碼要做的是每秒成千上百封的往外發;


那在比特幣系統是怎樣用的呢?中本聰在設計實現比特幣系統的時候,希望每10分鐘完成一次比特幣發行,由於比特幣網路中有成千上萬個節點,那該把幣發行給誰呢?按照工作量證明的策略,也就是POW演算法的思路,中本聰在比特幣系統中,給每一個節點出了一個難題,大家先看下語音下方的這個截圖,這是一個區塊頭的資料結構,大家注意一下,裡面有個Nonce欄位;中本聰的難題呢就是:在其他欄位值不變的前提下,透過不斷調節Nonce的值,來對BlockHeader這個結構體值算Hash,要求找到一個Nonce值,使得算出來的hash值小於或大於某個固定值,這個固定值,在BlockHeader結構體中,由Bits來標示;


由於hash演算法是一個不可以逆的演算法,沒法透過具體的hash值,倒推出原文;這樣每個節點只能採用窮舉的方法,也就是從1開始,2 3 4 5...不斷的往後試;在這個過程就開始考驗各個節點的CPU計算速度了,算的快的,很快就能得到Nonce值,然後他就把這個Nonce值放在結構體裡,透過P2P網路廣播出去;每個系統節點收到後,發現這個Nonce值是合法的,能滿足要求,就認為挖礦成功;對於那些算到半截的節點,發現有人已經算出來了,就放棄本次窮舉了;然後開始透過窮舉的辦法,去尋找下一個區塊頭的Nonce值;


這樣大家是不是就明白了,所謂挖礦,就是計算機透過窮舉的辦法,不斷去找Nonce值、算Hash值的過程;誰先找到,誰就挖成功了;

到這裡,基本就把挖礦及挖礦和比特幣的關係說清楚了,其實圍繞挖礦還有很多其他的問題需要解決,比如:挖礦難度的動態調整,入鏈時的孤塊處理,由於網路時延或計算機處理能力導致的分叉處理等等問題,這些問題留著以後再說,今天先把挖礦這件事情和大家說明白了;希望大家聽完能夠有收貨,如果大家願意,可以轉發給你周圍對區塊鏈感興趣的朋友,一起學習進步;

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;