tari-rust/README.md

152 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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