m2pool-core/README.md

6.2 KiB
Raw Blame History

tari-server

一个基于 Go 的轻量化挖矿池服务内核,包含 Job 生成/分发与 Stratum 矿工端接入两大模块:

  • gbt区块模板生成与同步GetBlockTemplate/Job Producer通过 ZMQ 向服务端发布新任务
  • serverStratum 挖矿服务(矿工接入、难度调整、提交校验、统计与缓存)

当前代码启用了 sha3x 币种实现(其他如 nexamonero 的代码结构已准备但默认关闭/注释)。


功能特性

  • Stratum 协议接入,支持 mining.subscribemining.authorize/loginmining.submitmining.ping/pong
  • 可配置的难度策略(含卡尔曼滤波驱动的 VarDiff 逻辑,按提交间隔动态调整)
  • 任务分发与同步gbt 通过 ZMQ 发布server 订阅并向在线矿工广播
  • 连接数/同 IP 限流、存活监测、超时与心跳处理
  • Redis 用于在线状态与速率缓存DB 持久化矿工/用户/池端统计
  • 日志zap + 日志轮转
  • 内置 pprof 端口(从配置读取)

目录结构

cmd/
  gbt/gbt.go          # 区块模板生成/任务发布入口
  server/server.go    # 挖矿池服务入口Stratum 服务)
internal/
  server/             # 矿工接入、会话、难度、任务处理
  gbt/                # GBT/任务管线,各币种对接
  db/                 # 数据库上下文与表结构
  cache/              # Redis 缓存读写
  stratum/            # Stratum 协议与消息结构
  utility/            # 工具、日志、ZMQ 初始化等
config/
  nexa/
    server/server.conf  # server 示例配置(按需拷贝/修改)
    gbt/gbt.conf        # gbt 示例配置(按需拷贝/修改)
    db/db.conf          # DB 配置MySQL/SQLite

环境依赖

  • Go 1.23+go.mod 声明 toolchain go1.23.1
  • Redis作为状态/速率缓存)
  • 数据库MySQL 或 SQLiteconfig/<coin>/db/db.conf 配置)
  • ZMQ用于 gbt → server 的 Job 发布/订阅)
  • 可选本地 C 库:目录 internal/server/lib/ 下包含部分 .so/.a,用于特定算法;sha3x 默认主要为 Go 实现。建议在 Linux 环境下构建、运行Windows 可能需要适配或禁用相关 C 扩展。

快速开始

  1. 准备配置文件(以 sha3x 为例)
  • 将以下文件拷贝到运行目录(项目根或二进制同目录):
    • config/nexa/server/server.confserver.conf
    • config/nexa/gbt/gbt.confgbt.conf
    • config/nexa/db/db.confdb.conf
  • 打开并修改以上配置以匹配你的 Redis、DB、ZMQ 与监听地址。例如:server.conf 中的 Stratum 监听端口、pprof 端口,gbt.conf 中的上游节点与发布地址。
  1. 构建
# 在项目根目录执行
go build -o bin/server ./cmd/server
go build -o bin/gbt ./cmd/gbt
  1. 运行
# 先启动 gbt负责产生并发布 Job
./bin/gbt

# 再启动 server负责矿工接入与提交校验
./bin/server
  • 两个进程均会在工作目录读取同名配置:gbt 读取 gbt.confserver 读取 server.conf
  • server 会根据配置启动一个 pprof HTTP 端口,便于性能分析。
  1. 矿工连接
  • 在矿工端配置你的 Stratum 地址,即 server.conf 中的 Host.Listen(例如:stratum+tcp://<ip>:<port>)。
  • 账户名与 Miner 名按池的约定填写,对应鉴权在 internal/stratuminternal/server/coin/* 中处理。

配置说明(概览)

  • server.conf读取于工作目录
    • Host.ListenStratum 监听地址,形如 0.0.0.0:端口
    • RedisAddr/Password/DB
    • ZMQPub(向外发布)、Sub(订阅 gbt 发布的 Job
    • Diff难度相关参数起始、最小/最大、调整间隔、滤波模式等)
    • Zaplog/Logrotate日志级别、输出与轮转策略
    • pprof 端口:由 cmd/serverutility.GetCoin("server.conf") 返回的第二个值决定
  • gbt.conf读取于工作目录
    • 上游节点/RPC 或 gRPC/GRPC/Tari/Monero 等对接参数
    • ZMQ对外发布 Job 的地址(需与 server 的 Zmq.Sub 对应)
  • db.conf
    • MySQL 或 SQLite 连接信息(internal/db 负责加载与建表)

注意:项目内示例配置位于 config/nexa/...,请根据目标币种复制调整;sha3x 仅需要确保 ZMQ/Redis/DB 与监听端口正常。


运行时行为要点

  • gbt → server通过 ZMQ 发布/订阅通道传递新 Jobserver 收到后同步标志并向矿工广播
  • 存活与心跳:server 为连接设置超时、心跳ping/pong并清理无效连接
  • 动态难度:根据提交间隔、方差与配置策略更新矿工难度
  • 速率与统计:接受/拒绝、哈希率、区块、孤块等统计通过内存与 Redis/DB 维护
  • 退出流程:Stop() 会清理连接、关闭 ZMQ、Redis、日志并回收内存结构

常见问题

  • 端口不通:确认 server.conf 中监听端口开放(防火墙/安全组ZMQ 地址能互通
  • 配置找不到:servergbt 均在工作目录读取 *.conf,请确保以正确的工作目录启动或将配置拷贝到同一目录
  • 构建失败Windows如遇 .so/.a 相关链接问题,建议在 Linux 构建或禁用/移除对应 C 扩展;sha3x 模块通常不依赖这些库
  • Redis/DB 未就绪:请先启动并配置正确连接串;否则启动会失败或无法持久化统计

开发与调试

  • 使用 pprof根据 server.conf 暴露的地址访问 http://<ip>:<pprof_port>/debug/pprof/
  • 日志:默认使用 zapZaplogLogrotate 配置输出与轮转
  • 关键位置:
    • internal/server/server.go连接处理、心跳、难度调整、Job 处理主流程
    • internal/gbt/*:各币种 GBT 接入与 Job 生成
    • internal/stratum/*:协议与消息体

构建与运行示例Windows PowerShell

# 构建
$env:CGO_ENABLED=0
go build -o bin/server.exe ./cmd/server
go build -o bin/gbt.exe ./cmd/gbt

# 运行前将 *.conf 复制到当前目录
./bin/gbt.exe
./bin/server.exe

注:如需使用依赖本地 C 库的算法实现,建议在 Linux 环境构建并确保工具链与库依赖可用。


许可证

本项目未在仓库根目录明确声明许可证。如需开源发布,请在根目录新增 LICENSE 并注明授权条款。