่ทณ่‡ณไธป่ฆๅ†…ๅฎน
ๅฐ้พ™่™พๅฐ้พ™่™พAI
๐Ÿค–

Bittensor SDK

Bittensor Python SDK skill covers the full v8.x API: Subtensor (~130 methods for staking, registration, weights, liquidity, proxy, coldkey swaps), AsyncSubtensor, Metagraph (5 variants), Axon/Dendrite/Synapse networking stack, 26 chain data models, 18 sync + 18 async extrinsic modules, SubtensorApi wrapper with 14 sub-APIs, dev test framework (~184 call blueprints), Drand timelock encryption, and all utils (Balance, btlogging state machine, weight processing, Uniswap V3 liquidity math, etc.).

ไธ‹่ฝฝ1.9k
ๆ˜Ÿๆ ‡1
็‰ˆๆœฌ2.0.0
ๅผ€ๅ‘ๅทฅๅ…ท
ๅฎ‰ๅ…จ้€š่ฟ‡

ๆŠ€่ƒฝ่ฏดๆ˜Ž


name: bittensor-sdk description: "Complete Bittensor SDK reference โ€” Subtensor, AsyncSubtensor, Metagraph, Axon, Dendrite, Synapse, chain_data models, extrinsics (sync + async), extras (subtensor_api, dev_framework, timelock), and utils (balance, btlogging, weight_utils, registration, liquidity, networking, version). Use for any bittensor operation: wallet management, staking, subnet ops, neuron registration, metagraph queries, emissions tracking, liquidity management, MEV protection, proxy delegation, coldkey swaps, crowdloans, weight setting, and more." license: MIT compatibility: Requires Python 3.8+, bittensor>=8.0.0, network access to Bittensor network endpoints metadata: author: taoli twitter: taoleeh github: taoleeh website: bittensor.quest version: "2.0.0"

Bittensor SDK โ€” Complete API Reference

Comprehensive reference for the Bittensor Python SDK. Based on the full autoapi documentation.

Package Structure

bittensor/
โ”œโ”€โ”€ core/
โ”‚   โ”œโ”€โ”€ subtensor          โ€” Synchronous blockchain interface (main class)
โ”‚   โ”œโ”€โ”€ async_subtensor     โ€” Asynchronous blockchain interface
โ”‚   โ”œโ”€โ”€ metagraph           โ€” Subnet state representation (sync/async/torch/nontorch)
โ”‚   โ”œโ”€โ”€ axon                โ€” Server-side neuron endpoint (FastAPI)
โ”‚   โ”œโ”€โ”€ dendrite            โ€” Client-side network request sender
โ”‚   โ”œโ”€โ”€ synapse             โ€” Communication schema between neurons (Pydantic)
โ”‚   โ”œโ”€โ”€ stream              โ€” Streaming response model
โ”‚   โ”œโ”€โ”€ tensor              โ€” Tensor serialization utilities
โ”‚   โ”œโ”€โ”€ threadpool          โ€” Priority thread pool for Axon
โ”‚   โ”œโ”€โ”€ config              โ€” Configuration management
โ”‚   โ”œโ”€โ”€ settings            โ€” Default settings
โ”‚   โ”œโ”€โ”€ types               โ€” Shared type aliases and mixins
โ”‚   โ”œโ”€โ”€ errors              โ€” Exception hierarchy
โ”‚   โ”œโ”€โ”€ chain_data/         โ€” 26 data models for chain state
โ”‚   โ””โ”€โ”€ extrinsics/         โ€” Sync + async extrinsic operations + pallet definitions
โ”œโ”€โ”€ extras/
โ”‚   โ”œโ”€โ”€ subtensor_api/      โ€” High-level SubtensorApi wrapper with 14 sub-APIs
โ”‚   โ”œโ”€โ”€ dev_framework/      โ€” Test framework with ~184 namedtuple call blueprints
โ”‚   โ””โ”€โ”€ timelock/           โ€” Drand-based time-lock encryption
โ””โ”€โ”€ utils/
    โ”œโ”€โ”€ balance             โ€” Balance type (TAO/Rao conversion)
    โ”œโ”€โ”€ btlogging/          โ€” Custom logging subsystem (6 modules)
    โ”œโ”€โ”€ weight_utils        โ€” Weight normalization/conversion (12 functions)
    โ”œโ”€โ”€ registration/       โ€” Registration utilities + torch compat
    โ”œโ”€โ”€ liquidity           โ€” Uniswap V3-style liquidity math
    โ”œโ”€โ”€ networking          โ€” IP/port utilities
    โ”œโ”€โ”€ formatting          โ€” Human-readable number formatting
    โ”œโ”€โ”€ subnets             โ€” Community SubnetsAPI base class
    โ”œโ”€โ”€ version             โ€” PyPI version checker
    โ”œโ”€โ”€ axon_utils          โ€” Nonce window calculations
    โ””โ”€โ”€ easy_imports        โ€” Centralized import hub

