挖礦 入門
挖礦
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 兆倍
區塊獎勵
減半歷史
| 減半 | 區塊高度 | 日期 | 獎勵 |
|---|---|---|---|
| 創世 | 0 | 2009-01-03 | 50 BTC |
| 第一次 | 210,000 | 2012-11-28 | 25 BTC |
| 第二次 | 420,000 | 2016-07-09 | 12.5 BTC |
| 第三次 | 630,000 | 2020-05-11 | 6.25 BTC |
| 第四次 | 840,000 | 2024-04-20 | 3.125 BTC |
| 第五次 | 1,050,000 | ~2028 | 1.5625 BTC |
獎勵組成
礦工收入 = 區塊獎勵 + 交易手續費
目前(2024):
區塊獎勵:3.125 BTC(約 $200k)
手續費:0.1-1+ BTC(依網路擁堵)
未來趨勢:
- 區塊獎勵持續減半
- 手續費佔比逐漸增加
- 約 2140 年獎勵歸零
挖礦硬體演進
發展歷程
| 時期 | 硬體 | 效率(H/J) | 特點 |
|---|---|---|---|
| 2009-2010 | CPU | ~0.01 MH/J | 任何電腦可參與 |
| 2010-2013 | GPU | ~1 MH/J | 顯卡並行計算 |
| 2011-2013 | FPGA | ~10 MH/J | 可編程硬體 |
| 2013-今 | ASIC | ~100+ TH/J | 專用晶片 |
現代 ASIC 礦機
| 型號 | 算力 | 功耗 | 效率 |
|---|---|---|---|
| Antminer S21 | 200 TH/s | 3500W | 17.5 J/TH |
| Whatsminer M60 | 186 TH/s | 3422W | 18.4 J/TH |
| Avalon A1466 | 150 TH/s | 3400W | 22.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 分配 | 礦工承擔波動 |
| FPPS | PPS + 手續費分配 | 礦池承擔,收益最穩 |
主要礦池(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:去中心化改進