比特幣和挖礦的關(guān)系及挖礦原理解析
大家如果要來學(xué)習(xí)區(qū)塊鏈,比特幣系統(tǒng)是我們一定會(huì)面對(duì)的第一個(gè)大的知識(shí)模塊。為什么是這樣?在昨天的分享中,我們已經(jīng)提到了,比特幣是區(qū)塊鏈的前身實(shí)現(xiàn),區(qū)塊鏈?zhǔn)潜忍貛诺暮笃谔釤?,兩者的邏輯關(guān)系決定了比特幣是個(gè)繞不開的家伙;如果大家是初次接觸比特幣,當(dāng)你想和別人交流的時(shí)候,面對(duì)的第一個(gè)概念可能就是挖礦。
那么問題來了?挖礦是什么意思?挖礦和比特幣是什么關(guān)系?挖礦的原理是什么?等等。這些問題在我學(xué)習(xí)區(qū)塊鏈的過程中,困擾過我很長(zhǎng)一段時(shí)間。下面呢,就讓我們來逐一看看。
首先讓我們從 比特幣和挖礦的關(guān)系說起;
在開始這個(gè)話題之前,我先提個(gè)問題:大家有沒有想過為什么每個(gè)區(qū)塊鏈系統(tǒng)都要發(fā)行自己的數(shù)字貨幣?也就是前段時(shí)間的ICO熱;這里面就涉及到區(qū)塊鏈的根本作用,這個(gè)作用就是:實(shí)現(xiàn)社會(huì)價(jià)值在區(qū)塊鏈上的自由流通(類比下互聯(lián)網(wǎng)的根本作用:實(shí)現(xiàn)信息的自由流通);比如我可以針對(duì)汽車開發(fā)一個(gè)汽車鏈,針對(duì)房子開發(fā)一個(gè)房子鏈,針對(duì)母豬開發(fā)一個(gè)母豬鏈;等等;如果一個(gè)組織或個(gè)人的能量足夠大,也可以發(fā)布一個(gè)面向全行業(yè)的鏈,這個(gè)事估計(jì)只有央行能做;那汽車、房子、母豬…想在各自的鏈上自由流轉(zhuǎn),從A的名下流轉(zhuǎn)到B的名下,或者從C的名下流轉(zhuǎn)到D的名下,一定需要個(gè)度量的尺度;這個(gè)尺度就是靠支出相應(yīng)的數(shù)字貨幣來完成的;換句話說,每條鏈發(fā)布的數(shù)字貨幣,充當(dāng)?shù)氖窃撴溕蟽r(jià)值流通的一般等價(jià)物;做個(gè)現(xiàn)實(shí)的類比:也就是我們生活中用于交易的人民幣、美元、泰銖、英鎊等中央貨幣,在我們購(gòu)物時(shí)充當(dāng)?shù)淖饔谩C織l鏈可以類比成一個(gè)國(guó)家,每個(gè)國(guó)家是不是都有自己的貨幣系統(tǒng)?這樣一想,是不是就清楚為什么每條鏈發(fā)行數(shù)字貨幣的原因了,其目的就是促使鏈上資產(chǎn)的順利流通;
就數(shù)字貨幣而言,對(duì)于想做事的人,他充當(dāng)?shù)氖莾r(jià)值流通的一般等價(jià)物;對(duì)于斂財(cái)?shù)娜?,就是個(gè)圈錢的工具;
下面我們就進(jìn)入正題:分析下比特幣和挖礦的關(guān)系;說起二者的關(guān)系,需要先說一下在區(qū)塊鏈中,數(shù)字貨幣的發(fā)布模式;
從籠統(tǒng)的角度來說:區(qū)塊鏈發(fā)布鏈上的數(shù)字貨幣有兩種主要形式:一種就是像比特幣這種的,通過挖礦節(jié)點(diǎn),不斷消耗自身的算力,也就是不斷挖礦的意思,來?yè)Q取比特幣;由于比特幣系統(tǒng)是完全開源的,在這套開源的代碼里,包含了挖礦的功能,只要一個(gè)人懂代碼,就可以把這套代碼進(jìn)行編譯部署,加入到比特幣網(wǎng)絡(luò)里面去,把挖礦功能開啟,那你的宿主機(jī)開始挖礦了;在比特幣系統(tǒng),通過自身的算法可以動(dòng)態(tài)調(diào)整全網(wǎng)節(jié)點(diǎn)的挖礦難度,保證每過大約10分鐘,比特幣網(wǎng)絡(luò)中,就會(huì)有一個(gè)節(jié)點(diǎn)挖礦成功;一旦有人挖礦成功,比特幣系統(tǒng)就會(huì)獎(jiǎng)勵(lì)此人一定數(shù)量的比特幣,這個(gè)數(shù)量也是通過算法控制的,這個(gè)算法可以說一下:最開始的頭四年,每個(gè)挖礦成功的人會(huì)得到25個(gè)比特幣的獎(jiǎng)勵(lì),每過四年衰減一半;也就是下一個(gè)四年挖礦成功獎(jiǎng)勵(lì)12.5個(gè),再下一個(gè)四年獎(jiǎng)勵(lì)6.25個(gè),以此類推;大約到2140年的時(shí)候,區(qū)塊鏈發(fā)行完畢,共計(jì)約2100萬個(gè)比特幣;
通過上面的闡述,大家應(yīng)該明白挖礦和比特幣的關(guān)系了,這個(gè)關(guān)系就是:挖礦,是比特幣系統(tǒng)發(fā)行自身數(shù)字貨幣,也就是比特幣的必經(jīng)之路。比特幣系統(tǒng),借助挖礦完成自身數(shù)字貨幣的發(fā)行;發(fā)行數(shù)字貨幣的過程,就是各個(gè)礦工競(jìng)爭(zhēng)挖礦的過程。在每一個(gè)10分鐘內(nèi),看誰先挖到礦,就獎(jiǎng)勵(lì)一定數(shù)量的比特幣,這個(gè)獎(jiǎng)勵(lì)的過程就是比特幣發(fā)行的過程;每個(gè)挖礦節(jié)點(diǎn),受利益的驅(qū)使,也是不斷的想辦法能更快的挖礦,這也就催生了市面上的各種各樣的礦池節(jié)點(diǎn);
剛才我們說了,數(shù)字貨幣的發(fā)行有兩種主要形式;比特幣的是一種;另外一種,我以國(guó)內(nèi)的NEO為例;NEO的發(fā)行模式是:在系統(tǒng)創(chuàng)建的時(shí)候,一次性的在創(chuàng)世塊里,寫入1億個(gè)NEO;借助ICO,用戶可以直接用人民幣認(rèn)購(gòu)持有;這種模式有點(diǎn)類似于央行發(fā)行人民幣;而比特幣那種發(fā)行模式,和淘金很相似;
在剛才的分享中,我們不斷提到了挖礦,那比特幣中的挖礦到低是怎么一回事呢?
其實(shí)挖礦是比特幣系統(tǒng)中一個(gè)形象化的表達(dá);它背后真正的名稱是POW算法,也就是工作量證明算法;工作量證明,是從經(jīng)濟(jì)學(xué)中來的;是1993年,由兩個(gè)經(jīng)濟(jì)學(xué)家提出來的一種策略,就是,防止對(duì)服務(wù)濫用或者資源濫用,而采取的一種有效阻斷的經(jīng)濟(jì)策略;
這個(gè)POW在比特幣之前就已經(jīng)被廣泛使用了;其中比較有名的就是Google郵箱的反垃圾郵件系統(tǒng);Google是怎么用的呢?google是這樣做的:他要求每一個(gè)給google郵件服務(wù)器發(fā)電郵的對(duì)方服務(wù)器,必須先完成一定量的計(jì)算工作;這個(gè)計(jì)算可能會(huì)耗時(shí)對(duì)方服務(wù)線程2到3秒;2到3秒,如果是一個(gè)人在發(fā)郵件,是完全可以忍受的;如果對(duì)方是個(gè)發(fā)送垃圾郵件的腳本程序,他是根本無法忍受的,郵件腳本要做的是每秒成千上百封的往外發(fā);
那在比特幣系統(tǒng)是怎樣用的呢?中本聰在設(shè)計(jì)實(shí)現(xiàn)比特幣系統(tǒng)的時(shí)候,希望每10分鐘完成一次比特幣發(fā)行,由于比特幣網(wǎng)絡(luò)中有成千上萬個(gè)節(jié)點(diǎn),那該把幣發(fā)行給誰呢?按照工作量證明的策略,也就是POW算法的思路,中本聰在比特幣系統(tǒng)中,給每一個(gè)節(jié)點(diǎn)出了一個(gè)難題,大家先看下語音下方的這個(gè)截圖,這是一個(gè)區(qū)塊頭的數(shù)據(jù)結(jié)構(gòu),大家注意一下,里面有個(gè)Nonce字段;中本聰?shù)碾y題呢就是:在其他字段值不變的前提下,通過不斷調(diào)節(jié)Nonce的值,來對(duì)BlockHeader這個(gè)結(jié)構(gòu)體值算Hash,要求找到一個(gè)Nonce值,使得算出來的hash值小于或大于某個(gè)固定值,這個(gè)固定值,在BlockHeader結(jié)構(gòu)體中,由Bits來標(biāo)示;
由于hash算法是一個(gè)不可以逆的算法,沒法通過具體的hash值,倒推出原文;這樣每個(gè)節(jié)點(diǎn)只能采用窮舉的方法,也就是從1開始,2 3 4 5.。.不斷的往后試;在這個(gè)過程就開始考驗(yàn)各個(gè)節(jié)點(diǎn)的CPU計(jì)算速度了,算的快的,很快就能得到Nonce值,然后他就把這個(gè)Nonce值放在結(jié)構(gòu)體里,通過P2P網(wǎng)絡(luò)廣播出去;每個(gè)系統(tǒng)節(jié)點(diǎn)收到后,發(fā)現(xiàn)這個(gè)Nonce值是合法的,能滿足要求,就認(rèn)為挖礦成功;對(duì)于那些算到半截的節(jié)點(diǎn),發(fā)現(xiàn)有人已經(jīng)算出來了,就放棄本次窮舉了;然后開始通過窮舉的辦法,去尋找下一個(gè)區(qū)塊頭的Nonce值;
這樣大家是不是就明白了,所謂挖礦,就是計(jì)算機(jī)通過窮舉的辦法,不斷去找Nonce值、算Hash值的過程;誰先找到,誰就挖成功了。