Quick Start

import bittensor as bt

# Connect to network
subtensor = bt.Subtensor(network="finney")
# or async:
# subtensor = bt.AsyncSubtensor(network="finney")

# Wallet
wallet = bt.Wallet(name="my_wallet", hotkey="my_hotkey")

# Metagraph
metagraph = subtensor.metagraph(netuid=1)

# Stake
from bittensor import Balance
subtensor.add_stake(wallet, netuid=1, hotkey_ss58=wallet.hotkey.ss58_address,
                    amount=Balance.from_tao(10.0))

# Set weights
import numpy as np
subtensor.set_weights(wallet, netuid=1, uids=np.array([0,1,2]),
                      weights=np.array([0.3, 0.4, 0.3]))

Core Modules

bittensor.core.subtensor โ€” Subtensor (Synchronous)

Subtensor(network=None, config=None, log_verbose=False, fallback_endpoints=None,
          retry_forever=False, archive_endpoints=None, mock=False)

Staking & Liquidity:

  • add_stake(wallet, netuid, hotkey_ss58, amount, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, ...) โ€” Stake TAO
  • add_stake_burn(wallet, netuid, hotkey_ss58, amount, limit_price=None, ...) โ€” Subnet buyback
  • add_stake_multiple(wallet, netuids, hotkey_ss58s, amounts, ...) โ€” Bulk stake
  • add_liquidity(wallet, netuid, liquidity, price_low, price_high, hotkey_ss58=None, ...) โ€” Add liquidity
  • remove_liquidity(wallet, netuid, position_id, hotkey_ss58=None, ...) โ€” Remove liquidity
  • modify_liquidity(wallet, netuid, position_id, liquidity_delta, hotkey_ss58=None, ...) โ€” Modify position
  • move_stake(wallet, origin_netuid, origin_hotkey, dest_netuid, dest_hotkey, amount, ...) โ€” Move stake between subnets
  • swap_stake(wallet, origin_netuid, dest_netuid, hotkey_ss58, amount, limit_price=None, ...) โ€” Swap Alpha between subnets
  • transfer_stake(wallet, origin_netuid, dest_netuid, dest_coldkey, hotkey_ss58, amount, ...) โ€” Transfer stake to new owner
  • unstake(wallet, netuid, hotkey_ss58, amount, ...) โ€” Unstake partial
  • unstake_all(wallet, hotkey_ss58, ...) โ€” Unstake all
  • unstake_multiple(wallet, netuids, hotkey_ss58s, amounts, ...) โ€” Bulk unstake

Registration:

  • register(wallet, netuid, ...) โ€” POW registration
  • burned_register(wallet, netuid, ...) โ€” Burn registration (recycle TAO)
  • register_limit(wallet, netuid, limit_price, ...) โ€” Registration with price cap
  • root_register(wallet, ...) โ€” Root network registration

Weights:

  • set_weights(wallet, netuid, uids, weights, version_key=..., ...) โ€” Direct weight setting
  • commit_weights(wallet, netuid, salt, uids, weights, mechid=0, ...) โ€” Commit-reveal step 1
  • reveal_weights(wallet, netuid, uids, weights, salt, ...) โ€” Commit-reveal step 2
  • commit_reveal_enabled(netuid, block=None) โ€” Check if commit-reveal is active

