|
||
---|---|---|
src | ||
Cargo.toml | ||
IMPLEMENTATION_SUMMARY.md | ||
README.md | ||
build.bat | ||
build.sh | ||
config.toml | ||
gbt_process | ||
test_gbt.py |
README.md
Tari GBT (Get Block Template) Client
这是一个Tari区块链的GetBlockTemplate客户端,支持ZMQ通信协议,用于挖矿池和矿工之间的通信。
功能特性
1. 区块模板获取
- 通过gRPC从BaseNode获取区块模板
- 自动生成coinbase交易
- 支持多种挖矿算法(SHA3X、RandomXM、RandomXT)
2. HTTP API集成
- 通过HTTP请求获取上一个区块的
output_smt_size
- 缓存机制避免重复请求
- 自动计算当前区块的
output_smt_size
3. 任务管理
- 生成16位16进制任务ID
- 任务缓存管理(最多保存3个区块)
- 支持任务状态跟踪
4. ZMQ通信
- 发布挖矿任务消息
- 接收矿工提交结果
- 支持多种消息类型
数据结构
MiningTask(挖矿任务)
pub struct MiningTask {
pub job_id: String, // 16位16进制任务ID
pub block_header: BlockHeader, // 区块头信息
pub block_body: BlockBody, // 区块体信息
pub output_smt_size: u64, // 当前output_smt_size
pub coinbase_hash: String, // coinbase哈希
pub target: u64, // 目标难度
}
MiningMsg(挖矿消息)
pub struct MiningMsg {
pub job_id: String, // 任务ID
pub block_header: BlockHeader, // 区块头
pub output_smt_size: u64, // output_smt_size
pub coinbase_hash: String, // coinbase哈希
pub target: u64, // 目标难度
}
SubmitRequest(提交请求)
pub struct SubmitRequest {
pub job_id: String, // 任务ID
pub nonce: u64, // 挖矿nonce
pub solution: String, // 挖矿解
}
工作流程
1. 获取区块模板
- 通过gRPC获取区块模板
- 生成coinbase交易
- 通过HTTP获取上一个区块的
output_smt_size
- 计算当前
output_smt_size = 上一个output_smt_size + outputs长度 - inputs长度
- 生成任务ID
- 构造MiningTask实例
2. 发送挖矿任务
- 构造MiningMsg实例
- 通过ZMQ发布消息
- 缓存任务信息
3. 接收提交结果
- 监听ZMQ提交消息
- 验证任务ID
- 构造完整区块
- 提交到BaseNode
- 返回提交结果
配置参数
参数 | 默认值 | 说明 |
---|---|---|
--base-node |
127.0.0.1:18102 |
BaseNode gRPC地址 |
--base-node-http |
127.0.0.1:9000 |
BaseNode HTTP地址 |
--network |
mainnet |
网络类型 |
--wallet-address |
默认地址 | 钱包地址 |
--coinbase-extra |
m2pool.com |
Coinbase额外数据 |
--zmq-pub-port |
5555 |
ZMQ发布端口 |
--zmq-sub-port |
5556 |
ZMQ订阅端口 |
构建和运行
构建
cargo build --release
运行
# 基本运行
./target/release/gbt
# 自定义配置
./target/release/gbt \
--base-node 127.0.0.1:18102 \
--base-node-http 127.0.0.1:9000 \
--network mainnet \
--wallet-address YOUR_WALLET_ADDRESS \
--coinbase-extra "your_pool_name" \
--zmq-pub-port 5555 \
--zmq-sub-port 5556
ZMQ消息格式
挖矿任务消息
Topic: "mining_msg"
Data: JSON格式的MiningMsg
提交请求消息
Topic: "submit"
Data: JSON格式的SubmitRequest
提交结果消息
Topic: "submit_result"
Data: JSON格式的SubmitResult
依赖项
reqwest
: HTTP客户端uuid
: 任务ID生成zmq
: ZMQ通信serde
: 序列化/反序列化tokio
: 异步运行时tonic
: gRPC客户端
注意事项
- 确保BaseNode的gRPC和HTTP服务正在运行
- 确保ZMQ端口未被占用
- 钱包地址必须是有效的Tari地址
- 网络配置必须与BaseNode一致
- 建议在生产环境中启用TLS
故障排除
常见问题
-
连接BaseNode失败
- 检查BaseNode是否运行
- 验证gRPC地址和端口
- 检查网络配置
-
HTTP请求失败
- 检查BaseNode HTTP服务
- 验证HTTP地址和端口
- 检查网络连接
-
ZMQ通信失败
- 检查ZMQ端口是否被占用
- 验证防火墙设置
- 检查ZMQ库安装
-
任务提交失败
- 检查任务ID是否有效
- 验证nonce和solution格式
- 检查BaseNode状态
开发
添加新功能
- 修改
src/main.rs