93 / 736SV1

Stratum V1

矿机怎样与矿池沟通

Stratum V1 是矿机与矿池共用的沟通语言:它传递任务、回传结果,让矿池能够衡量矿工的工作贡献。Marek Palatinus(网名 Slush)于 2012 年提出了它。

Stratum V1 是用于 Bitcoin 联合挖矿的通信协议。矿池通过保持开启的连接不断发送任务,矿机返回计算结果。协议本身既不规定报酬金额,也不决定 Bitcoin 区块的有效性规则。

Eva 接通了一台专门用于 Bitcoin 挖矿的 ASIC,并把它连接到矿池。矿池协调矿工的工作,目标是找到下一个区块,也就是一批将被加入 Bitcoin 历史记录的交易。但只有算力还不够:设备需要任务,矿池也需要知道 Eva 完成了多少工作。Stratum V1 负责双方的沟通。矿池提供寻找下一个区块所需的任务,矿机计算后回传中间结果。就像打电话时使用的语言,协议让双方听得懂彼此,却不决定工作的价格。报酬由矿池的独立结算规则确定,找到的区块是否有效则由 Bitcoin 节点检查。 [4] [2]

随着矿机越来越快,旧的 getwork 越来越不合适。它每次提供的工作量很小,设备必须频繁请求新任务。Marek Palatinus 在 2012 年 9 月 11 日公布了新方案。Stratum 让连接保持开启,矿池无需等待下一次请求就能发送任务变化,从而减少通信开销。这并不取代挖矿的所有环节:矿池仍可使用 BIP 22 描述的 getblocktemplate,从 Bitcoin 节点取得候选区块。 [11] [3] [5]

矿机的控制软件通常先发送 mining.subscribe,请求接收任务。返回的信息用于建立会话并区分它的计算工作。之后,mining.authorize 将设备关联到账户。这里的 worker 是设备或连接的标识,不是雇员。Eva 可以用它区分同一账户下的多台机器。不过,这条消息中可能包含的密码,既不能单独验证服务器的真实性,也不会加密通信。因此,登录成功不等于连接安全。 [2] [13]

mining.notify 会带来以 job_id 标识的新任务,其中有前一区块的引用、与交易有关的数据、时间及其他区块头信息。区块头是一组描述该区块的精简数据。clean_jobs 标志很重要:true 要求放弃旧任务;false 则允许设备在转向新任务时继续处理前一个任务。因此,不能认为每一条新消息都会自动让所有正在计算的结果失效。任务也只是供计算的候选方案,并非已经有效的区块。 [2] [13]

这一节偏技术,普通连接操作并不要求掌握每个字段。矿池提供 coinbase 交易的两个部分;这笔交易支付区块奖励,与同名交易所无关。软件在两部分之间插入矿池分配的 extranonce1 和自己的 extranonce2,生成更多工作变体。它用这笔交易与收到的 Merkle branches——交易树形摘要的中间值——计算出 Merkle root。再结合前一区块引用、版本、时间和编码后的 hash 上限,构成 80 字节区块头的基础。ASIC 反复计算区块头的 hash,也就是数字指纹,并改变 nonce,这个数字用于尝试新的候选结果。 [2] [4] [13] [14]

找到完整区块很少见,因此矿池设置了更容易达到的结果门槛,称为 target。满足门槛的结果叫 mining share,用来证明已经完成的工作。大多数 shares 达不到 Bitcoin 网络更严格的门槛;偶尔有一个同时满足,便可能帮助产生有效区块。mining.set_difficulty 和自动调节机制 vardiff 改变的是 shares 的难度,让结果既不过于频繁,也不过于稀少。它们不改变网络难度。满足更难的条件平均需要更多次计算,因此这样的结果在衡量工作量时权重更高。数量更少但难度更高的 shares 并不天然意味着报酬更低,还要看它们的权重和矿池规则。 [2] [4] [13]

设备通过 mining.submit 发送 worker 标识、job_id、extranonce2、nTime(区块头中的时间戳) 和 nonce。矿池据此重建并检查结果。duplicate 表示重复提交同一份工作,low difficulty 表示结果不够好,stale 表示任务已不再被接受。因此,Eva 除了查看机器速度,还要关注拒绝比例和连接延迟。即使 share 被接受,也还不等于钱已支付到钱包:Stratum 负责传递工作,奖励记账和付款遵循另行规定的规则。 [2] [13]

2018 年提出的 BIP 310 描述了如何通过 mining.configure 协商额外功能。2026 年 10 月 17 日核查时,文档仍标为 Draft,即草案。Version-rolling 只允许改变区块头版本字段中双方约定的比特;协商成功后,mining.submit 才增加第六个字段。这不授权随意修改 Bitcoin 规则。minimum-difficulty 和 subscribe-extranonce 分别涉及请求的最低 share 难度,以及新 extranonce 值的通知。功能协商能避免程序间误解,但本身不提供加密。 [6]

V1 通常使用未加密的 TCP。没有额外保护时,位于通信路径上的人可能读取或修改消息,并尝试将挖矿工作转向别处。2017 年的研究 Hardening Stratum 实际分析了这些风险。问题在于矿机与矿池之间的连接,而不是 Bitcoin 本身被破解。在常见模式中,矿池还会选择区块中的交易。Eva 拥有机器,并不意味着她决定这些内容。即使大型矿池产生了违反规则的区块,Bitcoin 节点仍会拒绝它。 [7] [4]

Stratum V2 带来更紧凑的二进制消息和经过密码学保护的连接。独立的 Job Declaration 组件可以让矿工提议自己选择的交易,前提是双方都支持并使用它。V1/V2 转换器或一个 V2 标签都不足以证明这一能力。Eva 应核对固件支持、正确的服务器地址、连接保护、被拒绝的结果及备用连接。理解 V1 的关键很清楚:交付任务、证明计算,再把这两件事与决定区块内容和支付报酬区分开。 [8] [12] [10]

要获得更完整的理解,请将本词条与以下词条结合阅读: Bitcoin, 挖矿, Mining Pool, Braiins, Braiins Pool, Marek“Slush”Palatinus. 反向关联还来自: Mining Pool, Marek“Slush”Palatinus, Braiins, Braiins Pool.

DOC · 001Original Stratum mining protocol announcement一手来源 DOC · 002Bitcoin Wiki — Stratum mining protocol文档 DOC · 003Braiins — Past and future of mining protocols一手来源 DOC · 004Bitcoin Developer Guide — Pooled Mining文档 DOC · 005BIP 22 — getblocktemplate fundamentals一手来源 DOC · 006BIP 310 — Stratum protocol extensions一手来源 DOC · 007Hardening Stratum research paper一手来源 DOC · 008Stratum V2 Mining Protocol specification一手来源 DOC · 009Galaxy Research — Future of Bitcoin mining protocols文档 DOC · 010Braiins Academy — Stratum V2 Manual文档 DOC · 011Slush — Stratum proposal, 11 September 2012一手来源 DOC · 012Stratum V2 — Job Declaration Protocol一手来源 DOC · 013Original Stratum protocol specification (archived)一手来源 DOC · 014Bitcoin Developer Reference — Block Headers一手来源
修订日期: 来源优先 · 非投资建议