一、引言
有時,你可能會注意到,一個新生成的比特幣區塊中只有一筆交易——那就是coinbase 交易(這裡說的不是那家交易所),目前這筆交易會為礦工帶來3.125 比特幣的獎勵。
(礦工收益會隨著「比特幣減半」有所減少)
但為什麼這樣的區塊會出現?這是不是某種對比特幣網路的攻擊?
事實上,一個完全空的區塊出現在比特幣網路已經不是第一次(像是在區塊高度 776,339 和 857116 都曾發生過)!這個區塊雖然被成功上傳到比特幣區塊鏈,但它並未包含任何用戶交易。
「空區塊」到底是什麼?它是比特幣網路的故障,還是某種必然現象?在本文中,我們將深入探討空區塊的形成原因、其對網路的影響,以及潛在的應對策略。

圖、空區塊示例(高度 857116)
(資料來源:https://mempool.space/zh/block/000000000000000000020a41a1d234191d5f86a051cfc105000a5163f6a58b82)
注:常用的比特幣瀏覽器:mempool.com、blockchain.com、blockchair.com、blockcypher.com
礦工挖礦流程
- 新區塊的傳播與驗證:
- 當有礦工成功發現新區塊時,該區塊會被廣播到整個網絡,並分發到所有礦池
- 其他礦工需對新區塊進行驗證,像是檢查工作量證明(Proof of Work)是否正確以及區塊中的交易是否有效
- 更新記憶池(mempool):
- 礦工會從記憶池中剔除已被確認的交易,留下未被確認的交易
- 建立候選區塊:
- 礦工根據記憶池中的未確認交易,建立一個候選區塊,並引用前一區塊的哈希值,添加剩餘的交易
- 候選區塊中必須包含一筆 coinbase 交易,作為礦工挖掘成功後的獎勵來源
- 構建區塊頭:
- 礦工為候選區塊構建區塊頭(header),內容包含前一區塊的哈希值、時間戳、目標難度和隨機數(nonce)
- 計算哈希值:
- 礦工消耗大量運算資源,以不斷更新區塊頭中的隨機數(nonce),計算區塊頭的哈希值,目的是找到一個小於當前網絡目標值的哈希
- 廣播新區塊:
- 一旦找到符合要求的哈希值,礦工立即將新區塊廣播至網絡,供其他節點進行驗證
- 獲得獎勵:
- 如果新區塊被網絡接受,礦工將獲得區塊補貼(coinbase 獎勵)和該區塊中交易的手續費收入。
在某些情況下,為了降低網絡延遲的影響,礦工可能會快速生成僅包含 coinbase 交易的空白候選區塊,這種空區塊能有效鎖定獎勵,但無法處理其他交易。 (下段會詳細說明何為空區塊)
二、空區塊的形成
空區塊的概念
在比特幣區塊鏈中,每個區塊通常包含多筆交易,這些交易不僅為網路增加價值,還支持比特幣作為支付處理系統的功能。然而,空區塊(也被稱為「單交易區塊」)只包含礦工的 coinbase 獎勵,並未納入其他交易,因此也放棄了額外的交易手續費收入。
為了鼓勵礦工儘快開採區塊,礦池會在新區塊被定位後立即向礦工提供一個空白的區塊模板(以減少挖掘下一個區塊所需的時間,從而最大限度地提高硬體的哈希效率。),讓他們可以迅速開始下一輪挖礦(即使此時尚未收到新的交易數據)。在礦池給完區塊模板和寫入交易的過渡期間(通常只有一到兩秒),礦工可能會「運氣極好」,利用這個空模板成功挖出一個新區塊,從而形成空區塊。
值得注意的是,空區塊並不會對比特幣網路造成威脅。即使區塊中沒有用戶交易,coinbase 獎勵仍會被生成,這不僅激勵礦工參與挖礦,還確保比特幣的供應逐步接近其 2,100 萬枚的上限。
空區塊內的資訊
空區塊雖然沒有包含用戶交易,但仍然記錄了一些資訊:
- 區塊頭:
- 區塊的基本資訊,例如版本號、前一區塊的哈希值、時間戳
- Coinbase 交易:
- 唯一包含的交易,即礦工的獎勵交易
- 該交易為礦工分配挖掘區塊的獎勵
- 默克爾樹根(Merkle Root):
- 即使區塊中沒有其他交易,coinbase 交易仍會生成一個默克爾樹根,用於證明交易數據的完整性
- 區塊大小與重量:
- 礦工地址(若有標記):
- 某些礦工會在 coinbase 交易中嵌入自己的識別信息,例如礦池名稱或地址
- 區塊高度:
- 區塊鏈中該區塊的位置(例如第 871732 區塊)
- Nonce 值:
- 礦工找到的隨機數,用於解開工作量證明的數學難題(Proof of Work 的解答)

圖、空區塊示例(高度 871732)
(資料來源:https://btc.tokenview.io/cn/block/871732?_gl=1%2aww3zil%2a_ga%2aMzc0NDE4MTQxLjE3MzQwNzIyMTQ.%2a_ga_0RCPHZPZ TE%2aMTczNDA3MjIxMy4xLjEuMTczNDA3MjI2My4wLjAuMA..&_ga=2.29097727.291129773.1734072214-374418141.1734072214)
為什麼礦工創建空區塊?
當礦工在上一個區塊生成後沒多久,礦池會在新區塊被定位後立即向礦工提供一個空白的區塊模板(通常時間落在幾秒內)時。此時,礦工面臨兩種選擇:要麼立即生成一個空區塊以獲得有保證的區塊補貼(例如3.125 比特幣),要麼花時間排序交易以增加手續費收入,但冒著在完成之前被其他礦工搶先挖出該區塊的風險。
這是礦工對「機會成本」的考量,若礦工花過多時間處理交易,而其他礦工率先完成該區塊,則不僅無法獲得交易手續費,連基本的區塊補貼也會損失。相較之下,若生成空區塊,雖然放棄了額外的手續費收入,但可以穩定地鎖定補貼。
上述段落中,我們有說明空區塊並不會對比特幣網路造成威脅。網路上有人認為空區塊就像「垃圾郵件」一般會對網路造成干擾,但這種看法並不完全正確。空區塊確實不會處理任何待處理交易,但它們也不會造成混亂。相反的,這些區塊也要通過 Proof of Work 機制,併為下個區塊增加工作量證明的強度,為之前的所有區塊提供了更高的安全性,同時維持了網路的完整性。
注:雖然空區塊並不會對網路造成威脅,但倘若有高頻率的空塊可能表示網路沒有充分發揮其潛力
三、空區塊的影響
正面碰撞
提高網路安全性:
- 空區塊雖然不含用戶交易,但仍完成了工作量證明(Proof of Work),使下個區塊的計算難度增加
- 且每個空區塊的生成都會進一步鞏固了之前所有區塊的安全性,提升了抵禦雙重支付攻擊的能力
穩定礦工收入:
- 縱使沒有交易數據,礦工仍能獲得穩定的區塊補貼,這提升了礦工持續為此網路輸出的動機
加速挖礦效率:
- 礦池在新區塊被定位後立即向礦工提供一個空白的區塊模板,可以減少挖掘下一個區塊所需的時間
維持區塊鏈的連續性:
- 即使沒有交易數據,空區塊也能確保區塊鏈的「連續性」,防止網路中斷
負面影響
降低交易處理效率:
- 空區塊內沒有交易數據,無法處理待確認的交易,導致記憶池(mempool)中的交易累積
- 倘若遇到交易量高峰時,空區塊會進一步加劇網路擁堵,影響整體交易體驗。
降低區塊鏈吞吐量:
- 每秒交易數量(TPS)因空區塊而下降,降低了比特幣作為支付系統的可能性
用戶體驗與信任問題:
- 承上所述,空區塊可能導致交易等待時間增加,給用戶帶來不便
- 用戶對比特幣網路的期望與礦工優化利潤的行為之間可能產生矛盾情結,進一步損害用戶對網路的信任(礦工可以「選擇」採取這種方式來增加收入,但這種行為可能忽視了網路整體效能的需求,進一步強化了對利潤驅動的批評)
能源消耗與資源效率問題:
- 空區塊使用的能源幾乎與包含完整交易的區塊相同,這會引發對能源利用效率的質疑
四、減少空區塊的策略
減少空區塊的策略可從「技術面」、「協議面」談起:
技術層面的解決方案
- 採用 Compact Block協議,以減少區塊傳播時的數據量,使礦工能更快接收到完整的交易數據(詳情可參閱:A. Kim、J. Kim、M. Essaid、S. Park 和 H. Ju,“比特幣網絡中緊湊塊傳播延遲的分析”, 2021年第22屆亞太網絡運營與管理研討會(APNOMS),臺灣台南,2021 年,第 17 頁。 313-318,doi:10.23919/APNOMS52696.2021.9562656。)
- 採用Erlay協議,以提升交易的傳播效率,縮短交易從記憶池廣播到礦工接收的時間
- 開發更高效的默克爾樹計算算法,縮短處理交易的時間,或讓礦工在挖掘新區塊時能快速生成含交易的默克爾樹,而不是僅使用空模板。
協議層面的改進
- 規定每個區塊至少需要包含一定數量或手續費總額的交易,否則礦工無法獲得完整區塊補貼
- 提高手續費在總獎勵中的佔比,激勵礦工處理更多交易而非挖掘空區塊
五、結論
空區塊的產生主要由礦工為了追求效率和穩定收益而產生。在區塊定位後,礦池會立即向礦工提供空白的區塊模板,即使交易數據尚未完全傳播至礦工手中。空區塊的生成並非網路故障或惡意行為,而是礦工在考量機會成本後做出的選擇。
然而,空區塊對比特幣網路也帶來了一定的挑戰,包括降低交易處理效率、減少每秒交易數量(TPS)和增加能源消耗等問題。這可能導致用戶等待時間加長。為了減少空區塊的負面影響,技術層面可以採用如 Compact Block 和 Erlay 協議來提升交易傳播效率,而協議層面則可通過設定最低交易要求或調整手續費比例來激勵礦工優先處理交易。空區塊的存在並非網路設計的缺陷,而動態平衡的一部分,通過持續優化,比特幣網路的效率和穩定性仍有進一步提升的空間。