Hyperparameters
difficulty
Current PoW registration difficulty; u64::MAX means PoW registration is effectively disabled.
difficulty is the proof-of-work target a miner's registration nonce must
beat to claim a UID via PoW registration. It is a raw u64: finding a valid
nonce takes about difficulty hash attempts on average, so the value is a
direct price in compute. Miners planning PoW registration care about it;
u64::MAX is the sentinel for "no nonce can ever pass" — PoW registration
effectively disabled, burned registration only.
How it works
A PoW registration submits a seal built from a recent block hash, the
hotkey, and a nonce (create_seal_hash in
pallets/subtensor/src/subnets/registration.rs). The check is
hash_meets_difficulty: the seal hash times difficulty must not overflow
a 256-bit integer, which passes with probability roughly 1 in difficulty.
At u64::MAX essentially nothing passes.
On the current runtime this check no longer gates subnet registration: the
register extrinsic (pallets/subtensor/src/macros/dispatches.rs, call
index 6) accepts the work arguments but ignores them and routes to the
burned-registration path (do_register). No controller adjusts difficulty
anymore either — the per-block price update
(update_registration_prices_for_networks) only decays the burn cost. The
value stays on-chain, is reported in the metagraph, and root can still
change it. The seal check itself survives in the testnet faucet
(do_faucet, fixed difficulty 1,000,000).
Historically, difficulty walked between its floor and ceiling as the
chain steered registrations toward a target rate:
difficulty is a direct price in compute: hash_meets_difficulty passes with probability about 1 in difficulty, so a nonce costs ~difficulty hash attempts on average. The classic controller rescaled it by (regs + target) / (2 × target) each adjustment interval, clamped to [min_difficulty, max_difficulty]. On the current runtime the register extrinsic routes to burned registration, so this controller no longer runs.
Difficulty after 48 intervals ← this page
1.0e16
pinned at ceiling
Odds a single nonce passes ← this page
≈ 1 in 1.0e16
hash_meets_difficulty → expect ~1.0e16 hashes per registration
Registration pressure
6 regs vs target 2
over target: difficulty ratchets up
Reading and setting
btcli sudo get --netuid N --name difficultyRoot/governance only: sudo_set_difficulty in the AdminUtils pallet
requires the root origin and takes a raw u64. It is not settable by the
subnet owner via btcli sudo set.
Related
min_difficulty ·
max_difficulty ·
network_pow_registration_allowed ·
registration_allowed ·
max_regs_per_block ·
min_burn ·
max_burn