跳至主要內容

Stratum V2:礦池協議的去中心化革命

5 分鐘閱讀
Stratum V2:礦池協議的去中心化革命

前言

比特幣挖礦的中心化問題一直是社區關注的焦點。目前大多數算力通過少數幾個大型礦池控制,這些礦池決定區塊內容,礦工只是提供算力。Stratum V2 是一個革命性的協議升級,旨在將區塊構建的權力歸還給礦工。


一、Stratum 協議背景

什麼是 Stratum?

Stratum 是礦工和礦池之間的通訊協議:

1
2
3
4
5
6
礦工 ←──Stratum──→ 礦池

作用:
1. 礦池發送工作(區塊模板)
2. 礦工提交份額(shares)
3. 礦池驗證並支付

Stratum V1 的問題

2012 年由 Slush Pool 創建的 Stratum V1 存在嚴重缺陷:

問題 說明 影響
明文傳輸 無加密 可被監聽/劫持
無認證 無法驗證礦池身份 中間人攻擊
集中控制 礦池決定交易 審查風險
效率低 JSON 格式臃腫 帶寬浪費
無標準 各礦池自行擴展 互操作性差

為什麼需要改變?

1
2
3
4
5
6
7
8
9
10
當前挖礦中心化問題:

前 4 大礦池控制 > 50% 算力
        │
        ↓
礦池可以:
  - 審查特定交易
  - 實施空區塊攻擊
  - 被政府施壓
  - 協調 51% 攻擊

二、Stratum V2 概述

核心目標

  1. 去中心化 - 礦工選擇交易
  2. 安全性 - 加密通訊
  3. 效率 - 二進制協議
  4. 標準化 - 開放規範

關鍵創新

1
2
3
4
5
6
Stratum V1             Stratum V2
─────────              ─────────
JSON 明文    →    二進制加密
礦池選交易   →    礦工選交易
無認證       →    Noise 協議認證
單一連接     →    多通道

三個子協議

子協議 功能 必需
Mining Protocol 核心挖礦通訊
Job Declaration 工作聲明(礦工選交易)
Template Distribution 模板分發

三、技術架構

協議層次

1
2
3
4
5
6
7
8
9
10
11
12
┌─────────────────────────────────────────┐
│           Application Layer              │
│    (Mining, Job Declaration, Template)   │
├─────────────────────────────────────────┤
│           Framing Layer                  │
│    (消息分幀和序列化)                     │
├─────────────────────────────────────────┤
│           Noise Protocol                 │
│    (加密和認證)                          │
├─────────────────────────────────────────┤
│           TCP/IP                         │
└─────────────────────────────────────────┘

Noise 協議加密

Stratum V2 使用 Noise Protocol Framework:

1
2
3
4
5
6
7
8
9
10
11
握手模式:Noise_NX_secp256k1_ChaChaPoly_SHA256

特性:
- 前向保密
- 身份認證
- 防止中間人攻擊

握手流程:
1. 礦工 → 礦池:臨時公鑰
2. 礦池 → 礦工:臨時公鑰 + 靜態公鑰 + 簽名
3. 建立加密通道

消息格式

V1(JSON):

1
2
3
4
5
{
  "id": 1,
  "method": "mining.submit",
  "params": ["worker", "job_id", "extranonce2", "ntime", "nonce"]
}

V2(二進制):

1
2
3
4
5
6
7
8
9
┌──────┬──────┬──────────────────┐
│ Type │ Size │ Payload          │
│ 2B   │ 3B   │ Variable         │
└──────┴──────┴──────────────────┘

優勢:
- 減少 ~50% 帶寬
- 解析更快
- 無歧義

四、工作選擇(Job Declaration)

核心概念

Job Declaration 協議允許礦工選擇區塊內的交易:

1
2
3
4
5
6
7
8
9
傳統模式(V1):
礦池 → 完整區塊模板 → 礦工
       ↓
       礦工只能接受或斷開

新模式(V2 + Job Declaration):
礦工 → 本地構建區塊模板 → 提交給礦池驗證
       ↓
       礦工控制交易選擇

技術流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────┐         ┌─────────────┐
│   礦工       │         │    礦池     │
└──────┬──────┘         └──────┬──────┘
       │                        │
       │  1. 聲明自定義工作      │
       │ ───────────────────→  │
       │    (merkle root)       │
       │                        │
       │  2. 驗證基本有效性      │
       │ ←─────────────────── │
       │    (接受/拒絕)         │
       │                        │
       │  3. 提交份額           │
       │ ───────────────────→  │
       │                        │

驗證規則

