比特币之外,以太坊在合并之前同样需要一套矿机与矿池的通信语言。讽刺的是,这个领域长期没有官方标准:客户端官方只支持矿机主动轮询的 getWork 接口,真正的行业实践是各矿池自行发明的 Stratum 方言,同一台矿机换一家池子就可能要换配置。EIP-1571 在 2018 年 11 月提出 EthereumStratum/2.0.0,想把方言收编成规范。它最终停在 Stagnant 状态,但这份文本仍是理解”矿机-矿池对话”最清晰的教材之一。
一次带身份交换的开场
规范把整个交互定义为 JSON-RPC 2.0 之上的一次会话:TCP 连接建立即会话开始,断开即结束,消息以换行符分隔。开场顺序刻意反直觉——由客户端先发 mining.hello,而不是服务器自报家门。理由写在规范里:让服务器抢先发大包,等于给伪造源地址的放大攻击和白吃连接的拒绝服务攻击留门。客户端的 hello 带四个必填字段:矿机软件名、目标主机、端口和请求的协议版本。服务器若愿意服务,回包报上自己的协议版本、是否启用 gzip 压缩、能否续接旧会话、闲置多少秒可以踢人、容忍几个错误后断线,外加底层节点软件的版本字符串——最后这个字段是透明性姿态:矿工程应有知道自己干的活是在哪个版本的节点上校验的。

带宽是设计的敌人
规范开篇算过一笔账:一条约 240 字节的 mining.notify,若每个新区块推送给五万个连接,一个月要跑掉将近 1.9TB。以太坊十几秒一个块,这种啰嗦直接换算成矿机的网络门槛,而网络质量差又被视为挖矿去中心化的隐形税。2.0 的应对是三板斧:其一是压缩,握手协商 gzip 后所有后续消息必须压缩,不支持的一方必须立刻断开,双方都不许在压缩会话里混发明文;其二是十六进制瘦身,数值型十六进制一律去掉 0x 前缀、并且只传有效位——数值 456 写成 1c8 而不是 01c8——哈希与 extranonce 例外;其三是把常量类参数收进 mining.set 只在变化时下发,作业推送 mining.notify 保持最小字段集。
断线与续接
传统 Stratum 对掉线处理很粗糙:客户端异常断开后,服务器上的套接字要等保活超时才回收。2.0 加了 mining.bye 通知,收到即双方体面关线,但规范也提醒:主动道别意味着放弃续接资格,重连后必须重新走完整的授权流程。会话续接本身是可选能力,只有握手时声明 resume 的服务器才支持。
为什么它停在原地
这份提案依赖的前提在 2022 年 9 月被抽掉了:合并之后以太坊不再有需要 Stratum 的矿工,EIP-1571 自然沉入 Stagnant。它留下的真正遗产是方法论:先握手让弱方先说话、用压缩和字段裁剪换带宽、把会话状态标准化。今天看权益证明时代的 Stratum V2(比特币生态)等项目,能看到同样的问题清单。
对普通读者的提示:这类协议不面向个人,任何个人被引导去配置 Stratum 地址时,几乎都要与所谓”矿机托管""云算力”项目绑定,那些场景的风险集中在资金托管而非协议本身,务必以托管方资质而非技术名词做判断。本文不构成投资建议。
授权、订阅与提交的日常节拍
握手过后,客户端先 mining.subscribe 登记连接能力,再对每个工人账号 mining.authorize;服务器则用 mining.set 推送常量参数、用 mining.notify 推最小作业信息,矿机找到低于目标的解后以 mining.submit 回报,无效解会收到明确拒绝。规范要求所有十六进制字段省略前导零与 0x,哈希与 extranonce 除外;会话重连后所有工人必须重新授权。把这些消息排成时间线就能明白:整份协议的目标是在秒级出块的节奏下,把每轮作业下发的字节数压到最低,同时让”谁的解、谁负责”始终可追溯。对今天的读者,这套节拍的价值在于参照——权益证明时代验证者的签名广播、打包提交,面对的仍是同一组问题:谁向谁交付可验证的工作、掉线之后状态怎么续。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。