Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

102 Commits

Repository files navigation

bittensor-rs

Rust SDK for the Bittensor decentralized AI network. Wallet management, chain interaction, neuron serving, and subnet monitoring, built on subxt 0.50 with typed storage queries and extrinsics.

Architecture

 ┌─────────────────┐
│ bittensor-cli │
│ (btcli-rs) │
└────────┬────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ bittensor- │ │ bittensor- │ │ bittensor- │
│ wallet │ │ tui │ │ pyo3 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ ┌──────┴──────┐ │
│ │ bittensor- │ │
│ │ metagraph │ │
│ └──────┬──────┘ │
│ │ │
└────────────────┼────────────────┘
│
┌──────┴──────┐
│ bittensor- │
│ chain │
└──────┬──────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ bittensor- │ │ bittensor- │ │ bittensor- │
│ axon │ │ dendrite │ │ core │
└──────┬──────┘ └──────┬──────┘ └─────────────┘
│ │ ▲
│ ┌──────┴──────┐ │
│ │ bittensor- │ │
└────────────┤ synapse ├────────────┘
└─────────────┘
┌─────────────────────────────────────────────────────┐
│ bittensor-wasm │
│ (standalone: reimplements core types for wasm-bindgen)│
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ bittensor-examples │
│ (depends on all native crates for runnable samples) │
└─────────────────────────────────────────────────────┘

Crates

CrateDescription
bittensor-coreBalance arithmetic, error types, config, POW, shared types
bittensor-walletWallet, keypair, keyfile, mnemonic, SS58
bittensor-chainSubtensor client, queries, extrinsics, events
bittensor-synapseProtocol types, headers, hashing, signing, streaming
bittensor-axonAxum-based neuron server with middleware and routing
bittensor-dendriteHTTP client with request signing and streaming
bittensor-metagraphSubnet graph sync, iteration, and serialization
bittensor-clibtcli-rs command-line tool
bittensor-tuiTerminal UI dashboard
bittensor-pyo3Python bindings (bittensor_rs package)
bittensor-wasmWASM bindings for browser usage
bittensor-examplesRunnable code samples

Feature Flags

bittensor-chain

FeatureDefaultDescription
storage-subscriptionsyesEnable subscribe_storage event stream
drandnoDrand randomness beacon verification
mev-shieldnoPost-quantum MEV protection for extrinsics
integration-testsnoIntegration test suite (requires local node)

bittensor-metagraph

FeatureDefaultDescription
ml-backendnoML-based weight scoring backend

bittensor-cli

FeatureDefaultDescription
mevnoMEV-shield protected transactions

Python SDK vs Rust SDK

FeaturePython SDKRust SDK
PerformanceInterpreter overheadNative binary, zero-cost abstractions
Memory safetyGC managedCompile-time borrow checking
ConcurrencyGIL-limited asyncNative async with tokio, no GIL
WASM supportNoFull wasm-bindgen support
Python bindingsNativeVia bittensor-pyo3 (bittensor_rs)
TypingRuntime duck typingStatic types, subxt-generated metadata
Keyfile formatNaCl secretboxSame NaCl secretbox, cross-compatible
Chain clientsubstrate-interfacesubxt 0.50, typed storage + extrinsics

Getting Started

Requirements

  • Rust 1.85+ (Edition 2024)
  • A running Subtensor node (finney, test, or local)

Add Dependencies

[dependencies]
bittensor-core = "0.1"bittensor-chain = "0.1"bittensor-wallet = "0.1"

Or via cargo:

cargo add bittensor-core bittensor-chain bittensor-wallet

Connect and Query

use bittensor_chain::prelude::SubtensorClient;use bittensor_core::config::NetworkConfig;#[tokio::main]asyncfnmain() -> Result<(),Box<dyn std::error::Error>>{let client = SubtensorClient::from_config(NetworkConfig::finney()).await?;let block = client.at_current_block().await?;println!("Connected at block {:?}", block.block_hash());Ok(())}

Query Balance

use bittensor_chain::prelude::*;use bittensor_core::config::NetworkConfig;use bittensor_core::balance::Balance;let client = SubtensorClient::from_config(NetworkConfig::finney()).await?;let balance:Balance = bittensor_chain::queries::account::get_balance(
client.rpc(),&account_id
).await?;println!("Balance: {balance}");

Transfer TAO

use bittensor_chain::prelude::*;use bittensor_core::config::NetworkConfig;use bittensor_core::balance::Balance;let client = SubtensorClient::from_config(NetworkConfig::finney()).await?;let signer = subxt_signer::sr25519::Keypair::from_uri("//Alice")?;let dest = subxt_signer::sr25519::PublicKey::from_uri("//Bob")?;let amount = Balance::from_tao(1.0);
bittensor_chain::extrinsics::transfer::transfer(
client.rpc(),&signer,&dest, amount.to_rao()).await?;

Create a Wallet

use bittensor_wallet::prelude::*;letmut wallet = Wallet::new("default");let mnemonic = wallet.create_coldkey("my-password")?;println!("Back up this mnemonic: {mnemonic}");println!("Coldkey address: {}", wallet.get_coldkeypub()?);let hotkey = wallet.create_hotkey()?;println!("Hotkey address: {}", hotkey.ss58_address());

Network Endpoints

NetworkWebSocket URL
Finney (mainnet)wss://entrypoint-finney.opentensor.ai:443
Testnetwss://test.finney.opentensor.ai:443
Localws://127.0.0.1:9944
Archivewss://archive.finney.opentensor.ai:443

You can also connect directly with SubtensorClient::from_url:

let client = SubtensorClient::from_url("wss://entrypoint-finney.opentensor.ai:443").await?;

Documentation

Full documentation is available in the docs/ directory:

Metadata

Chain metadata is stored at metadata/finney.scale and auto-loaded at compile time. When the Finney runtime upgrades, regenerate the metadata and API bindings:

cargo install subxt-cli@0.50.0 --locked
subxt metadata --url wss://entrypoint-finney.opentensor.ai:443 -f bytes > metadata/finney.scale
cargo check -p bittensor-chain

License

MIT

About

[ τ ] Bittensor SDK implementation in Rust

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages