tari-rust/README.md

3.5 KiB
Raw Blame History

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": "{...序列化的区块数据...}"
}

工作流程

  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

./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端口

钱包地址错误

  • 确保钱包地址格式正确
  • 检查钱包地址是否属于指定网络

开发

添加新功能

  1. 修改src/main.rs
  2. 更新依赖项(如需要)
  3. 重新编译

调试

# 启用详细日志
RUST_LOG=debug cargo run -- --wallet-address <地址>

许可证

BSD-3-Clause License