Serving:

  • serve_axon(wallet, netuid, ip, port, protocol, version, ...) โ€” Register axon endpoint
  • serve_axon_tls(wallet, netuid, ip, port, protocol, version, certificate, ...) โ€” Register TLS axon
  • serve_prometheus(wallet, netuid, ip, port, version, ...) โ€” Register Prometheus endpoint

Proxy & Delegation:

  • add_proxy(wallet, delegate_ss58, proxy_type, delay, ...) โ€” Add proxy relationship
  • remove_proxy(wallet, delegate_ss58, proxy_type, delay, ...) โ€” Remove proxy
  • remove_proxies(wallet, ...) โ€” Remove all proxies
  • announce_proxy(wallet, real_account_ss58, call_hash, ...) โ€” Announce proxy call
  • proxy(wallet, real_account_ss58, call, ...) โ€” Execute via proxy

Coldkey Swaps:

  • announce_coldkey_swap(wallet, new_coldkey_ss58, ...) โ€” Announce swap intent
  • swap_coldkey_announced(wallet, new_coldkey_ss58, ...) โ€” Execute announced swap
  • clear_coldkey_swap_announcement(wallet, ...) โ€” Withdraw announcement
  • dispute_coldkey_swap(wallet, ...) โ€” Dispute active swap

Root Operations:

  • claim_root(wallet, netuids, ...) โ€” Claim root dividends
  • set_root_claim_type(wallet, new_root_claim_type, ...) โ€” Set root claim mechanism

Children (Child-Hotkeys):

  • set_children(wallet, netuid, hotkey, children, ...) โ€” Set child hotkeys
  • get_children(netuid, hotkey_ss58, block=None) โ€” Get children of hotkey

Queries (read-only, no wallet needed):

  • metagraph(netuid, block=None) โ€” Get metagraph
  • get_subnet_info(netuid, block=None) โ€” Get subnet details
  • all_subnets(block=None) โ€” All subnets with parameters
  • get_balance(address, block=None) โ€” Get coldkey balance
  • get_stake(coldkey_ss58, hotkey_ss58, netuid, block=None) โ€” Get stake amount
  • get_total_subnets(block=None) โ€” Total subnet count
  • subnet_exists(netuid, block=None) โ€” Check subnet exists
  • is_hotkey_registered(netuid, hotkey_ss58, block=None) โ€” Check registration
  • get_uid_for_hotkey(netuid, hotkey_ss58, block=None) โ€” Get neuron UID
  • bonds(netuid, mechid=0, block=None) โ€” Bond distribution
  • weights(netuid, mechid=0, block=None) โ€” Weight matrix
  • tempo(netuid, block=None) โ€” Subnet tempo
  • difficulty(netuid, block=None) โ€” POW difficulty
  • immunity_period(netuid, block=None) โ€” Immunity period
  • blocks_since_last_step(netuid, block=None) โ€” Blocks since last epoch
  • blocks_until_next_epoch(netuid, block=None) โ€” Blocks until next epoch
  • get_subnet_burn_cost(netuid, block=None) โ€” Burn registration cost
  • get_subnet_price(netuid, block=None) โ€” Current Alpha/TAO price
  • get_subnet_prices(block=None) โ€” All subnet prices
  • get_subnet_hyperparameters(netuid, block=None) โ€” Hyperparameters
  • get_subnet_reveal_period_epochs(netuid, block=None) โ€” Reveal period
  • get_delegate_by_hotkey(hotkey_ss58, block=None) โ€” Delegate info
  • get_delegates(block=None) โ€” All delegates
  • get_delegated(coldkey_ss58, block=None) โ€” Delegation status
  • get_coldkey_swap_announcement(coldkey_ss58) โ€” Swap announcement
  • get_mev_shield_current_key() โ€” MEV shield key
  • close() โ€” Close connection

~130+ total methods on Subtensor class. Many methods accept these common keyword args: mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True

bittensor.core.async_subtensor โ€” AsyncSubtensor

Identical API to Subtensor but all methods are async. Takes same constructor args:

AsyncSubtensor(network=None, config=None, log_verbose=False, fallback_endpoints=None,
               retry_forever=False, archive_endpoints=None, websocket_shutdown_timer=5.0, mock=False)

All ~130+ methods match Subtensor but are await-able. Use when building async applications (FastAPI miners/validators).

