Stratumv2挖矿协议Skill stratum-v2

这个技能帮助用户理解和实施Stratum v2下一代挖矿协议,适用于BSV挖矿基础设施优化。它详细介绍了二进制帧、端到端加密和去中心化作业声明等核心特性,支持挖矿安全、效率提升和去中心化目标。关键词:Stratum v2, 挖矿协议, BSV, 加密挖矿, 二进制协议, 作业声明, 区块链挖矿

节点运维 0 次安装 0 次浏览 更新于 3/15/2026

名称: stratum-v2 描述: 当用户询问“什么是 Stratum v2”、“挖矿协议 v2”、“二进制挖矿协议”、“加密挖矿”、“作业声明协议”,或需要为 BSV 挖矿基础设施理解 Stratum v2 时,应使用此技能。

Stratum v2 挖矿协议

Stratum v2 是由 Braiins(Slush Pool)开发的下一代挖矿协议,旨在解决 Stratum v1 的局限性。它引入了二进制帧、端到端加密和去中心化作业声明。

何时使用

  • 规划挖矿基础设施升级
  • 评估从 v1 迁移到 v2
  • 理解现代挖矿安全性
  • 实施下一代矿池软件
  • 构建去中心化挖矿解决方案

与 v1 的关键改进

特性 Stratum v1 Stratum v2
格式 JSON-RPC 文本 二进制帧
带宽 ~100% 基准 ~30% 减少
加密 无(明文) Noise Protocol(AEAD)
认证 基于密码 基于密码学
作业选择 矿池控制 矿工可声明
效率 较高延迟 较低延迟

协议架构

Stratum v2 包含三个子协议:

1. 挖矿协议

矿池与矿工之间的核心工作分配。

2. 作业声明协议

允许矿工构建自己的区块模板。

3. 模板分发协议

从比特币节点分发区块模板到矿池/矿工。

二进制帧

消息结构

+------------------+------------------+------------------+
| 扩展类型         | 消息类型         | 消息长度         |
| (2 字节)         | (1 字节)         | (3 字节)         |
+------------------+------------------+------------------+
|                      负载数据                        |
|                  (可变长度)                       |
+--------------------------------------------------------+

数据类型

类型 描述 大小
U8 无符号 8 位 1 字节
U16 无符号 16 位 LE 2 字节
U24 无符号 24 位 LE 3 字节
U32 无符号 32 位 LE 4 字节
U256 256 位哈希 32 字节
STR0_255 长度前缀字符串 1 + n 字节
B0_32 长度前缀字节 1 + n 字节
B0_64K 长度前缀字节 2 + n 字节
SEQ0_64K 项目序列 2 + 项目数

通道类型

标准通道

  • 基本挖矿操作
  • 固定扩展随机数大小
  • 矿池分配难度

扩展通道

  • 支持更大扩展随机数
  • 自定义币基前缀
  • 仅头部挖矿模式

组通道

  • 聚合多个矿工
  • 代理/农场配置
  • 高效多路复用

加密(Noise Protocol)

Stratum v2 使用 Noise Protocol Framework:

  • 握手: Noise_NX_secp256k1_ChaChaPoly_SHA256
  • 密码: ChaCha20-Poly1305(AEAD)
  • 曲线: secp256k1
  • 哈希: SHA-256

连接流程

1. 客户端发起 Noise 握手
2. 服务器提供证书(由权威机构签名)
3. 加密通道建立
4. 所有后续消息加密

安全益处

  • 中间人攻击防护
  • 算力劫持预防
  • 矿池冒充预防
  • 矿工操作隐私

挖矿协议消息

设置消息

SetupConnection

{
  protocol: U32,
  min_version: U16,
  max_version: U16,
  flags: U32,
  endpoint_host: STR0_255,
  endpoint_port: U16,
  vendor: STR0_255,
  hardware_version: STR0_255,
  firmware: STR0_255,
  device_id: STR0_255
}

SetupConnection.Success

{
  used_version: U16,
  flags: U32
}

通道消息

OpenStandardMiningChannel

{
  request_id: U32,
  user_identity: STR0_255,
  nominal_hash_rate: F32,
  max_target: U256
}

OpenStandardMiningChannel.Success

{
  request_id: U32,
  channel_id: U32,
  target: U256,
  extranonce_prefix: B0_32,
  group_channel_id: U32
}

作业消息

NewMiningJob

{
  channel_id: U32,
  job_id: U32,
  future_job: BOOL,
  version: U32,
  version_rolling_allowed: BOOL
}

SetNewPrevHash

{
  channel_id: U32,
  job_id: U32,
  prev_hash: U256,
  min_ntime: U32,
  nbits: U32
}

