跳至主要內容
進階

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 模板提供者整合中

參考資源

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