跳至主要內容
進階

區塊結構

了解比特幣區塊的內部結構,包括區塊頭、Merkle 樹和 Coinbase 交易。

18 分鐘

區塊概覽

比特幣區塊是交易的容器,大約每 10 分鐘產生一個。 每個區塊包含兩個主要部分:區塊頭(Block Header)和交易列表(Transactions)。

┌─────────────────────────────────────┐
│           Block Header              │
│         (固定 80 bytes)              │
├─────────────────────────────────────┤
│          Transaction Count          │
│         (1-9 bytes, VarInt)         │
├─────────────────────────────────────┤
│           Transactions              │
│    ┌─────────────────────────┐      │
│    │  Coinbase Transaction   │      │
│    └─────────────────────────┘      │
│    ┌─────────────────────────┐      │
│    │    Transaction 1        │      │
│    └─────────────────────────┘      │
│    ┌─────────────────────────┐      │
│    │    Transaction 2        │      │
│    └─────────────────────────┘      │
│              ...                    │
└─────────────────────────────────────┘

區塊頭 (Block Header)

區塊頭固定為 80 bytes,包含 6 個欄位。這 80 bytes 經過雙重 SHA-256 雜湊後, 就是我們常說的「區塊雜湊」(Block Hash)。

欄位 大小 說明
version 4 bytes 區塊版本號,用於軟分叉信號
prev_block 32 bytes 前一區塊的雜湊值
merkle_root 32 bytes 所有交易的 Merkle 樹根
timestamp 4 bytes Unix 時間戳(秒)
bits 4 bytes 難度目標的壓縮表示
nonce 4 bytes 礦工用於 PoW 的隨機數

版本號 (Version)

版本號不僅表示區塊格式版本,在 BIP-9 之後還用作軟分叉的信號機制。 礦工可以在版本號的特定位元表示對提案的支持。

難度目標 (Bits)

bits 欄位是難度目標的壓縮表示,採用「指數-係數」格式。 完整的 256 位目標值從這 4 bytes 計算得出:

# bits = 0x1903a30c 為例
指數 = 0x19 = 25
係數 = 0x03a30c

目標 = 係數 × 2^(8×(指數-3))
     = 0x03a30c × 2^(8×22)
     = 0x0000000000000003a30c00000000000000000000000000000000000000000000

Merkle 樹

Merkle 樹是一種二元雜湊樹,用於高效地彙總區塊中的所有交易。 只需 32 bytes 的 Merkle 根,就能代表數千筆交易。

                    Merkle Root
                         │
            ┌────────────┴────────────┐
            │                         │
         Hash AB                   Hash CD
            │                         │
      ┌─────┴─────┐             ┌─────┴─────┐
      │           │             │           │
   Hash A      Hash B        Hash C      Hash D
      │           │             │           │
    Tx A        Tx B          Tx C        Tx D

Merkle 證明 (SPV Proof)

Merkle 樹允許輕節點驗證交易是否包含在區塊中,而無需下載完整區塊。 只需提供交易雜湊和「兄弟節點」路徑,即可重建到 Merkle 根。

優點

  • • 高效的交易存在證明
  • • 證明大小 O(log n)
  • • 適合輕錢包

限制

  • • 無法證明交易不存在
  • • 依賴節點誠實提供證明
  • • 需要區塊頭鏈驗證

Coinbase 交易

每個區塊的第一筆交易稱為 Coinbase 交易,它有特殊的結構和用途:

  • 創造新幣:這是唯一能憑空創造比特幣的交易
  • 收取手續費:區塊中所有交易的手續費歸礦工
  • 無輸入:輸入欄位為特殊的「null」輸入
  • 100 區塊成熟期:需等待 100 個確認才能花費

區塊獎勵

區塊獎勵每 210,000 個區塊(約 4 年)減半:

時期 區塊範圍 獎勵 年份
第 1 期 0 - 209,999 50 BTC 2009-2012
第 2 期 210,000 - 419,999 25 BTC 2012-2016
第 3 期 420,000 - 629,999 12.5 BTC 2016-2020
第 4 期 630,000 - 839,999 6.25 BTC 2020-2024
第 5 期 840,000 - ... 3.125 BTC 2024-2028

Coinbase 任意數據

Coinbase 交易的輸入可以包含最多 100 bytes 的任意數據。著名例子:

# 創世區塊 (Block 0) 的 Coinbase 數據
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"

# 這是中本聰留下的時間戳證明,
# 引用了當天《泰晤士報》的頭條新聞

區塊大小限制

傳統限制 (1 MB)

2010 年,中本聰加入了 1 MB 區塊大小限制,以防止垃圾交易攻擊。

SegWit 後 (4 MWU)

SegWit 引入了「區塊重量」概念,取代簡單的字節限制:

區塊重量 = (非見證數據 × 4) + (見證數據 × 1)

最大重量 = 4,000,000 weight units (4 MWU)

# 實際效果
# - 純傳統交易:最大 ~1 MB
# - 純 SegWit 交易:最大 ~2.3 MB
# - 混合交易:介於兩者之間

查看區塊信息

使用 Bitcoin Core RPC 查看區塊詳情:

# 獲取最新區塊雜湊
bitcoin-cli getbestblockhash

# 獲取區塊詳情
bitcoin-cli getblock <blockhash>

# 獲取區塊頭
bitcoin-cli getblockheader <blockhash>

# 獲取特定高度的區塊
bitcoin-cli getblockhash <height>
bitcoin-cli getblock $(bitcoin-cli getblockhash 0)  # 創世區塊

相關文檔: 查看 區塊鏈 RPC 了解更多區塊查詢命令。

已複製連結
已複製到剪貼簿