bittensor.core.metagraph โ€” Metagraph

Metagraph(netuid, mechid=0, network=DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)
AsyncMetagraph(netuid, mechid=0, network=DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)
TorchMetagraph(netuid, ...)   # PyTorch tensor attributes
NonTorchMetagraph(netuid, ...)  # NumPy array attributes
MetagraphMixin(netuid, ...)    # Abstract base

Key attributes: n, S (stake), R (rewards), I (incentive), T (trust), C (consensus), hotkeys, coldkeys, uids, axon_infos, neurons, W (weights), bonds, emission, dividends, active, last_update, block

Methods: sync(block=None, lite=None, subtensor=None), save(root_dir=None), load(root_dir=None), state_dict(), metadata()

Factory: async_metagraph(netuid, ...) โ€” Creates pre-synced AsyncMetagraph

bittensor.core.axon โ€” Axon (Server)

Axon(wallet=None, config=None, port=None, ip=None, external_ip=None,
     external_port=None, max_workers=None)

Key methods:

  • attach(forward_fn, blacklist_fn=None, priority_fn=None, verify_fn=None) โ€” Register handlers
  • serve(netuid, subtensor=None, certificate=None) โ€” Register on-chain
  • start() / stop() โ€” Server lifecycle
  • info() โ€” Get AxonInfo
  • default_verify(synapse) โ€” Signature verification middleware
  • verify_body_integrity(request) โ€” Request body integrity check

Also: AxonMiddleware (Starlette middleware for request processing), FastAPIThreadedServer (uvicorn in a thread)

bittensor.core.dendrite โ€” Dendrite (Client)

Dendrite(wallet=None)
DendriteMixin(wallet=None)  # Shared base

Key methods:

  • query(target_axon, synapse, timeout=12.0) โ€” Sync query to axon(s)
  • aquery(target_axon, synapse, timeout=12.0) โ€” Async query
  • preprocess_synapse_for_request(target_axon_info, synapse, timeout=12.0) โ€” Build headers + sign
  • process_server_response(server_response, json_response, local_synapse) โ€” Merge server state
  • close_session() / aclose_session() โ€” Cleanup

bittensor.core.synapse โ€” Synapse

Synapse()           # Base (Pydantic BaseModel)
TerminalInfo()      # Neuron metadata carrier

Synapse methods: deserialize(), get_total_size(), to_headers(), from_headers(headers), body_hash(), parse_headers_to_inputs(headers), get_required_fields()

TerminalInfo: cast_float(raw), cast_int(raw), get_size(obj)

bittensor.core.stream โ€” BTStreamingResponseModel

Streaming response support for large data transfers between neurons.

bittensor.core.threadpool โ€” PriorityThreadPoolExecutor

Priority-based thread pool used internally by Axon for request handling.

bittensor.core.tensor

Tensor serialization utilities for network communication.

bittensor.core.config โ€” Config

Configuration object parsed from CLI args. Used throughout the framework.

bittensor.core.settings โ€” DEFAULTS

Default settings: axon (ip, port, max_workers), logging (debug, trace, info, logging_dir), priority (max_workers, maxsize), subtensor (chain_endpoint, network), wallet (name, hotkey, path).

bittensor.core.types

Shared types: AxonInfo, PrometheusInfo, SubnetInfo, NeuronInfo, NeuronInfoLite, DelegateInfo, StakeInfo, ProposalVoteData, etc. Also SubtensorMixin base class.

bittensor.core.errors

Exception hierarchy: ChainConnectionError, ChainTransactionError, IdentityError, StakeError, MetadataError, PriorityException, AxonException, DendriteException, SynapseException, StreamException, ConfigException, etc.

Chain Data Models (26 modules)

All under bittensor.core.chain_data:

