Bittensor Subtensor 入门与区块链开发指南

Bittensor Subtensor 入门与区块链开发指南

随着去中心化人工智能生态 Bittensor 的不断发展,其核心基础设施 Subtensor 逐渐成为开发者和研究者关注的重点。Subtensor 是一个基于 Substrate 的区块链节点实现,它承载了 Bittensor 的共识机制、节点信息发布以及价值转移(TAO 代币)等关键逻辑。本文将对 Subtensor 的架构、运行环境、开发方法和实践操作进行全面介绍,帮助开发者快速上手。


1
2
3
4
5
6
7
             _      _
███████╗██╗ ██╗██████╗ ████████╗███████╗███╗ ██╗███████╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔══██╗╚══██╔══╝██╔════╝████╗ ██║██╔════╝██╔═══██╗██╔══██╗
███████╗██║ ██║██████╔╝ ██║ █████╗ ██╔██╗ ██║███████╗██║ ██║██████╔╝
╚════██║██║ ██║██╔══██╗ ██║ ██╔══╝ ██║╚██╗██║╚════██║██║ ██║██╔══██╗
███████║╚██████╔╝██████╔╝ ██║ ███████╗██║ ╚████║███████║╚██████╔╝██║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝

本文章包含 Bittensor 的 substrate 链。Subtensor 包含以下可信逻辑:

  1. 运行 Bittensor 的 共识机制
  2. 广播神经元信息、IP 等;
  3. 通过 TAO 促进价值转移。

系统需求

  • ./bin/release 中的二进制文件为 Linux 内核使用的 x86_64 二进制文件。

  • Subtensor 运行需要约 ~286 MiB 内存。

  • 支持架构:

    • Linux: x86_64
    • MacOS: x86_64 和 ARM64 (M 系列 Mac)
  • 当前不支持 Linux 和 MacOS 之外的操作系统。


架构支持

Subtensor 支持以下架构:

Linux x86_64

需求:

  • Linux 内核 2.6.32+
  • glibc 2.11+
    这是一个基于 FRAME 的 Substrate 节点,开箱即用,适合开发 🚀

MacOS x86_64 & arm64 (Apple Silicon)

需求:

  • macOS 10.7+ (Lion+) 用于 x86_64
  • macOS 11+ (Big Sur+) 用于 Apple Silicon (M1, M2 及更新),支持 arm64 架构。

网络需求

  • Subtensor 需要访问公网

  • Subtensor 运行在 IPv4 上

  • Subtensor 监听以下端口:

    1. 9944 - WebSocket:Bittensor 使用的端口,仅接受本地连接。必须防火墙保护,避免暴露公网。
    2. 9933 - RPC:端口开放,但未使用。
    3. 30333 - p2p socket:用于接收其他 Subtensor 节点的连接。必须确保防火墙允许进入该端口的流量。

假设默认的出站流量策略为 ACCEPT。若不是,请确保允许出站 30333 端口。


子网开发

如果你在开发和测试子网激励机制,则需要运行本地 Subtensor 节点。请参考 Bittensor 开发者文档 - Subtensor Nodes 中的详细步骤。

Lite 节点 vs Archive 节点

关于 Lite 节点与 Archive 节点的区别,以及如何在这些模式下运行本地 Subtensor 节点,请参考 Bittensor 开发者文档


Subtensor 开发

安装

首先完成 Rust 基础环境安装

编译并运行

使用 Rust 原生 cargo 命令编译并启动模板节点:

1
cargo run --release -- --dev

仅编译

如果只想编译而不运行,可以执行:

1
cargo build --release

其他启动方式

单节点开发链

启动非持久化的单节点开发链:

1
./target/release/subtensor --dev

清除开发链状态:

1
./target/release/subtensor purge-chain --dev

调试模式下运行:

1
RUST_BACKTRACE=1 ./target/release/subtensor -ldebug --dev

运行日志调试:

1
SKIP_WASM_BUILD=1 RUST_LOG=runtime=debug -- --nocapture

运行单个测试:

1
2
3
4
SKIP_WASM_BUILD=1 \
RUST_LOG=runtime=debug \
cargo test <测试名称> \
-- --nocapture --color always

代码覆盖率

1
bash scripts/code-coverage.sh

注意:需要在主机安装 cargo-tarpaulin,例如:
cargo install cargo-tarpaulin


保持链状态

默认情况下,开发链状态存储在临时目录。若需持久化:

1
2
mkdir my-chain-state
./target/release/node-template --dev --base-path ./my-chain-state/

执行后可查看数据库文件:

1
2
ls ./my-chain-state/chains/dev
#> db keystore network

连接 Polkadot-JS 前端

运行本地节点后,可以通过 Polkadot-JS Apps 进行交互:

点击此处连接


多节点本地测试网

若需体验多节点共识,请参考 Substrate 教程:模拟网络教程


模板结构

一个 Substrate 项目包含多个分布在不同目录的组件。

节点功能

Substrate 节点提供的能力包括:

  • 网络通信:基于 libp2p
  • 共识机制:支持 Aura 出块、GRANDPA 最终性
  • RPC 服务:通过远程过程调用与节点交互

核心文件

  • chain_spec.rs:链配置与创世状态
  • service.rs:节点实现,包含共识逻辑
  • runtime/:运行时逻辑,基于 FRAME
  • pallets/:自定义业务模块

CLI 帮助

构建完成后,可通过以下命令查看支持参数:

1
./target/release/node-subtensor --help

Runtime 与 Pallets

  • Runtime:即区块链的状态转换函数,验证区块并执行状态变更
  • FRAME Pallets:模块化组件,用于定义存储、调度函数、事件、错误等
  • 构建方式:通过 construct_runtime! 宏将 Pallets 组合成完整的链

与前端交互

运行节点后,可以使用 Polkadot-JS Apps 连接本地 Subtensor 节点,进行链状态查询和交互。


节点架构与核心文件

Subtensor 基于 Substrate 的模块化设计,主要目录结构:

  • chain_spec.rs:链配置文件,定义创世区块状态(包括 Alice、Bob 等预置账户)
  • service.rs:节点服务入口,涉及共识机制(Aura 出块、GRANDPA 最终性)
  • runtime/:定义运行时逻辑,基于 FRAME Pallets 组合
  • pallets/:自定义业务逻辑模块(存储、事件、错误、可调度函数等)

开发者小结

Subtensor 是 Bittensor 的底层支撑,既具备 Substrate 的灵活性,又加入了 AI 网络的独特逻辑。对于开发者而言,掌握 Subtensor 可以帮助你:

  • 构建与调试本地子网(Subnet)
  • 探索 Bittensor 的奖励机制与共识实现
  • 开发定制化 Pallet,实现新的链上逻辑

如果你正在研究去中心化 AI 或想要构建自己的子网,Subtensor 将是你最好的实验田。