|
||
---|---|---|
src | ||
Cargo.toml | ||
README.md | ||
build.sh | ||
config.toml | ||
gbt_process | ||
log4rs_gbt.yml |
README.md
Tari GBT (GetBlockTemplate) Client
这是一个独立的Tari GetBlockTemplate客户端,用于获取区块模板、构造coinbase交易,并通过ZMQ与外部挖矿程序通信。
功能特性
- ✅ 连接Tari BaseNode获取区块模板
- ✅ 自动构造coinbase交易
- ✅ 通过ZMQ发送挖矿任务
- ✅ 接收外部挖矿结果
- ✅ 提交完成的区块到BaseNode
- ✅ 支持多种网络(mainnet、nextnet、testnet)
- ✅ 支持TLS加密连接
- ✅ 命令行参数配置
编译
# 在gbt目录下编译
cargo build --release
# 编译后的可执行文件位于 target/release/gbt
使用方法
基本用法
# 连接到本地BaseNode
./target/release/gbt --wallet-address <钱包地址>
# 指定BaseNode地址
./target/release/gbt --base-node 192.168.1.100:18142 --wallet-address <钱包地址>
# 指定网络
./target/release/gbt --network testnet --wallet-address <钱包地址>
完整参数
./target/release/gbt \
--base-node 127.0.0.1:18142 \
--network mainnet \
--wallet-address <钱包地址> \
--coinbase-extra "GBT Miner" \
--zmq-pub-port 5555 \
--zmq-sub-port 5556
参数说明
--base-node
: BaseNode gRPC地址(默认:127.0.0.1:18142)--network
: 网络类型(mainnet/nextnet/testnet,默认:mainnet)--wallet-address
: 钱包支付地址(必需)--coinbase-extra
: coinbase额外数据(默认:GBT)--zmq-pub-port
: ZMQ发布端口(默认:5555)--zmq-sub-port
: ZMQ订阅端口(默认:5556)--tls
: 启用TLS加密--tls-domain
: TLS域名--tls-ca-cert
: TLS CA证书文件--config-dir
: 配置目录(默认:当前目录)
ZMQ消息格式
发送的挖矿任务(mining_task)
{
"coinbase_hash": "abc123...",
"height": 12345,
"target": 1000000,
"block_template": "{...序列化的区块模板...}"
}
接收的提交请求(submit)
{
"height": 12345,
"nonce": 67890,
"solution": "solution_hash...",
"block_data": "{...序列化的区块数据...}"
}
工作流程
- 连接BaseNode: 建立与Tari BaseNode的gRPC连接
- 获取区块模板: 从BaseNode获取新区块模板
- 构造coinbase: 生成coinbase交易并添加到区块模板
- 发送挖矿任务: 通过ZMQ发布挖矿任务给外部挖矿程序
- 接收挖矿结果: 通过ZMQ接收外部挖矿程序提交的结果
- 提交区块: 将完成的区块提交给BaseNode
- 循环: 重复上述过程
依赖要求
- Rust 1.70+
- Tari BaseNode运行中并启用gRPC
- 有效的Tari钱包地址
网络配置
Mainnet
./target/release/gbt --network mainnet --wallet-address <主网钱包地址>
Nextnet
./target/release/gbt --network nextnet --wallet-address <测试网钱包地址>
Testnet
./target/release/gbt --network testnet --wallet-address <测试网钱包地址>
故障排除
连接错误
- 确保BaseNode正在运行
- 检查gRPC端口是否正确
- 确认BaseNode已启用gRPC服务
ZMQ错误
- 检查ZMQ端口是否被占用
- 确保外部挖矿程序正确连接到ZMQ端口
钱包地址错误
- 确保钱包地址格式正确
- 检查钱包地址是否属于指定网络
开发
添加新功能
- 修改
src/main.rs
- 更新依赖项(如需要)
- 重新编译
调试
# 启用详细日志
RUST_LOG=debug cargo run -- --wallet-address <地址>
许可证
BSD-3-Clause License