ModelDescription
AxonInfoNeuron axon endpoint: ip, port, ip_type, protocol, version, placeholder1/2
ChainIdentityOn-chain identity: name, url, description, discord, github_repo, additional
ColdkeySwapColdkey swap execution data
CrowdloanInfoCrowdloan details: id, cap, raised, end, min_contribution, target
DelegateInfoDelegate: hotkey_ss58, total_stake, take, nominators, owner_ss58
DelegateInfoLiteLightweight delegate info
DynamicInfoSubnet dynamic parameters
InfoBaseBase dataclass for all info types
IPInfoIP: ip, ip_type, port, protocol
MetagraphInfoMetagraph metadata
NeuronInfoFull neuron: hotkey, coldkey, uid, netuid, stake, rank, trust, incentive, emission, axon_info, prometheus_info, etc.
NeuronInfoLiteLightweight neuron info
PrometheusInfoPrometheus endpoint: ip, port, version
ProposalVoteDataGovernance proposal vote data
ProxyProxy relationship: delegate, proxy_type, delay
RootClaimRoot claim data
ScheduledColdkeySwapInfoScheduled swap details
SimSwapSimulated swap result
StakeInfoStake: hotkey_ss58, coldkey_ss58, stake
SubnetHyperparametersFull hyperparameter set for a subnet
SubnetIdentitySubnet identity: subnet_name, subnet_url, subnet_contact, logo_url, description, discord, github_repo, additional
SubnetInfoSubnet: netuid, owner, tempo, emission, dynamic_info
SubnetStateSubnet state data
WeightCommitInfoWeight commit-reveal info
utilsChain data utility functions

Extrinsics โ€” Pallet Operations

Sync Extrinsics (bittensor.core.extrinsics)

Each module provides functions that compose and submit extrinsics:

  • staking โ€” add_stake, add_stake_burn, add_stake_multiple, move_stake, swap_stake, transfer_stake, unstake, unstake_all, unstake_multiple
  • unstaking โ€” remove_stake, remove_stake_limit, remove_stake_full_limit, unstake_all_alpha
  • registration โ€” burned_register, register, register_limit, root_register
  • weights โ€” set_weights, commit_weights, reveal_weights, batch_set_weights, batch_commit_weights, batch_reveal_weights
  • serving โ€” serve_axon, serve_axon_tls, serve_prometheus
  • root โ€” claim_root, root_register, root_dissolve_network, set_root_claim_type
  • proxy โ€” add_proxy, remove_proxy, remove_proxies, announce_proxy, proxy, proxy_announced
  • transfer โ€” transfer, transfer_stake
  • coldkey_swap โ€” announce_coldkey_swap, swap_coldkey, swap_coldkey_announced, clear_coldkey_swap_announcement, dispute_coldkey_swap
  • crowdloan โ€” create, contribute, dissolve, finalize, refund, update_cap, update_end, update_min_contribution, withdraw
  • liquidity โ€” add_liquidity, remove_liquidity, modify_liquidity, toggle_user_liquidity, swap_stake
  • mev_shield โ€” mev_submit_encrypted
  • take โ€” increase_take, decrease_take
  • children โ€” set_children, swap_hotkey
  • sudo โ€” Admin/root operations
  • start_call โ€” Start call
  • move_stake โ€” move_stake, swap_stake, transfer_stake
  • utils โ€” Helper utilities

Async Extrinsics (bittensor.core.extrinsics.asyncex)

Identical module structure but async versions. All functions are async def.

Pallet Definitions (bittensor.core.extrinsics.pallets)

Constants for pallet names used in extrinsics:

  • admin_utils โ€” Admin utility pallet constants
  • balances โ€” Balance transfer constants (Transfer, TransferKeepAlive, TransferAllowDeath, etc.)
  • base โ€” Base pallet shared types
  • commitments โ€” Commitment pallet
  • crowdloan โ€” Crowdloan pallet
  • mev_shield โ€” MEV shield pallet
  • proxy โ€” Proxy pallet types
  • subtensor_module โ€” Main SubtensorModule pallet
  • sudo โ€” Sudo pallet
  • swap โ€” Swap pallet

Extras

bittensor.extras.subtensor_api โ€” SubtensorApi

High-level wrapper providing a unified interface over both Subtensor and AsyncSubtensor:

SubtensorApi(network=None, config=None, async_subtensor=False, legacy_methods=False,
             fallback_endpoints=None, retry_forever=False, log_verbose=False,
             mock=False, archive_endpoints=None, websocket_shutdown_timer=5.0)

