The Big Picture
Subnet owners have special powers - they can adjust hyperparameters, set requirements, and receive subnet-specific fees. This storage tells you who holds those powers. Ownership can be transferred, so this reflects current control.
Why This Matters
Who runs subnet 18? Can you trust the subnet operator? This answers ownership questions. Also critical before calling owner-only functions - the chain will reject calls from non-owners.
Example Scenario
Query SubnetOwner(netuid=1) returns 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY. That SS58 address is the coldkey that controls subnet 1's parameters.
Common Questions
- Can ownership be transferred?
- Yes, the owner can transfer ownership to another coldkey using the appropriate call.
- What powers does the owner have?
- Owners can adjust hyperparameters (tempo, weights limits, etc.), update subnet metadata, and receive owner fees.
Use Cases
- Verify you own a subnet before calling admin functions
- Display subnet ownership information in explorers
- Track ownership transfers and subnet acquisitions
- Build subnet governance and ownership analytics
From Chain Metadata
MAP ( netuid ) --> subnet_owner
Purpose & Usage
Purpose
Track who controls subnet parameters and receives fees.
Common Query Patterns
- Query owner by netuid
- Verify ownership before admin operations
Query Keys
| # | Name | Type | Description |
|---|---|---|---|
| 1 | netuid | u16 | Subnet ID |
Stored Value
Decoding the value
AccountId (32-byte hex)Bittensor uses SS58 prefix 42 for both hotkeys and coldkeys. The 32 bytes are sr25519 public keys.
value as `0x${string}` // 32-byte AccountIdRelationships
Modified By
Code Examples
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443
const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);
// Query SubnetOwner storage
const netuid = 1;
const result = await api.query.SubtensorModule.SubnetOwner.getValue(netuid);
console.log("SubnetOwner:", result);Version History
Runtime Info
View Source- Pallet
- SubtensorModule
- Storage Kind
- Map
- First Version
- v133
- Current Version
- v411