礦池仍然可以執行基本驗證:

1
2
3
4
5
6
7
8
9
10
礦池驗證內容:
✅ 區塊頭格式正確
✅ 難度目標正確
✅ 時間戳合理
✅ coinbase 輸出正確

礦池不關心:
❌ 具體包含哪些交易
❌ 交易順序
❌ 費用最優化

防止惡意行為

1
2
3
4
5
6
7
8
9
如果礦工提交無效區塊:

1. 礦池不會廣播無效區塊
2. 礦工浪費自己的算力
3. 經濟激勵保持誠實

結果:
- 礦工有動力構建有效區塊
- 但可以選擇自己的交易優先順序

五、實際部署架構

場景一:簡單升級

1
2
3
4
5
6
7
8
9
┌──────────────┐      ┌──────────────┐
│  ASIC 礦機   │ ──→  │  SV2 Proxy   │ ──→ 礦池
│  (Stratum V1) │      │  (翻譯層)    │     (SV2)
└──────────────┘      └──────────────┘

優點:
- 不需要更換礦機
- 立即獲得加密好處
- 漸進式升級

場景二:完整部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──────────────┐
│  ASIC 礦機   │
│  (原生 SV2)  │
└──────┬───────┘
       │ 加密連接
       ↓
┌──────────────┐      ┌──────────────┐
│ Job          │ ──→  │   礦池       │
│ Declarator   │      │   (SV2)      │
└──────────────┘      └──────────────┘
       │
       ↓
┌──────────────┐
│ Bitcoin Core │
│ (模板來源)   │
└──────────────┘

優點:
- 完整的工作選擇能力
- 最大化去中心化

場景三:獨立挖礦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──────────────┐
│  ASIC 礦機   │
│  (原生 SV2)  │
└──────┬───────┘
       │
       ↓
┌──────────────┐      ┌──────────────┐
│ Template     │ ←──  │ Bitcoin Core │
│ Provider     │      │ (節點)       │
└──────┬───────┘      └──────────────┘
       │
       ↓
   直接提交區塊

適用:
- 大型礦場
- 追求完全自主
- 足夠算力保證收益

六、與礦池的關係

礦池的新角色

1
2
3
4
5
6
7
8
9
10
11
12
傳統礦池職責:
1. 構建區塊模板
2. 分發工作
3. 驗證份額
4. 支付礦工

Stratum V2 後:
1. (可選)構建區塊模板
2. 分發工作/接受礦工工作
3. 驗證份額
4. 支付礦工
5. 提供保險性收入平滑

礦池適應策略

策略 說明 例子
完全支援 允許礦工選擇交易 Braiins Pool
部分支援 加密通訊但不支援 JD 待定
抵制 繼續使用 V1 部分中國礦池

經濟激勵

1
2
3
4
5
6
7
8
9
10
11
12
為什麼礦池會支援?

1. 競爭壓力
   - 如果其他礦池支援,不支援會失去礦工

2. 減少責任
   - 不再為區塊內容負責
   - 降低監管風險

3. 效率提升
   - 二進制協議節省資源
   - 加密防止算力劫持

七、安全性分析

防止的攻擊

1. 算力劫持

1
2
3
4
5
6
7
V1 風險:
攻擊者 ──監聽──→ 礦工連接 ──替換──→ 發送假工作
                                    ↓
                              算力被盜用

V2 解決:
加密通道 → 無法監聽或篡改

2. 中間人攻擊

1
2
3
4
5
6
7
V1 風險:
礦工 ←──?──→ 攻擊者 ←──?──→ 真實礦池

V2 解決:
- Noise 協議認證
- 礦池公鑰驗證
- 無法偽造身份

3. 選擇性審查

1
2
3
4
5
V1 風險:
礦池決定區塊內容 → 可排除特定交易

V2 + Job Declaration:
礦工決定區塊內容 → 審查需要全網礦工配合

殘餘風險

風險 說明 緩解
礦池拒絕工作 礦池可以拒絕特定交易 礦工可以換礦池
51% 攻擊 仍然可能 不是協議層問題
礦工合謀 礦工可能串通 經濟激勵對抗

八、實現狀態

核心開發

Stratum Reference Implementation (SRI):

1
2
3
4
5
6
7
8
9
# 安裝 SRI
git clone https://github.com/stratum-mining/stratum
cd stratum
cargo build --release

# 運行翻譯代理
./target/release/translator_proxy \
  --upstream-address pool.example.com:3333 \
  --downstream-port 3334

礦池支援

