我們知道對於比特幣系統,所有的比特幣用戶都維護着一條相同的區塊鏈。讓這么多人不斷地更新區塊鏈的數據,如何才能維持共識與統一呢?
一、 區塊的創建
區塊中包含區塊頭和區塊體,我們的礦工在開始挖礦時,就將需要寫入區塊體的交易打包在區塊內,隨后用不同的nonce去嘗試,以獲取滿足記賬權的hash值。
明確了這一點,我們可以想象當各種客戶把交易發布到區塊鏈網絡中時,礦工開始打包交易,不同的礦工打包的交易很可能是不同的。沒有打包的交易只能等到下一個區塊進行打包。
那一個區塊如果被礦工挖出,人們怎么承認其合法性呢?
對於一個比特幣用戶,首先會驗證區塊頭中的一些數據是否合法,如target(即記賬權的閾值),以及nonce計算和一些版本信息。確定了這些之后區塊鏈系統就會承認其合法性。
二、 同時獲得記賬權
如果兩個礦工同一時間挖出區塊,在短時間內,這兩個區塊都是合法的,剩余的礦工可以選擇任意一個區塊進行挖礦,當下一個區塊挖出時,該區塊在哪個區塊之后,哪個區塊就會變的合法。這里說的是最長合法鏈機制。
三、 重新挖礦
大家可能發現,當別人開始挖到新的礦時,對於其他礦工不得不重新打包交易,重新計算hash值,這一步開始時半途而廢,但是由於哈希算法的memoryless性質,無論你什么時候開始挖礦,下一秒挖到礦的概率都是相同的。這也保證了挖礦的公平性。