提起比特幣和區塊鏈,很多人都覺得如數家珍,實則知其然不知所以然。比特幣是區塊鏈的前身實現,區塊鏈是比特幣的後期提煉;如果初次接觸比特幣,當你想和別人交流的時候,面對的第一個概念可能就是挖礦。那麼,挖礦的原理是什麼?怎樣利用挖礦產生比特幣呢?本文將為你一一闡釋。
首先,我們來思考一下為什麼每個區塊鏈系統都要發行自己的數字貨幣?也就是前段時間的ICO熱。這裡面就涉及到區塊鏈的根本作用,這個作用就是:實現社會價值在區塊鏈上的自由流通(類比網際網路的根本作用:實現資訊的自由流通)。
比如我可以針對汽車開發一個汽車鏈,針對房子開發一個房子鏈,針對母豬開發一個母豬鏈等等。如果一個組織或個人的能量足夠大,也可以釋出一個面向全行業的鏈,那汽車、房子、母豬……想在各自的鏈上自由流轉,從A的名下流轉到B的名下,或者從C的名下流轉到D的名下,一定需要個度量的尺度。這個尺度就是靠支出相應的數字貨幣來完成的。換句話說,每條鏈釋出的數字貨幣,充當的是該鏈上價值流通的一般等價物。做個現實的類比:也就是我們生活中用於交易的人民幣、美元、泰銖、英鎊等中央貨幣,在我們購物時充當的作用。每條鏈可以類比成一個國家,每個國家是不是都有自己的貨幣系統?這樣一想,大概就清楚每條鏈發行數字貨幣的目的就是促使鏈上的資產順利流通了。就數字貨幣而言,對於想做事的人,它充當的是價值流通的一般等價物;對於斂財的人,就是個圈錢的工具。
在區塊鏈上,數字貨幣的釋出模式是怎樣的呢?
區塊鏈釋出鏈上的數字貨幣有兩種主要形式。一種是,以國內的NEO為例,NEO的發行模式是:在系統建立的時候,一次性的在創世塊裡,寫入1億個NEO。藉助ICO,使用者可以直接用人民幣認購持有。這種模式比較類似於央行發行人民幣。
另一種就是類似於淘金,就是比特幣這樣的,透過挖礦節點,不斷消耗自身的算力,來換取比特幣。由於比特幣系統是完全開源的,在這套開源的程式碼裡,包含了挖礦的功能,只要一個人懂程式碼,就可以把這套程式碼進行編譯部署,加入到比特幣網路裡面去,把挖礦功能開啟,那你的宿主機開始挖礦了。
在比特幣系統,透過自身的演算法可以動態調整全網節點的挖礦難度,保證每過大約10分鐘,比特幣網路中,就會有一個節點挖礦成功;一旦有人挖礦成功,比特幣系統就會獎勵此人一定數量的比特幣,這個數量也是透過演算法控制的。具體說來:最開始的四年,每個挖礦成功的人會得到25個比特幣的獎勵,每過四年衰減一半;也就是下一個四年挖礦成功獎勵12.5個,再下一個四年獎勵6.25個,以此類推。大約到2140年的時候,區塊鏈發行完畢,大約2100萬個比特幣,這就是比特幣的總量,所以不會無限增加下去。
透過上面的闡述,大家應該明白挖礦和比特幣的關係了。這個關係就是:挖礦,是比特幣系統發行自身數字貨幣,也就是比特幣的必經之路。比特幣系統,藉助挖礦完成自身數字貨幣的發行。發行數字貨幣的過程,就是各個礦工競爭挖礦的過程。在每一個10分鐘內,看誰先挖到礦,就獎勵一定數量的比特幣,這個獎勵的過程就是比特幣發行的過程;每個挖礦節點,受利益的驅使,也是不斷的想辦法能更快地挖礦,這也就催生了市面上的各種各樣的礦池節點。
挖礦是比特幣系統中一個形象化的表述。它背後真正的名稱是POW演算法,也就是工作量證明演算法。工作量證明,是從經濟學中來的。1993年,由兩個經濟學家提出來的一種策略,就是防止對服務濫用或者資源濫用,而採取的一種有效阻斷的經濟策略。
POW演算法在比特幣之前就已經被廣泛使用了,其中比較有名的就是Google郵箱的反垃圾郵件系統。Google是這樣做的:他要求每一個給google郵件伺服器發電郵的對方伺服器,必須先完成一定量的計算工作,這個計算可能會耗時對方服務執行緒2到3秒。2到3秒的時間,如果是一個人在發郵件,是完全可以忍受的;如果對方是個傳送垃圾郵件的指令碼程式,他是根本無法忍受的,郵件指令碼要做的是每秒成千上百封的往外發。
那POW演算法在比特幣系統是怎樣應用的?中本聰在設計實現比特幣系統的時候,希望每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值的過程。誰先找到,誰就挖成功了。
挖礦本身需要的電費是很高的。但如今,隨著比特幣升值越來越快,選擇去挖礦的人也越來越多了,懂了這些後的你,有沒有動心呢?