針對上面50W高度和最新高度區塊,我們需要進一步詳說。在礦池在對最新高度
區塊鏈進行挖礦之前,是要對50W高度這個區塊進行驗證的。如果驗證成功,在“50W+1”這個新組裝的區塊高度上挖礦才是合法的,如果50W高度是一個非法的區塊,那所有的礦池是要回到“50W”高度去挖礦的。
但驗證區塊是需要時間的,因為各個礦池的軟硬件不同,我們假定一個平均時間,10秒鐘驗證1M的區塊。在驗證結束之前,礦池是無法確認這個區塊是不是合法,也就無法確認是否應該添加“50W+1”高度的最新區塊。
而組裝一個最新高度的區塊也是需要時間的,拿到一個區塊模板開始組裝,往里填寫父區塊哈希值和在內存池里挑選交易填充進區塊體,這都是需要時間,我們假定需要0.1秒。
在驗證“50W”高度區塊時,和填充交易進“50W+1”區塊里,有一個提前,填充的交易是絕對不能和50W高度里已經打包的交易相重的。不然你這個最新高度區塊就會是非法的。
而“50W”高度這個區塊從挖出到廣播到所有的礦池中也是需要時間的,廣播區塊有分兩步。第一步是廣播區塊頭;第二步是廣播區塊體。區塊體非常小,只有80字節,比一筆交易還小,廣播特別快,所有礦池可以非常快拿到區塊頭。有了區塊頭就可以拿到組裝新高度區塊的“父哈希值”。區塊體是包含所有交易的那部分,一般非常大,比如2500筆交易就接近1M了。
btc最大可以接近1M,加外3M的隔離見證區塊。而BCH曾經打包出21M的區塊體。所有礦池收到區塊體就要時間更長了,這叫網絡延遲。我們假定網絡延遲平時是0.5秒。
礦池挖礦最簡單的做法是:一個礦池只要在拿到區塊體,才能確認區塊體里有哪些交易。而只有驗證完整個區塊,才能知道這個“50W”高度的區塊是否合法。然后再開始組裝最新高度區塊,然后再挖礦計算小于目標值的哈希值。那在拿到區塊體,和驗證完整個區塊,再加上組裝最新高度區塊,的時間長度是多少?0.5+10+0.1=10.6秒。
如果一個礦池按上述過程來挖礦,那就在這10.6秒鐘的時間內是無法挖礦的,礦機是無效工作時間。而且礦機還是在開機耗電的。
如果一個礦池按下面的過程來工作:拿到區塊頭,就開始組裝一個新的“50W+1”高度的區塊,但因為無法確認這個50W高度區塊里的交易和是整個區塊是否合法,所以這個“50W+1”高度的區塊,礦池并不對區塊體填充額外的交易,只填充一個Coinbase獎勵交易。這個“50W+1”高度的區塊,只有區塊頭,外加一個Coinbase獎勵交易——這就是一個空塊——然后就直接開始挖礦。這樣操作,在全網出現一個新塊時,礦也只需要等待拿到區塊頭和組裝空塊的時間,就可以開始挖礦。這個時間就非常短了,平時不到0.5秒。這樣就比10.6秒,節省了10秒多的時間。
而按上述過程挖礦,礦池在收到完整50W高度區塊體和驗證完50W高度區塊,這個過程是10.6秒。在上述0.5秒到10.6秒的時間里,礦機如果計算出了一個隨機數小于目標值,那礦池就成功挖到了一個空塊。如果礦機沒有計算出小于目標值的隨機數,那礦池就會放棄這10.1秒的挖礦時間,然后改成組裝一個填充了交易的“50W+1”高度的最新高度區塊進行挖礦。
上述就是挖空塊的全部邏輯。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。