152 lines
3.5 KiB
Markdown
152 lines
3.5 KiB
Markdown
# 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 |