register
Call v101 → v277, v290 → current #6Registers a neuron using proof-of-work solution.
View calls on chainCall Workflow
Click items to navigate. Pan and zoom to explore.
The Big Picture
POW registration is the original, capital-free way to join a subnet. Instead of burning TAO, you solve a cryptographic puzzle. The difficulty adjusts based on demand - popular subnets require more computation. This democratizes access: anyone with compute power can participate, regardless of TAO holdings.
Why This Matters
Burn registration favors those with TAO. POW registration favors those with compute. This balance ensures the network isn't purely pay-to-play. Small operators can grind their way in through computation.
Example Scenario
You want to join subnet 1 but the burn cost is 2 TAO - more than you have. You run the POW solver: `btcli s register --netuid 1 --pow_register`. After 30 minutes of GPU work, you find a valid solution. Submit with register(netuid=1, work=solution). You're registered without spending any TAO.
Common Questions
- How long does POW registration take?
- It varies wildly - minutes to hours depending on subnet difficulty, your hardware, and luck. Check RegistrationDifficulty to estimate. GPU acceleration helps significantly.
- Is my POW solution single-use?
- Yes. Each solution is unique to your hotkey and the current block range. Solutions expire - you can't compute one today and use it next week.
- When is POW better than burn?
- When burn cost > value of your compute time, or when you're capital-constrained but have idle GPU capacity. Many miners run POW overnight to avoid burn costs.
Use Cases
- Register on a subnet without spending TAO
- Join competitive subnets where burn cost is high
- Prove commitment through computational work
- Bootstrap mining operations with limited capital
From Chain Metadata
- Registers a new neuron to the subnetwork.
Input Parameters
| # | Name | Type | Description |
|---|---|---|---|
| 0 | netuid | u16 NetUid | netuid: Subnet ID (u16, 0-65535) |
| 1 | block_number | u64 | block_number (u64) (RAO -> TAO (/ 10^9)) |
| 2 | nonce | u64 | nonce (u64) |
| 3 | work | Vec<u8> Vec | work (Vec<u8>) |
| 4 | hotkey | AccountId | hotkey: Account address (32 bytes, SS58-encoded) (hex -> SS58) |
| 5 | coldkey | AccountId | coldkey: Account address (32 bytes, SS58-encoded) (hex -> SS58) |
Permissions
Requirements
- Subnet exists and accepts registrations
- Hotkey not already registered on this subnet
- Valid POW solution provided
- POW difficulty met
Effects
Events Emitted
Storage Modified
Postconditions
- Neuron registered with assigned UID
- Hotkey-coldkey association recorded
- Subnet's neuron count increased
Side Effects
- May prune lowest-performing neuron if subnet is full
Possible Errors
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);
// Build register call (typed, named args)
const netuid = 1;
const block_number = 0n;
const nonce = 0n;
const work = Binary.fromOpaque(new Uint8Array(0));
const hotkey = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
const coldkey = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
const tx = api.tx.SubtensorModule.register({
netuid,
block_number,
nonce,
work,
hotkey,
coldkey,
});On-Chain Activity
Significant regular use
#23 most used call
Under 5% succeed — vast majority fail due to competition
As of block 7,429,232
Version History
Runtime Info
View Source- Pallet Index
- 7
- Call Index
- 6
- First Version
- v101
- Current Version
- v411