跳至主要內容
挖礦 入門

挖礦

Mining

又稱:採礦、比特幣挖礦

挖礦是比特幣網路的核心機制,礦工透過消耗計算資源(電力和硬體)來競爭創建新區塊。成功的礦工不僅獲得區塊獎勵和交易手續費,更重要的是為整個網路提供安全保障。

挖礦的本質

挖礦本質上是一場找數字的競賽

目標:找到一個數字(Nonce),使得:
SHA256(SHA256(區塊頭)) < 目標值(Target)

區塊頭包含:
- 版本號(4 bytes)
- 前一區塊雜湊(32 bytes)
- Merkle 根(32 bytes)
- 時間戳(4 bytes)
- 難度目標(4 bytes)
- Nonce(4 bytes)

過程:
1. 組裝區塊頭
2. 嘗試 Nonce = 0, 1, 2, 3...
3. 計算雙重 SHA-256
4. 檢查結果是否小於目標
5. 找到有效值 → 廣播區塊
   找不到 → 修改其他參數,繼續嘗試

挖礦過程詳解

步驟一:收集交易

礦工從記憶池(mempool)選擇交易:

選擇標準:
1. 手續費率(sat/vB)高優先
2. 區塊大小限制(~4 MW)
3. 交易有效性驗證
4. 避免雙花交易

實際操作:
- 按費率排序
- 貪婪演算法填充區塊
- 預留 coinbase 交易空間

步驟二:構建區塊

Coinbase 交易(區塊第一筆):
- 無輸入(prev_txid = 0x00...00)
- 輸出 = 區塊獎勵 + 手續費總和
- 可包含最多 100 bytes 任意資料

區塊結構:
[區塊頭]
[交易數量]
[Coinbase 交易]
[交易1]
[交易2]
...

步驟三:計算 Merkle 根

所有交易的 TXID 構建 Merkle Tree:

        Merkle Root
           /    \
        H(AB)   H(CD)
        /  \    /  \
       A    B  C    D
      (coinbase)(tx1)(tx2)(tx3)

任何交易變動 → Merkle 根變動 → 需要重新挖

步驟四:挖礦循環

while True:
    for nonce in range(0, 2**32):
        header = version + prev_hash + merkle_root + timestamp + bits + nonce
        hash_result = sha256(sha256(header))

        if hash_result < target:
            broadcast_block()
            return

    # Nonce 用盡,修改其他參數
    update_timestamp()
    # 或修改 coinbase 的 extraNonce
    update_merkle_root()

難度調整機制

目標:平均 10 分鐘一個區塊

調整週期:每 2016 個區塊(約 2 週)

調整公式:
新難度 = 舊難度 × (實際時間 / 目標時間)
新難度 = 舊難度 × (actual_time / 20160 分鐘)

限制:
- 最多調整 4 倍(防止極端波動)
- 向下調整也受限

難度與目標值

難度(Difficulty):
- 相對於創世區塊的倍數
- 難度 1 = 最容易的目標

目標值(Target):
- 256 位元數字
- 雜湊必須小於此值
- 難度越高 → 目標越小 → 越難找到

當前難度(2024):約 80+ T
意味著:比最初難 80 兆倍

區塊獎勵

減半歷史

減半區塊高度日期獎勵
創世02009-01-0350 BTC
第一次210,0002012-11-2825 BTC
第二次420,0002016-07-0912.5 BTC
第三次630,0002020-05-116.25 BTC
第四次840,0002024-04-203.125 BTC
第五次1,050,000~20281.5625 BTC

獎勵組成

礦工收入 = 區塊獎勵 + 交易手續費

目前(2024):
區塊獎勵:3.125 BTC(約 $200k)
手續費:0.1-1+ BTC(依網路擁堵)

未來趨勢:
- 區塊獎勵持續減半
- 手續費佔比逐漸增加
- 約 2140 年獎勵歸零

挖礦硬體演進

發展歷程

時期硬體效率(H/J)特點
2009-2010CPU~0.01 MH/J任何電腦可參與
2010-2013GPU~1 MH/J顯卡並行計算
2011-2013FPGA~10 MH/J可編程硬體
2013-今ASIC~100+ TH/J專用晶片

現代 ASIC 礦機