份额提交

SubmitSharesStandard

{
  channel_id: U32,
  sequence_number: U32,
  job_id: U32,
  nonce: U32,
  ntime: U32,
  version: U32
}

SubmitShares.Success

{
  channel_id: U32,
  last_sequence_number: U32,
  new_submits_accepted_count: U32,
  new_shares_sum: U64
}

作业声明协议

允许矿工选择交易构建区块:

流程

  1. 矿工连接到模板分发节点
  2. 矿工接收包含交易的区块模板
  3. 矿工向矿池声明自定义作业
  4. 矿池验证并接受声明
  5. 矿工处理自构建区块

消息

DeclareMiningJob

{
  request_id: U32,
  mining_job_token: B0_255,
  version: U32,
  coinbase_prefix: B0_64K,
  coinbase_suffix: B0_64K,
  tx_short_hash_nonce: U64,
  tx_short_hash_list: SEQ0_64K[U64],
  tx_hash_list_hash: U256,
  excess_data: B0_64K
}

益处

  • 去中心化交易选择
  • 减少矿池审查风险
  • 提高比特币去中心化
  • 矿工控制区块内容

模板分发协议

从比特币节点分发模板到矿池/矿工:

NewTemplate

{
  template_id: U64,
  future_template: BOOL,
  version: U32,
  coinbase_tx_version: U32,
  coinbase_prefix: B0_64K,
  coinbase_tx_input_sequence: U32,
  coinbase_tx_value_remaining: U64,
  coinbase_tx_outputs_count: U32,
  coinbase_tx_outputs: B0_64K,
  coinbase_tx_locktime: U32,
  merkle_path: SEQ0_255[U256]
}

比较:v1 与 v2 会话

Stratum v1 会话

客户端: {"method":"mining.subscribe","params":["Agent/1.0"],"id":1}
服务器: {"result":[[["mining.set_difficulty","1"],["mining.notify","1"]],"08000000",4],"id":1}
客户端: {"method":"mining.authorize","params":["user.worker",""],"id":2}
服务器: {"result":true,"id":2}
服务器: {"method":"mining.set_difficulty","params":[1024]}
服务器: {"method":"mining.notify","params":["job1","prev...","cb1","cb2",[],"ver","bits","time",true]}
客户端: {"method":"mining.submit","params":["user.worker","job1","00000000","time","nonce"],"id":3}
服务器: {"result":true,"id":3}

Stratum v2 会话

1. Noise 握手(加密通道建立)
2. SetupConnection → SetupConnection.Success
3. OpenStandardMiningChannel → OpenStandardMiningChannel.Success
4. SetTarget(难度)
5. NewMiningJob + SetNewPrevHash(作业分配)
6. SubmitSharesStandard → SubmitShares.Success

迁移考虑

何时迁移

  • 安全性优先(需要 MITM 防护)
  • 带宽成本显著
  • 去中心化目标
  • 现代基础设施刷新

何时留在 v1

  • 旧硬件兼容性
  • 现有稳定基础设施
  • 简单矿池操作
  • 无安全担忧

混合方法

许多矿池同时运行:

  • v1 在端口 3333(旧版兼容)
  • v2 在端口 3334(现代矿工) 翻译代理可以将 v1 矿工桥接到 v2 矿池。

BSV 考虑

当前状态

  • BSV 矿池主要使用 Stratum v1
  • GorillaPool 使用优化 v1 实现
  • v2 采用取决于 ASIC 固件支持

BSV 特定特性

  • 大区块模板(交易选择重要)
  • getminingcandidate RPC(BSV 特定)
  • submitminingsolution RPC(BSV 特定)
  • 更高交易吞吐量

实施路径

  1. 从 Stratum v1 开始(成熟、兼容)
  2. 当 ASIC 生态系统准备好时添加 v2 支持
  3. 过渡期保持两者

参考实现

Stratum 参考实现(SRI):

组件:

  • roles/pool - 矿池角色
  • roles/mining-proxy - 代理/翻译器
  • roles/jd-client - 作业声明客户端
  • roles/jd-server - 作业声明服务器

资源

实施状态

组件 可用性
协议规范 完整
参考实现 生产
矿池支持 增长中
ASIC 固件 有限
BSV 支持 未来

快速参考

Stratum v2 端口(典型):

  • 3334 - 挖矿协议(加密)
  • 8442 - 模板分发
  • 8443 - 作业声明

关键 Crate(Rust):

[dependencies]
binary_sv2 = "1.0"
codec_sv2 = "1.0"
framing_sv2 = "1.0"
noise_sv2 = "1.0"