Neuron Registration

Registration

Process for new neurons to join subnets via Proof-of-Work or TAO burn, obtaining a UID slot.

Click items to navigate to their reference pages.

The Big Picture

Registration is the gateway to participating in a subnet. Every miner and validator must register to get a UID slot. Two methods exist: solving a hash puzzle (PoW) or burning TAO. When all slots are full, new registrations prune the worst-performing neuron. Costs adjust dynamically based on demand.

Why This Matters

Registration cost is the barrier to entry for each subnet. High costs indicate competitive subnets. Understanding the cost dynamics helps you choose between PoW and burn, and time your registration.

Example Scenario

Subnet 1 has 256 UID slots, all full. Current burn: 0.5 TAO. Current PoW difficulty: 4M. At average consumer hardware (~1MH/s), PoW registration takes ~4 seconds. If 20 registrations happen in the last interval (target: 10), next interval's burn doubles to 1.0 TAO and difficulty doubles to 8M.

Common Questions

PoW or burn — which is cheaper?
It depends on your hardware cost vs. TAO price. Generally, burn is simpler and more predictable. PoW is favored when burn costs are high relative to electricity costs.
What happens when I register on a full subnet?
The neuron with the lowest pruning score (essentially the worst performer) is evicted and your hotkey takes its UID slot. Their stake is not affected — just the UID.

Use Cases

  • Estimating registration costs before deploying
  • Choosing between PoW and burn registration
  • Monitoring subnet registration demand
  • Building auto-registration tools

Neurons must register to participate in a subnet. Registration assigns a UID (0 to MaxAllowedUids-1) to the neuron's hotkey. Two methods exist: Proof-of-Work registration (solving a hash puzzle) and burned registration (paying a TAO cost).

When all UID slots are full, new registrations replace the lowest-performing existing neuron (pruning). PoW difficulty and burn costs adjust dynamically based on registration demand.

Triggers

  • User submits register (PoW) or burned_register call
  • Faucet call on testnet

Inputs (5)

ItemTypeRole
register SubtensorModulecallPoW-based registration
burned_register SubtensorModulecallBurn-based registration
MaxAllowedUids SubtensorModulestorageMaximum neuron slots per subnet
Difficulty SubtensorModulestorageCurrent PoW difficulty
Burn SubtensorModulestorageCurrent burn cost for registration

Outputs (4)

ItemTypeRole
NeuronRegistered SubtensorModuleeventEmitted on successful registration
Uids SubtensorModulestorageHotkey → UID mapping
Keys SubtensorModulestorageUID → hotkey mapping
IsNetworkMember SubtensorModulestorageWhether hotkey is registered on subnet

Source Files

pallets/subtensor/src/subnets/registration.rs
do_registration()do_burned_registration()
pallets/subtensor/src/coinbase/block_step.rs
adjust_registration_terms_for_networks()upgraded_difficulty()upgraded_burn()

Formulas

PoW Difficulty Adjustment

Difficulty adjusts based on how many registrations occurred in the last interval relative to the target. Applied only when the 6-case conditional logic selects PoW adjustment (see Adjustment Cases below).

updated = current_difficulty * (actual + target) / (2 * target)
alpha = AdjustmentAlpha / u64::MAX
new_difficulty = alpha * current_difficulty + (1 - alpha) * updated
clamped to [min_difficulty, max_difficulty]

TypeScript: computeDifficultyAdjustment() in yuma-formulas.ts

Burn Cost Dynamics

Burn cost adjusts similarly to difficulty — rising when registrations exceed the target and falling when below. Applied only when the 6-case conditional logic selects burn adjustment.

updated = current_burn * (actual + target) / (2 * target)
alpha = AdjustmentAlpha / u64::MAX
new_burn = alpha * current_burn + (1 - alpha) * updated
clamped to [min_burn, max_burn]

TypeScript: computeBurnCost() in yuma-formulas.ts

Adjustment Cases

Every adjustment_interval blocks, a 6-case conditional determines which parameter gets adjusted based on PoW vs burn registration counts.

pow_regs = PoW registrations in last interval
burn_regs = burn registrations in last interval
// Case 1: Both above target → increase both difficulty and burn
// Case 2: PoW above, burn below → increase difficulty, decrease burn
// Case 3: PoW below, burn above → decrease difficulty, increase burn
// Case 4: Both below target → decrease both
// Case 5: No PoW regs → decrease difficulty only
// Case 6: No burn regs → decrease burn only

Registration Cost Estimator

Registration Cost Estimator

Estimate how PoW difficulty and burn cost adjust based on registration demand

= 500,000,000 RAO
0 25 50
1 25 50
At Target (10/10 = 100%)
Costs remain stable at equilibrium

Proof of Work

Cheaper
Difficulty
4,000,000
was 4,000,000
Estimated Time
@ 1 MH/s 4.0s
@ 10 MH/s 400ms
@ 100 MH/s 40ms
Est. electricity @ 10 MH/s ~$0.0000
Assumes 300W GPU, $0.10/kWh

Burn Registration

Burn Cost
0.5000 TAO
was 0.5000 TAO
Details
In RAO 500,000,000
Change +0.0%
Method Instant
Burn is deterministic: pay the exact cost and register immediately. No mining hardware or electricity needed.

How it works: Both difficulty and burn cost adjust based on registration demand. When registrations exceed the target, costs increase (up to 2x). When below target, costs decrease (down to 0.5x). This creates an equilibrium around the target rate.

Try: Slide "Recent Registrations" above and below the target to see how costs adjust. Notice that both PoW and Burn scale by the same ratio, keeping them roughly balanced.

Related Workflows

register-neuron-powregister-neuron-burn

Version History

v101 Initial registration with PoW
v150 Added burned registration option
v200 Per-subnet difficulty and burn tracking
v250 Target registrations per interval made configurable
v290 Registration costs denominated in subnet Alpha
v360 Recycle register: unused UID slots auto-cleared