Properties (each returns a sub-API instance):

  • .chain โ€” Chain: get_current_block, get_block_hash, get_timestamp, state_call, tx_rate_limit, is_fast_blocks, last_drand_round, get_existential_deposit, get_minimum_required_stake, etc. (15 methods)
  • .commitments โ€” Commitments: get_commitment, get_all_commitments, set_commitment, commit_reveal_enabled, etc. (12 methods)
  • .crowdloans โ€” Crowdloans: create_crowdloan, contribute_crowdloan, dissolve_crowdloan, finalize_crowdloan, get_crowdloans, etc. (14 methods)
  • .delegates โ€” Delegates: get_delegates, get_delegate_by_hotkey, get_delegate_take, set_delegate_take, get_delegated, etc. (7 methods)
  • .extrinsics โ€” Extrinsics: add_stake, set_weights, burned_register, serve_axon, etc. (45 methods)
  • .metagraphs โ€” Metagraphs: metagraph, get_metagraph_info, get_all_metagraphs_info
  • .mev_shield โ€” MevShield: get_mev_shield_current_key, get_mev_shield_next_key, mev_submit_encrypted
  • .neurons โ€” Neurons: neurons, neurons_lite, neuron_for_uid, query_identity, get_neuron_certificate
  • .proxies โ€” Proxy: add_proxy, remove_proxy, get_proxies, etc. (16 methods)
  • .queries โ€” Queries: query_subtensor, query_map, query_constant, query_module, query_runtime_api
  • .staking โ€” Staking: add_stake, unstake, move_stake, swap_stake, claim_root, get_stake, etc. (30 methods)
  • .subnets โ€” Subnets: all_subnets, get_subnet_info, get_subnet_hyperparameters, register, etc. (45 methods)
  • .utils โ€” Utility functions
  • .wallets โ€” Wallets: get_balance, get_balances, transfer, get_stake, is_hotkey_registered, etc. (35 methods)

Each sub-API class takes subtensor: Union[Subtensor, AsyncSubtensor] and supports both sync and async.

bittensor.extras.dev_framework โ€” Test Framework

calls module: ~184 namedtuple call blueprints for constructing extrinsics. Divided into:

  • non_sudo_calls (~100 namedtuples): ADD_STAKE, SET_WEIGHTS, REGISTER, BURNED_REGISTER, COMMIT_WEIGHTS, REVEAL_WEIGHTS, TRANSFER, etc.
  • sudo_calls (~84 namedtuples): SUDO_SET_TEMPO, SUDO_SET_DIFFICULTY, SUDO_SET_MAX_ALLOWED_UIDS, etc.
  • pallets (string constants): AdminUtils, Balances, Commitments, Crowdloan, MevShield, Proxy, SubtensorModule, Sudo, Swap, etc.

subnet module: TestSubnet class for test subnet lifecycle management.

utils module: ActivateSubnet, RegisterNeuron, RegisterSubnet helpers.

bittensor.extras.timelock โ€” Time-Lock Encryption

Drand QuickNet-based TLE:

encrypt(data, n_blocks, block_time=12.0) -> tuple  # (encrypted_data, reveal_round)
decrypt(encrypted_data, no_errors=True, return_str=False)
wait_reveal_and_decrypt(encrypted_data, reveal_round=None, no_errors=True, return_str=False) -> bytes

Use block_time=0.25 for fast-blocks nodes.

Utils

bittensor.utils.balance โ€” Balance

Balance(balance: int | float)  # int=rao, float=tao

Static methods: from_tao(amount), from_rao(amount), from_float(amount), get_unit(netuid) Properties: tao (float), rao (int), unit (str), rao_unit (str) Helpers: tao(amount, netuid=0) -> Balance, rao(amount, netuid=0) -> Balance

bittensor.utils.btlogging โ€” Logging

Custom logging subsystem with state machine:

LoggingMachine(config, name="bittensor")  # StateMachine + logging.Logger

States: Default, Debug, Trace, Info, Warning, Disabled Methods: debug(), info(), warning(), error(), success(), trace(), critical(), exception() Toggle: set_debug(on), set_trace(on), set_info(on), on(), off() Console: BittensorConsole with info(), success(), warning(), error(), critical(), debug() Formatters: BtFileFormatter, BtStreamFormatter (colors, emojis, millisecond timestamps) Config: LoggingConfig namedtuple โ€” debug, info, trace, record_log, logging_dir, enable_third_party_loggers

