# Tari GBT (GetBlockTemplate) Client 这是一个独立的Tari GetBlockTemplate客户端,用于获取区块模板、构造coinbase交易,并通过ZMQ与外部挖矿程序通信。 ## 功能特性 - ✅ 连接Tari BaseNode获取区块模板 - ✅ 自动构造coinbase交易 - ✅ 通过ZMQ发送挖矿任务 - ✅ 接收外部挖矿结果 - ✅ 提交完成的区块到BaseNode - ✅ 支持多种网络(mainnet、nextnet、testnet) - ✅ 支持TLS加密连接 - ✅ 命令行参数配置 ## 编译 ```bash # 在gbt目录下编译 cargo build --release # 编译后的可执行文件位于 target/release/gbt ``` ## 使用方法 ### 基本用法 ```bash # 连接到本地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 <钱包地址> ``` ### 完整参数 ```bash ./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) ```json { "coinbase_hash": "abc123...", "height": 12345, "target": 1000000, "block_template": "{...序列化的区块模板...}" } ``` ### 接收的提交请求(submit) ```json { "height": 12345, "nonce": 67890, "solution": "solution_hash...", "block_data": "{...序列化的区块数据...}" } ``` ## 工作流程 1. **连接BaseNode**: 建立与Tari BaseNode的gRPC连接 2. **获取区块模板**: 从BaseNode获取新区块模板 3. **构造coinbase**: 生成coinbase交易并添加到区块模板 4. **发送挖矿任务**: 通过ZMQ发布挖矿任务给外部挖矿程序 5. **接收挖矿结果**: 通过ZMQ接收外部挖矿程序提交的结果 6. **提交区块**: 将完成的区块提交给BaseNode 7. **循环**: 重复上述过程 ## 依赖要求 - Rust 1.70+ - Tari BaseNode运行中并启用gRPC - 有效的Tari钱包地址 ## 网络配置 ### Mainnet ```bash ./target/release/gbt --network mainnet --wallet-address <主网钱包地址> ``` ### Nextnet ```bash ./target/release/gbt --network nextnet --wallet-address <测试网钱包地址> ``` ### Testnet ```bash ./target/release/gbt --network testnet --wallet-address <测试网钱包地址> ``` ## 故障排除 ### 连接错误 - 确保BaseNode正在运行 - 检查gRPC端口是否正确 - 确认BaseNode已启用gRPC服务 ### ZMQ错误 - 检查ZMQ端口是否被占用 - 确保外部挖矿程序正确连接到ZMQ端口 ### 钱包地址错误 - 确保钱包地址格式正确 - 检查钱包地址是否属于指定网络 ## 开发 ### 添加新功能 1. 修改`src/main.rs` 2. 更新依赖项(如需要) 3. 重新编译 ### 调试 ```bash # 启用详细日志 RUST_LOG=debug cargo run -- --wallet-address <地址> ``` ## 许可证 BSD-3-Clause License