The Big Picture
Axons are how neurons expose their services to the network. When validators want to query miners for inference (or any subnet-specific task), they look up the miner's Axon to get the IP/port. This is the discovery layer that makes Bittensor's machine learning marketplace actually work.
Why This Matters
You want to query a miner? You need their endpoint. Axons tell you where each neuron lives on the internet - IP address, port, and protocol version. Essential for any validator or client.
Example Scenario
Query Axons(netuid=1, uid=47) returns { ip: '1.2.3.4', port: 8091, ip_type: 4, version: 670, protocol: 4, placeholder1: 0, placeholder2: 0 }. Connect to 1.2.3.4:8091 to reach this miner.
Common Questions
- What if Axon shows 0.0.0.0?
- The neuron hasn't set their serving info, or is intentionally not serving. They won't receive queries and may have lower performance scores.
- How do I update my Axon?
- Use the serve_axon extrinsic to update your endpoint info. Subject to ServingRateLimit.
- What's the version field?
- Protocol version for compatibility. Validators may reject connections from outdated versions.
- Is there a rate limit on updates?
- Yes, check ServingRateLimit for how often you can update your Axon info.
Use Cases
- Connect to a miner's inference endpoint
- Build service discovery for subnet clients
- Monitor which neurons are actively serving
- Debug connectivity issues between neurons
- Create subnet health dashboards showing online neurons
Purpose & Usage
Purpose
Store endpoint information (IP, port, protocol) for neuron communication.
Common Query Patterns
- Query by netuid-uid for a specific neuron's endpoint
- Iterate all to discover available services
- Verify neuron is serving before queries
Query Keys
Stored Value
value (AxonInfo)
Relationships
Modified By
Related Events
Code Examples
import { ApiPromise, WsProvider } from "@polkadot/api";
import { stringCamelCase } from "@polkadot/util";
const provider = new WsProvider("wss://entrypoint-finney.opentensor.ai:443");
const api = await ApiPromise.create({ provider });
// Query Axons storage
const key1 = 0;
const key2 = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
const result = await api.query
[stringCamelCase("SubtensorModule")]
[stringCamelCase("Axons")](
key1,
key2
);
console.log("Axons:", result.toHuman());On-Chain Activity
1M–10M estimated writes
#22 most written storage item
Modified via user-submitted extrinsics
As of block 7,429,232
Runtime Info
View Source- Pallet
- SubtensorModule
- Storage Kind
- Map
- First Version
- v101
- Current Version
- v393