完整講清比特幣(三):挖礦和記賬

大家好,書接前回……(真是隔了好久啊……我放個上次的鏈接在閱讀原文裏吧)

 

另外麼,最近的風聲大家瞭解的,所以……儘早閱讀哦

 

上次說到,發起交易的節點會把交易信息向全網廣播,收到信息的全節點(也就是保留比特幣全賬本的節點,目前的要求是幾百G的硬盤空間和高速的網絡,因此只有專業的礦工會做全節點了,一般用戶只是裝個錢包做輕節點而已)進行驗證後,會把合法的交易記錄到一個待打包記錄的池子中。

 

這個池子裏的數據會越來越多。同時,我們很久之前講過,比特幣協議裏規定用來存放數據的空間是1M,而一筆交易大致是500字節左右,也就是一個區塊只能存放2000筆左右的交易。到一定程度,礦工會從裏面挑選一些交易(大家記得,交易方是可以提出給礦工手續費的,所以這時候肯定是手續費高的交易先被挑出來),打成一個包。這樣的一個包就成爲一個區塊(block)。這個區塊還會附加一些其他數據,比如最重要的是本區塊的默克爾根hash,還有它是緊跟在哪個區塊後面的,那個區塊的默克爾根hash。

 

關於這些根hash我們這裏不做技術解釋,只需要知道如果區塊裏的數據有任何一點點改動,根hash就會完全不同。於是這樣一個根hash緊跟着一個根hash的形式,保證了(1)所有區塊的順序都是確定的,(2)兩個既定區塊中間不能再插入新的區塊,(3)任何一個已經確定的區塊裏面的數據不能被更改——否則根hash就會對不上。

 

這就是我們說區塊鏈可追溯不可篡改的原因

 

一個區塊(block)緊跟一個區塊,形成了一條鏈(chain),所以就叫區塊鏈(blockchain)。

 

回到礦工部分。我們說過,如果是中心化的系統,那麼系統管理者包裏的數據就是整個系統的賬本數據,但是在一個去中心化的系統中,每個礦工都會生成這樣一個包,哪個包最終能作爲系統賬本的一部分被記錄下來呢?這就需要共識機制。比特幣系統使用的是PoW(Proof of Work)機制,具體我們之前在共識機制那篇裏分析過,就是用算力這個門檻來確保礦工的誠實。

 

於是接下來,就是挖礦過程中最重要的部分,計算hash。這個算式是這樣的,算式左邊是包裏的數據(交易及其他),加上一個隨機數,右邊是一個滿足難度要求的hash數。

 

比特幣系統設定的加密算法是SHA256。而難度要求表達爲,小於一個十六進制數(寫作0x000000XXXXXXX這樣)。

 

這其中,交易數據是定的,Hash數要滿足要求,而隨機數nonce,就是礦工要找出來的。也就是說,要找到一個隨機數,使得它加上交易等數據,經過SHA256計算,得到一個小於既定難度要求的Hash數。

 

又因爲,SHA256是非線性的(其他加密算法也一樣),無法直接知道怎樣的nonce能滿足要求,唯一的辦法就是不斷代入不同的隨機數進行嘗試。這就是這個系統消耗算力的地方,要求計算機不停做運算直接碰到合適的隨機數,也就是比特幣PoW的W。

 

顯然,目標Hash數設置得越小,滿足要求的隨機數也就越少,需要進行的嘗試也就越多,因此難度也就越高。至於爲什麼要調高難度,當然是因爲礦工的設備在不斷升級換代,算力越來越高啦。

 

關於比特幣系統如何調整難度,以及具體的考量,小磕在之前專門花一篇寫過,在此不重複。簡單來說,比特幣每2016個區塊調整一次難度,保證每10分鐘左右出一個塊。

 

當一個礦工算出了合適的隨機數,並且沒有收到其他礦工算出來的通知時,他就可以認爲自己首先找到了隨機數(當然有時候可能是網絡延遲他沒有收到通知)。於是他要做的就是向全網廣播,告訴大家他算出的隨機數以及他這個包的數據。其他礦工收到這個消息後,如果這個時間段沒有更早的消息,他們會驗證這個隨機數,以及這個包裏的數據是否合法。驗證通過的話,礦工們會接受這就是這個時間段的最終挖出區塊,他們會把這個區塊添加到自己的賬本的末端,跟原來的賬本chain在一起,並且停掉之前的計算隨機數的進程,把自己那個包裏包含的但未包含在新區塊裏的交易數據重新放到待打包交易池中,然後進行下一輪的挖礦。

 

因爲每個礦工都保存了這麼一份賬本,並且同步更新,即所謂分佈式賬本,就保證了即使有部分礦工的賬本丟失(主動或被動),整個系統的賬本依然是安全的。

 

很明顯,礦工在這個系統中的作用非常重要,也做了非常多的工作。那怎麼激勵節點來當礦工、努力工作呢?交易方提供的手續費是一部分,另外,每個區塊記錄的交易池裏面第一筆交易會是,某某節點因爲第一個找到隨機數,系統給了它N個比特幣。

 

(再次強調,礦工得到這個獎勵是因爲系統公認的區塊鏈賬本里記錄了它得到獎勵的這筆交易,而不是系統傳送給了它“獎勵的比特幣”這樣一個東西,大家一定要把傳統貨幣概念改過來)。

 

在早期比特幣交易沒有手續費的時候,這個獎勵就是對礦工的唯一激勵了。因爲整個過程是消耗大量算力最後得到獎勵,就像費力挖礦最後挖出金子一樣,所以這個過程會被成爲“挖礦”——這是一個比喻,可不是真的“挖”出什麼東西來了。

 

同樣在之前一篇文章裏,小磕分析了具體數字背後的邏輯,這裏只是簡述:最初每個區塊的獎勵是50個比特幣,大約每四年減半一次,而且這是比特幣發行的唯一機制(也就是唯一從0開始生成比特幣的地方),最終比特幣的數量大致是2100萬不到。

 

隨着交易的不斷增加,礦工們的辛勤工作,比特幣系統這條鏈也越來越長,隨後又吸引了更多的交易和更多的礦工,最終使得它不僅是區塊鏈領域最早的鏈,也始終是最大的鏈。

 

 

 

 

(讀完之後,你選擇點贊還是分享支持小磕呢~)

 


由“蔣博的多棱鏡”原創,如需轉載,請登錄新榜網站版權頻道( http://cc.newrank.cn )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章