今天我們再來談一下挖礦。對于挖礦,有個很好的類比:
挖礦就像很多人一起來玩一個大型的數(shù)獨游戲,最先完成的那個人獲勝,一旦有人獲勝,游戲會重新開始,參與游戲的人數(shù)越多,游戲就越難,人數(shù)越少,游戲就越簡單,通過這種動態(tài)調整來確保每10分鐘開展一輪游戲。
比特幣的安全性從何而來
礦工在比特幣網(wǎng)絡中扮演兩個角色
- 他們?yōu)檎麄€p2p網(wǎng)絡提供了安全性的保證
- 他們產(chǎn)生新的比特幣
比特幣網(wǎng)絡中的算力非常巨大,所以礦工獲得勝利是一個隨機事件,同時這個隨機概率非常之小,這就讓想惡意篡改數(shù)據(jù)的人很難“下手”,第二個,勝利的礦工需要驗證每一筆交易,這就確保了每個人賬上的比特幣不會減少。有人可能會問,如果這個礦工自己篡改數(shù)據(jù),然后再“謊報軍情”怎么辦?沒關系,他驗證完了,其他的節(jié)點還要再驗證一遍他的結果,給最終的結果再加一層保險。驗證涉及到的計算量也相當巨大。
所以比特幣中的信任建立在計算的行為之上。
礦工的工作非常“辛苦”,所以這個獲勝的礦工才會得到豐厚的獎勵,獎勵分兩部分,一是新產(chǎn)生的比特幣,二是每筆交易中的手續(xù)費,產(chǎn)生新幣的過程就像中央銀行在發(fā)行貨幣,結合安全性來考慮,
挖礦這種設計讓比特幣無需中央授權,卻仍然具備極高的安全性。
在讀書的過程中,我腦子里突然冒出了一個問題:都說是解決一個數(shù)學難題,但這個難題是誰出的呢?是不是出題的這個節(jié)點,也和大家一樣,對這個題一無所知呢?這個問題先放在這里,我想書的后面一定會給出解答。
挖礦的演變
不知道多少人真的動手挖過礦,上周末我在家里體驗了一番,作為一名“新礦工”,其實我還是有很多疑問的,因為真實的挖礦和理論上的挖礦有很大的差距,主要差距來源于現(xiàn)在挖礦不需要你擁有一個全節(jié)點了,你只需要下載一個提供算力的挖礦程序,填好你的地址,連接一個礦池就可以了,而看了前面文章的同學都知道,礦工是需要運行一個全節(jié)點的,這讓我很上腦經(jīng),因為我不能一下算出是加入礦池收益高,還是自己做全節(jié)點收益高。
后面仔細想了下,礦池是有它存在的價值的,畢竟現(xiàn)在挖礦難度越來越高,而要想在其中勝出,就像是中彩票一樣困難,同時挖礦是要消耗成本的,所以為了能讓大家有一個穩(wěn)定的收入,礦池會把大家的算力收集起來,一旦礦池通過這些算力贏得勝利,最終的獎勵是根據(jù)每個人提供算力的比例平分的,即只要你的算力是穩(wěn)定的,你的收入就是穩(wěn)定的,當然礦池提供了這樣的服務,他理所當然要收取一定的手續(xù)費。由于這種模式的普及,我們甚至可以把比特幣網(wǎng)絡按照礦池來劃分,如下圖
書中說的挖礦是最初的情況,隨著時間的發(fā)展,挖礦行業(yè)也在不斷演進,比特幣挖礦方式最初是CPU挖礦,然后是高端顯卡(GPU)提供算力挖礦,接著就是現(xiàn)在的ASIC礦機(application-specific integrated circuits)
交易的確認
交易要寫到block中,也是需要勝利的礦工來完成,其實這個說法還不全面,因為對于整個網(wǎng)絡的全節(jié)點來說,除了勝利的礦工要創(chuàng)建這個新block,其他的礦工也要做同樣的事情,這樣才能保證每個節(jié)點的數(shù)據(jù)是一致的,所以真正的過程是,在數(shù)學題做出來之前,每個節(jié)點都維護了一個一致的臨時block,一旦有人獲勝,且他完成了驗證后,同時他的成果被其他人驗證后,臨時block會加入到正式blockchain中,然后大家會馬上展開下一個block的競爭。
在傳輸比特幣的過程中,我們經(jīng)常會看到一筆交易被確認n次的數(shù)字,這個確認數(shù)怎么理解,下面我們就來談一下這個話題,要理解確認數(shù),就需要先引入兩個其他的概念
- 區(qū)塊深度(Block Depth)
- 區(qū)塊高度(Block Height)
先看一下這張圖:
區(qū)塊深度和區(qū)塊高度都是基于某一筆交易而言,我們先來看區(qū)塊高度,區(qū)塊高度很像計算機中數(shù)組的索引,索引從0開始計數(shù),即第一個被創(chuàng)建的區(qū)塊——創(chuàng)世紀區(qū)塊(genesis block),所以,在創(chuàng)世紀區(qū)塊中的交易,它們的區(qū)塊高度為0。而在圖中,Alice的交易的區(qū)塊高度為277316,它是第277317個區(qū)塊。
一筆交易被寫入?yún)^(qū)塊后,它就被確認了1次,接著一個新的區(qū)塊被寫入,壓在了剛才那個區(qū)塊的上方,那么剛才那筆交易就被確認了2次,以此類推,某個交易的區(qū)塊之后的區(qū)塊數(shù)被稱為交易深度,用公式來表示,如下
確認次數(shù) = 區(qū)塊深度 + 1
那么上圖中Alice的交易被確認了3次。
你可能會問,交易確認次數(shù)有什么作用?因為每加入一個區(qū)塊,就等同于加入了一定的計算量,隨著block的增加,修改某一條交易的難度會呈指數(shù)級別的增長,一般來說,6個以上的確認就被視為不可能被改變的交易了。
總結
今天我們全面的描述了挖礦在比特幣中的地位,是不是比以前的認識更深了呢,但學的越多,卻發(fā)現(xiàn)還有更多細節(jié)需要去探索,不用急,這是遲早的事情,反正我們有耐心。