Stratum 挖矿协议

Stratum 挖矿协议是一组用于在矿工、代理和矿池基础设施之间交换挖矿任务与工作量证明结果的协议。原始协议现称 Stratum V1(SV1);Stratum V2(SV2)是另行规范的后继协议,消息格式和安全模型均不同。[1]
Stratum V1
Stratum V1 于2012年推出,随后被比特币矿机和矿池广泛实现。它以持续的 TCP 连接取代反复的 getwork 轮询,矿池可通过连接推送新任务。[1][2] V1 通常采用换行分隔的类 JSON-RPC 消息。最初的挖矿接口没有得到完整标准化,因此形成了不同方言和扩展。[3]
核心消息流程
典型 V1 会话使用下列消息;确切参数和可选行为会因实现而异。[4]
| 方向 | 方法 | 用途 |
|---|---|---|
| 矿工 → 服务器 | mining.subscribe |
启动或恢复会话。响应一般提供订阅标识符、extranonce1 和 extranonce2 大小。
|
| 矿工 → 服务器 | mining.authorize |
将工作器名称以及在使用时的密码与连接关联。 |
| 服务器 → 矿工 | mining.set_difficulty |
设置提交份额的目标难度,后续任务应用新难度。 |
| 服务器 → 矿工 | mining.notify |
发送任务标识符、前一区块哈希、coinbase 部分、Merkle 分支、版本、目标编码、时间和是否丢弃旧任务的标志。 |
| 矿工 → 服务器 | mining.submit |
提交工作器、任务、extranonce2、时间和 nonce,供服务器接受或拒绝。
|
常见可选消息有 client.reconnect、client.show_message 和 mining.set_extranonce。BIP 310 定义 mining.configure,用于协商版本滚动、最低难度和 extranonce 订阅。[5]较早的 mining.capabilities 等草案不属于该协商机制,不能假定获得支持。
局限
基础 V1 协议以明文传输挖矿流量。2017年的研究表明,被动观察者可推测算力和收入,能够截取连接的攻击者还可修改消息。[4]矿池另行部署 TLS 隧道可能改变风险,但这不是基础 V1 的属性。
V1 通常由矿池构建任务并选择交易。支付核算、钱包、数据库和日志轮换属于矿池软件功能,不属于协议。
Stratum V2
Stratum V2 使用精确定义的二进制消息。其规范定义通道、原生版本滚动、连接聚合,以及矿机、代理、矿池、任务声明器和模板提供者等角色。[3][6]
该套件包含三个子协议:[6]
- 必需的 Mining Protocol,用于分发任务和提交份额;
- 可选的 Job Declaration Protocol,让矿工端提出选定的交易集合;以及
- Template Distribution Protocol,用于从比特币节点传递区块模板数据。
任务声明是可选的。矿池可以只用 V2 分发自己选择的任务;采用任务声明时,矿工端可构建模板并请求矿池接受。[6]这会改变交易选择责任,但不定义支付,也不能消除对矿池账目的信任。
V2 以认证加密保护远程连接。规范采用 AEAD 和基于 Noise 的握手;远程上游连接必须使用安全握手,本地设备与代理之间则可选。[7]
兼容性与实现
转换代理可以接受现有矿机的 V1 连接,并对上游使用 V2。它只提供协议桥接,不会使下游设备成为原生 V2 实现。具体扩展和子协议支持应分别核对矿机、代理和矿池。
参见
外部链接
- ↑ 1.0 1.1 Stratum V2 项目,“Open Bitcoin mining standard”,查阅于2026年9月14日。
- ↑ Bitcoin Wiki,“Stratum mining protocol”,查阅于2026年9月14日。
- ↑ 3.0 3.1 Stratum V2 规范,“Design Goals”,查阅于2026年9月14日。
- ↑ 4.0 4.1 Maria Apostolaki 等,“Hardening Stratum, the Bitcoin Pool Mining Protocol”,Proceedings on Privacy Enhancing Technologies,2017。
- ↑ BIP 310,“Stratum protocol extensions”,查阅于2026年9月14日。
- ↑ 6.0 6.1 6.2 Stratum V2 规范,“Protocol Overview”,查阅于2026年9月14日。
- ↑ Stratum V2 规范,“Protocol Security”,查阅于2026年9月14日。