Global toggles: btlogging.debug(on), btlogging.trace(on), btlogging.info(on), btlogging.warning(on)

bittensor.utils.weight_utils โ€” Weight Processing (12 functions)

  • normalize_max_weight(x, limit=0.1) โ€” Normalize with max cap
  • process_weights(uids, weights, num_neurons, min_allowed_weights, max_weight_limit, exclude_quantile=0) โ€” Full weight processing
  • process_weights_for_netuid(uids, weights, netuid, subtensor, metagraph=None, exclude_quantile=0) โ€” Subnet-aware processing
  • convert_weights_and_uids_for_emit(uids, weights) โ€” To chain format
  • convert_weight_uids_and_vals_to_tensor(n, uids, weights) โ€” From chain format
  • convert_root_weight_uids_and_vals_to_tensor(n, uids, weights, subnets) โ€” Root weights
  • generate_weight_hash(address, netuid, uids, values, version_key, salt) โ€” Commit hash

bittensor.utils.liquidity โ€” Liquidity Math

Uniswap V3-style: price_to_tick(price), tick_to_price(tick), calculate_fees(...), get_fees(...)

LiquidityPosition dataclass: id, netuid, liquidity, price_low, price_high, fees_tao, fees_alpha Method: to_token_amounts(current_subnet_price) -> (alpha_amount, tao_amount)

bittensor.utils.networking

get_external_ip(), get_formatted_ws_endpoint_url(url), int_to_ip(int), ip_to_int(str), ip_version(str)

bittensor.utils.registration.torch_utils

LazyLoadedTorch โ€” lazy torch import proxy legacy_torch_api_compat(func) โ€” Decorator for torchโ†”numpy compatibility use_torch() โ€” Check/enable torch mode

bittensor.utils.axon_utils

allowed_nonce_window_ns(current_time_ns, synapse_timeout) โ€” Nonce window calculate_diff_seconds(current_time, synapse_timeout, synapse_nonce) โ€” Time diff

Other Utils

  • bittensor.utils.version: check_version(timeout), get_and_save_latest_version(timeout)
  • bittensor.utils.formatting: get_human_readable(num), millify(n)
  • bittensor.utils.subnets: SubnetsAPI(wallet) โ€” Community ABC for subnet querying
  • bittensor.utils: unlock_key(wallet), is_valid_ss58_address(addr), decode_hex_identity_dict(d), format_error_message(err), strtobool(val), float_to_u64(val), u16_normalized_float(x), determine_chain_endpoint_and_network(network)

Common Patterns

MEV Protection

Most extrinsic methods accept these keyword args:

mev_protection=DEFAULT_MEV_PROTECTION  # Enable MEV shielding
period=DEFAULT_PERIOD                   # Blocks to wait for inclusion
raise_error=False                       # Raise on failure instead of returning error
wait_for_inclusion=True                 # Wait for block inclusion
wait_for_finalization=True              # Wait for block finalization
wait_for_revealed_execution=True        # Wait for MEV reveal period

Safe Staking

subtensor.add_stake(wallet, netuid=1, hotkey_ss58=addr, amount=amount,
                    safe_staking=True,       # Price protection
                    allow_partial_stake=True, # Accept partial fill
                    rate_tolerance=0.005)     # 0.5% slippage

Async Pattern

async with bt.AsyncSubtensor(network="finney") as subtensor:
    metagraph = await subtensor.metagraph(netuid=1)
    result = await subtensor.add_stake(wallet, netuid=1, ...)

Using SubtensorApi (Recommended for new code)

api = bt.SubtensorApi(network="finney")
block = api.block
info = api.subnets.get_subnet_info(netuid=1)
stake = api.staking.add_stake(wallet, netuid=1, ...)

Network Types

  • finney โ€” Mainnet
  • test โ€” Testnet
  • local โ€” Local dev chain

Key Constants

  • RAOPERTAO = 1_000_000_000.0 (1 TAO = 1e9 Rao)
  • U16_MAX = 65535, U32_MAX = 4294967295, U64_MAX = 18446744073709551615
  • GLOBAL_MAX_SUBNET_COUNT = 4096

