為什麼有的區塊沒有打包交易,是礦工忘記了嗎?| 白話區塊鏈入門069

買賣虛擬貨幣

作者 | 晏文春
出品|白話區塊鏈(ID:hellobtc)

白話區塊鏈在《比特幣礦工一天賺多少錢?》一文介紹過:比特幣出塊獎勵包括兩部分:系統獎勵(也稱Coinbase獎勵)和交易手續費獎勵(也稱礦工費)。礦工打包交易到所挖出的區塊裡,才能得到該筆交易的手續費。

我們做一個類比,這個問題就非常好理解了:

挖出區塊的礦工相當於是客車司機,除了系統會給客車司機獎勵以外,客車司機每招攬一名乘客,就能得到一筆乘車費,客車司機好不容易搶到一次發車權,會拼命往車裡塞乘客,直到滿座(車的容量是有有限的)。

礦工都是理智的,按理說礦工為了利益最大化,在待確認的交易足夠多的情況下,每個區塊都會被礦工儘可能多地填充交易。為什麼有的區塊裡,除了Coinbase獎勵以外沒有其他交易呢?事出反常必有妖,我們今天就來“捉妖”吧。

 01 
天下武功唯快不破

白話區塊鏈在《如果兩名礦工同時挖出新區塊,出塊獎勵該給誰呢?》一文介紹了,當礦工挖出區塊後,越快將區塊釋出出去對礦工越有利。

白話區塊鏈在《一個經典的故事,讓你3分鐘搞懂比特幣挖礦》一文介紹了區塊的構造:一個區塊主要由區塊頭和區塊體兩部分組成。區塊頭的大小,僅佔80個位元組,一個滿載的區塊為1M大小,是區塊頭的12500倍。

我們知道,資料越小,傳播和接收就越快,所以挖出新區塊的礦工,為了讓區塊能更快地在全網釋出,會把區塊頭和區塊體的資訊分開發布,只有80位元組的區塊頭就能以更快的速度傳播給其他礦工。

根據上面的介紹,我們知道,當一個新區塊被挖出,礦工會更快接收到區塊頭資訊,然後再接收到區塊體資訊。

 02 
挖礦爭分奪秒

這時候礦工有兩種選擇:

接收到區塊頭後,馬上構造區塊開始挖礦;
繼續等待接收區塊體,驗證區塊內所有的交易後,才開始挖礦。

從接收到區塊頭到接收並驗證區塊體內所有交易,這中間是有時間差的,我們假設這個時間差是10秒鐘。如果這10秒鐘選擇等待,一方面礦機在空跑,需要耗能;另一方面挖礦是一場競賽,“時間就是金錢”,礦工會爭取這10秒鐘時間,如果在這段時間內,找到了合適的隨機數,就能挖出新的區塊,得到比特幣獎勵。

選擇在這個時間差內挖礦,就必須放棄打包交易。這是因為礦工沒有驗證上一個區塊內的交易,無法確定上一個區塊內打包了哪些交易,如果打包的交易和上一個區塊重複了,那麼即使礦工挖出了新的區塊,也會因為重複打包已確認的交易而被判無效。這就是為什麼有的區塊鏈只有Coinbase一條交易(就是系統給礦工獎勵的那條交易)的原因。

 03 
總結

我們總結一下:礦工打包空塊主要的原因是,礦工為了充分利用礦機,在接收到新區塊的區塊頭資訊且還沒來得及驗證該區塊內的交易,在這個時間差內,礦工進行挖礦,如果在這個時間視窗內,剛好挖到區塊,礦工就會選擇打包空塊,釋出區塊。因為在不清楚上一個區塊打包了哪些交易的情況下,礦工打包交易,可能會與前一個區塊打包的交易相同,這將導致礦工挖出的區塊被判無效(非法),有撿了芝麻丟了西瓜的風險。

礦工挖出區塊後,如果明確某一筆交易沒有被之前的區塊打包,可以將這筆交易新增到當前挖出的區塊,然後再發布嗎?歡迎到留言區分享你的觀點。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;