礦池 狀態 備註
Braiins Pool ✅ 生產環境 首個支援
DEMAND ✅ 支援 完整 JD
Ocean ✅ 支援 Luke Dashjr 項目
Foundry 🚧 測試中 計劃支援
F2Pool 🚧 評估中 待定

硬體支援

製造商 狀態
Bitmain 🚧 討論中
MicroBT 🚧 討論中
Intel (Blockscale) ✅ 原生支援

軟體生態

  • SRI Proxy - 翻譯代理(V1 → V2)
  • BraiinsOS - 支援 SV2 的礦機固件
  • Bitcoin Core - 模板提供整合(進行中)

九、對比特幣的意義

網路安全影響

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
當前狀況:
4 個礦池 > 50% 算力
        │
        ↓
理論上可以協調審查

Stratum V2 後:
4 個礦池 > 50% 算力
        │
        但是
        ↓
每個礦工獨立選擇交易
        │
        ↓
審查需要協調所有礦工(不可能)

去中心化指標

指標 V1 V2 + JD
區塊構建者 ~10 礦池 ~100,000+ 礦工
審查門檻 協調 4 礦池 協調大多數礦工
交易包含決定 中心化 去中心化

與比特幣精神一致

1
2
3
4
5
6
7
8
中本聰的願景:
"一 CPU 一票"

現實:
"一礦池一票"

Stratum V2:
"回歸一礦工一票(在區塊構建上)"

十、挑戰與展望

採用挑戰

1. 硬體升級

1
2
3
問題:現有 ASIC 不支援原生 SV2
解決:翻譯代理允許漸進升級
時間線:3-5 年完全過渡

2. 礦池激勵

1
2
問題:礦池失去控制權
解決:效率提升 + 競爭壓力

3. 教育和意識

1
2
問題:礦工不了解好處
解決:社區教育 + 實際演示

未來發展

  1. Bitcoin Core 整合
    • 內建模板分發
    • 簡化獨立挖礦
  2. 更多硬體支援
    • 主要 ASIC 製造商
    • 原生 SV2 芯片
  3. 新功能
    • 更好的份額驗證
    • 跨池失效轉移

路線圖

1
2
3
4
5
6
7
8
9
10
11
2023-2024:
  - SRI 穩定版本
  - 主要礦池測試

2024-2025:
  - 硬體製造商整合
  - 更多礦池生產部署

2025+:
  - 原生 SV2 礦機普及
  - Job Declaration 廣泛使用

開發者指南

設置翻譯代理

1
2
3
4
5
6
7
8
9
10
# 配置文件 proxy-config.toml
[upstream]
address = "pool.example.com:3333"
authority_pubkey = "abc123..."

[downstream]
listen_address = "0.0.0.0:3334"

# 啟動代理
./sv2-translator-proxy --config proxy-config.toml

實現自定義 Job Declarator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use stratum_v2::job_declaration::*;

async fn declare_job(
    template: BlockTemplate,
    declarator: &JobDeclarator
) -> Result<JobId, Error> {
    // 從 Bitcoin Core 獲取交易
    let transactions = get_mempool_transactions().await?;

    // 構建 merkle tree
    let merkle_root = build_merkle_root(&transactions);

    // 聲明工作
    let job = declarator.declare_mining_job(
        merkle_root,
        template.version,
        template.prev_block_hash,
    ).await?;

    Ok(job.id)
}

監控和調試

1
2
3
4
5
6
7
8
9
# 查看連接狀態
sv2-cli status

# 輸出示例
Connection: Encrypted (Noise_NX)
Pool: pool.example.com
Upstream Version: SV2
Jobs Declared: 1,234
Shares Submitted: 56,789

結論

Stratum V2 代表了比特幣挖礦基礎設施的重大進步:

  1. 安全性提升 - 加密通訊防止劫持和監聽
  2. 效率改進 - 二進制協議減少帶寬和延遲
  3. 去中心化 - 礦工選擇交易,分散區塊構建權力
  4. 標準化 - 開放協議促進生態系統發展

對於比特幣的長期安全,Stratum V2 的 Job Declaration 功能尤為重要。它將區塊構建的權力從少數礦池分散到成千上萬的獨立礦工,使得審查攻擊變得極其困難。

行動建議:

  • ✅ 礦工:聯繫礦池詢問 SV2 支援
  • ✅ 礦池:開始 SV2 整合測試
  • ✅ 開發者:參與 SRI 開發
  • ✅ 社區:推廣 SV2 意識

參考資料

// 分享

CP

Cypherpunks Taiwan

密碼學使自由和隱私再次偉大。Cryptography makes freedom and privacy great again.

// 留言