進階
Stratum V2
了解下一代挖礦協議 Stratum V2 的架構、安全性改進和去中心化特性。
12 分鐘
Stratum V2 是下一代比特幣挖礦協議,相比 Stratum V1 提供了加密通訊、 更高效率和更好的去中心化特性。它允許礦工自行選擇交易,減少礦池對區塊內容的控制。
Stratum V1 的問題
2012 年發布的 Stratum V1 存在多個問題:
- 無加密:通訊以明文傳輸,易受中間人攻擊
- 中心化:礦池完全控制區塊模板(交易選擇)
- 效率低:JSON 格式開銷大,頻寬浪費
- hash 劫持:可能被截獲並重定向到其他礦池
// Stratum V1 訊息示例(明文 JSON)
{"id": 1, "method": "mining.subscribe", "params": []}
{"id": 2, "method": "mining.authorize", "params": ["worker", "pass"]}
{"method": "mining.notify", "params": ["job_id", "prevhash", ...]}
問題:
- ISP 可以看到所有挖礦數據
- 可以注入惡意訊息
- JSON 解析開銷大 Stratum V2 架構
協議組成
Stratum V2 由多個子協議組成:
1. Mining Protocol
└── 礦機 ↔ 礦池通訊
2. Job Declaration Protocol
└── 礦工聲明自己的區塊模板
3. Template Distribution Protocol
└── 獲取區塊模板(從 Bitcoin Core)
4. Job Distribution Protocol
└── 代理分發工作給多個礦機 加密通訊
Stratum V2 使用 Noise Protocol Framework 提供端到端加密:
// Noise_NX 握手模式
Initiator (礦工) Responder (礦池)
| |
|-----> e ---------------------->| // 發送臨時公鑰
|<----- e, ee, s, es -----------| // 返回臨時公鑰 + 靜態公鑰
| |
|====== 加密通道建立 ============|
特性:
- 前向保密 (Forward Secrecy)
- 服務器身份驗證
- 防止中間人攻擊 二進制協議
相比 JSON,二進制格式大幅減少頻寬使用:
// 訊息格式
+-------------------+------------------+
| Extension Type | 2 bytes |
| Message Type | 1 byte |
| Message Length | 3 bytes |
| Payload | variable |
+-------------------+------------------+
// 數據類型
U8, U16, U32, U64 - 無符號整數
B0_255, B0_64K - 可變長度字節
STR0_255 - 可變長度字符串
PUBKEY - 32 bytes 公鑰
頻寬節省: ~50% 相比 Stratum V1 Job Declaration
最重要的改進是允許礦工選擇交易:
傳統模式 (V1):
礦池 → 選擇交易 → 創建區塊模板 → 發送給礦工
礦工只能接受礦池的選擇
Job Declaration 模式 (V2):
礦工 → 連接 Bitcoin Core → 選擇交易
礦工 → 向礦池聲明區塊模板
礦池 → 驗證並接受(或拒絕)
礦工 → 使用自己選擇的交易挖礦
去中心化優勢:
- 礦工可以運行自己的節點
- 礦池無法審查交易
- 分散區塊構建權力 部署配置
基本配置(無 Job Declaration)
┌─────────┐ SV2 Mining ┌─────────┐
│ Miner │ ←------------------→ │ Pool │
└─────────┘ Protocol └─────────┘
礦工使用礦池提供的區塊模板
仍有加密和效率優勢 完整配置(含 Job Declaration)
┌──────────────┐
│ Bitcoin Core │
└──────┬───────┘
│ Template Distribution
▼
┌─────────┐ SV2 ┌─────────┐ Job Declaration ┌─────────┐
│ Miner │ ←-------→ │ Proxy │ ←------------------→ │ Pool │
└─────────┘ Mining └─────────┘ └─────────┘
Protocol
Proxy 運行在礦工側:
- 從 Bitcoin Core 獲取區塊模板
- 向礦池聲明 Job
- 轉發礦機的 shares 與 Bitcoin Core 集成
# bitcoin.conf 配置
sv2=1
sv2port=8442
sv2bind=0.0.0.0
# 或使用獨立的 Template Provider
# https://github.com/stratum-mining/stratum
# Template Distribution Protocol 端口
# 默認: 8442 協議訊息類型
Mining Protocol 訊息
| 訊息 | 方向 | 說明 |
|---|---|---|
| SetupConnection | Client → Server | 初始化連接 |
| OpenChannel | Client → Server | 打開挖礦通道 |
| NewMiningJob | Server → Client | 新的挖礦工作 |
| SubmitShares | Client → Server | 提交工作量證明 |
| SetNewPrevHash | Server → Client | 新區塊通知 |
安全考慮
- 憑證驗證:礦池應提供簽名憑證供礦工驗證
- 噪音協議:使用經過審計的 Noise 實現
- Job 驗證:礦池會驗證礦工聲明的區塊模板有效性
- DoS 保護:限制連接數和訊息速率
採用狀態
Stratum V2 正在逐步被採用:
- 礦池:Braiins Pool、DEMAND 等已支持
- 礦機固件:Braiins OS+ 原生支持
- 代理軟件:stratum-mining/stratum 參考實現
- Bitcoin Core:SV2 模板提供者整合中
參考資源
已複製連結