Examples

Complete Miner

import bittensor as bt

subtensor = bt.Subtensor(network="finney")
wallet = bt.Wallet(name="miner", hotkey="hk1")

# Register
subtensor.burned_register(wallet, netuid=1, wait_for_inclusion=True)

# Check position
mg = subtensor.metagraph(netuid=1)
uid = mg.hotkeys.index(wallet.hotkey.ss58_address)
print(f"UID: {uid}, Stake: {mg.S[uid]}, Emission: {mg.emission[uid]}")

Complete Validator

import bittensor as bt
import numpy as np

subtensor = bt.Subtensor(network="finney")
wallet = bt.Wallet(name="validator", hotkey="vk1")

mg = subtensor.metagraph(netuid=1)
weights = np.random.rand(mg.n)
weights = weights / weights.sum()

subtensor.set_weights(wallet, netuid=1, uids=np.arange(mg.n),
                      weights=weights,
                      wait_for_inclusion=True, wait_for_finalization=True)

Axon Server

import bittensor as bt

def forward(synapse): ...
def blacklist(synapse): ...
def priority(synapse): ...

wallet = bt.Wallet(name="miner", hotkey="hk1")
axon = bt.Axon(wallet=wallet, port=8091)
axon.attach(forward_fn=forward, blacklist_fn=blacklist, priority_fn=priority)
axon.serve(netuid=1)
axon.start()

Dendrite Client

import bittensor as bt

dendrite = bt.Dendrite(wallet=bt.Wallet(name="validator", hotkey="vk1"))
metagraph = bt.Subtensor(network="finney").metagraph(netuid=1)
responses = dendrite.query(metagraph.axons, bt.Synapse(), timeout=12)

Liquidity Management

subtensor.add_liquidity(wallet, netuid=1,
                        liquidity=bt.Balance.from_tao(100),
                        price_low=bt.Balance.from_tao(50),
                        price_high=bt.Balance.from_tao(200),
                        wait_for_inclusion=True)

Time-Lock Encryption

from bittensor.extras.timelock import encrypt, decrypt, wait_reveal_and_decrypt

encrypted, reveal_round = encrypt(b"secret data", n_blocks=100)
# Later, after enough blocks...
data = wait_reveal_and_decrypt(encrypted)

Troubleshooting

Connection issues: Use fallback endpoints and retry_forever=True

subtensor = bt.Subtensor(network="finney",
    fallback_endpoints=["wss://entrypoint-finney.opentensor.ai:443"],
    retry_forever=True)

Registration fails: Check balance, try alternative method. Use register_limit() for price protection.

Weight setting fails: Verify commit-reveal cycle. Check commit_reveal_enabled(netuid) first.

Rate limiting: Space out extrinsics. Use period= parameter to control inclusion window.

Wallet not found: Use bt.Wallet(name="...").create_if_non_existing() or bt.Wallet(name="...", hotkey="...").regenerate_coldkey(...).

References

ๅฆ‚ไฝ•ไฝฟ็”จใ€ŒBittensor SDKใ€๏ผŸ

  1. ๆ‰“ๅผ€ๅฐ้พ™่™พAI๏ผˆWeb ๆˆ– iOS App๏ผ‰
  2. ็‚นๅ‡ปไธŠๆ–นใ€Œ็ซ‹ๅณไฝฟ็”จใ€ๆŒ‰้’ฎ๏ผŒๆˆ–ๅœจๅฏน่ฏๆก†ไธญ่พ“ๅ…ฅไปปๅŠกๆ่ฟฐ
  3. ๅฐ้พ™่™พAI ไผš่‡ชๅŠจๅŒน้…ๅนถ่ฐƒ็”จใ€ŒBittensor SDKใ€ๆŠ€่ƒฝๅฎŒๆˆไปปๅŠก
  4. ็ป“ๆžœๅณๆ—ถๅ‘ˆ็Žฐ๏ผŒๆ”ฏๆŒ็ปง็ปญๅฏน่ฏไผ˜ๅŒ–

็›ธๅ…ณๆŠ€่ƒฝ