型號算力功耗效率
Antminer S21200 TH/s3500W17.5 J/TH
Whatsminer M60186 TH/s3422W18.4 J/TH
Avalon A1466150 TH/s3400W22.7 J/TH
效率計算:
J/TH = 焦耳每兆雜湊
數字越小 = 效率越高
最新礦機:~17-20 J/TH

礦池

為什麼需要礦池?

個人挖礦的問題:

假設你有 100 TH/s 算力:
全網算力:~500 EH/s
你的佔比:100 TH / 500 EH = 0.00002%
平均出塊時間:500,000 ÷ 0.00002 = 25 億分鐘 ≈ 4750 年

結論:個人挖礦收益極不穩定

礦池運作原理

礦池架構:

       礦池伺服器
      /    |    \
   礦工A  礦工B  礦工C

1. 礦池分配「簡單任務」給礦工
2. 礦工提交「shares」(低難度證明)
3. 礦池記錄每人貢獻
4. 有人找到有效區塊時
5. 按貢獻比例分配獎勵

分配方式

方式說明風險
PPS按 share 立即支付礦池承擔波動
PPLNS按最近 N shares 分配礦工承擔波動
FPPSPPS + 手續費分配礦池承擔,收益最穩

主要礦池(2024)

礦池市佔率特點
Foundry USA~30%北美最大
AntPool~20%Bitmain 運營
F2Pool~15%老牌礦池
ViaBTC~10%支援多幣種
Binance Pool~8%交易所礦池

挖礦經濟學

成本結構

挖礦成本 = 硬體成本 + 電費 + 運營成本

硬體成本:
- ASIC 礦機:$2,000-10,000
- 使用壽命:2-4 年
- 折舊:每月攤提

電費:
- 最大成本項目
- 工業電價:$0.03-0.08/kWh
- 住宅電價:$0.10-0.30/kWh

運營成本:
- 場地租金
- 冷卻系統
- 維護人員

盈虧平衡

計算公式:

日收入 = (你的算力 / 全網算力) × 日產出 BTC × BTC 價格
日成本 = 功耗(kW) × 24 × 電價

盈虧平衡電價 = 日收入 / (功耗 × 24)

範例(S21 礦機):
算力:200 TH/s
功耗:3.5 kW
假設 BTC = $60,000

日收入 ≈ 0.00025 BTC ≈ $15
盈虧平衡電價 ≈ $15 / (3.5 × 24) ≈ $0.18/kWh

挖礦的環境影響

能源消耗

比特幣網路年耗電量(2024 估計):
~150-200 TWh/年

對比:
- 相當於一個中型國家
- 全球黃金開採的 ~50%
- 全球銀行系統的 ~25%

可再生能源

趨勢:
- 礦工傾向低電價地區
- 水電、風電、太陽能
- 廢棄天然氣發電
- 能源套利

估計可再生能源佔比:~50-60%

挖礦攻擊

51% 攻擊

如果攻擊者控制 >50% 算力:

可以做:
- 雙花自己的交易
- 阻止某些交易確認
- 空塊攻擊

不能做:
- 偷取他人的幣
- 改變共識規則
- 創造無中生有的幣

現實:
- 成本極高(數十億美元硬體 + 電力)
- 攻擊後 BTC 價格崩跌
- 經濟上不理性

自私挖礦

策略:
1. 找到區塊後不立即廣播
2. 繼續私下挖掘
3. 在適當時機釋出
4. 浪費誠實礦工的算力

防禦:
- 需要 >33% 算力才有優勢
- 協議改進(如時間戳檢查)
- 礦池監控

開發者資源

Bitcoin Core 相關

# 獲取挖礦資訊
bitcoin-cli getmininginfo

# 獲取區塊模板
bitcoin-cli getblocktemplate '{"rules": ["segwit"]}'

# 提交新區塊
bitcoin-cli submitblock <hexdata>

Stratum 協議

礦機與礦池通訊協議:

mining.subscribe    # 訂閱任務
mining.authorize    # 認證
mining.notify       # 新任務通知
mining.submit       # 提交 share

Stratum V2 改進:
- 更好的加密
- 礦工可選擇交易
- 減少頻寬使用

未來展望

挑戰

  • 中心化風險:礦池集中
  • 能源批評:環境議題
  • 獎勵遞減:經濟模型轉變

機遇

  • Layer 2 手續費:閃電網路結算
  • 新興市場:發展中國家低電價
  • 能源創新:廢棄能源利用
  • Stratum V2:去中心化改進
已複製到剪貼簿