tari-rust/README.md

152 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2025-06-25 12:34:00 +00:00
# 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