SuperAPI AI 工具集

stratum-v1

通用与其它

查看项目

更新于 10-15 17:23

技能介绍

用途:该技能面向 Stratum v1 挖矿协议的实现与调试,覆盖矿池服务端、挖矿代理、ASIC 固件,以及矿机与矿池通信排查和份额校验理解。协议传输层使用普通 TCP 长连接,JSON-RPC 消息以换行符(\n)分隔,非 HTTP 请求响应模式,可选在独立端口启用 TLS。

核心方法:mining.subscribe 完成矿机到矿池的初始握手,返回订阅元组、extranonce1 和 extranonce2 字节大小;mining.authorize 认证 worker,BSV 矿池(如 GorillaPool)用户名格式为 BSV_ADDRESS.workerName;mining.set_difficulty 由服务端通知份额难度;mining.notify 下发新任务,参数依次为 job_id、prevhash、coinb1、coinb2、merkle 分支数组、version、nbits、ntime、clean_jobs;mining.submit 提交份额,参数含 worker、job_id、extranonce2、ntime、nonce、可选 version_bits;mining.configure 按 BIP310 协商 version-rolling、minimum-difficulty 等扩展。

字节序:这是实现中最易出错之处。mining.notify 中 prevhash 为字反转(word-reversed)十六进制;version、nbits、ntime 为 BE 十六进制字符串,写入 80 字节区块头时需反转为 LE;merkle_branch 为 LE,直接使用;coinb1、coinb2 为原始交易字节。区块头中 prevhash 必须使用简单字节反转版本,而非字反转版本。区块哈希内部为 LE,展示时反转为 BE;难度比较大整数时需先转为 BE。

份额校验流程:拼接 coinb1 + extranonce1 + extranonce2 + coinb2 构建 coinbase,做 SHA256d 得到 LE 的 coinbase 哈希,依次应用 LE 的 merkle 分支得到根,构建 80 字节头,按需应用 version rolling,再次 SHA256d 得到区块哈希,换算份额难度并与会话难度比较。

可变难度(VarDiff):通过循环缓冲跟踪份额间隔,每 retargetTime 秒计算平均份额时间,超出 targetTime ± variancePercent 时按 newDiff = currentDiff * targetTime / averageTime 调整,并受 maxDelta 限制与 minDiff/maxDiff 钳制。

版本滚动(BIP310):掩码 0x1fffe000 提供额外 nonce 空间。矿机先通过 mining.configure 协商,矿池返回允许掩码,矿机在 mining.submit 中携带 version_bits,矿池校验 (version_bits & ~mask) == 0。

限制:资料未提供具体安装命令、收费或价格、性能数据及完整部署步骤。