Hyperparameters
min_difficulty
Lower bound for the PoW registration difficulty controller; u64::MAX pins difficulty at maximum, disabling PoW registration.
min_difficulty is the floor under
difficulty, the proof-of-work target
for PoW neuron registration. However cheap registrations get, the
difficulty controller never lets the PoW price fall below this value.
Setting it to u64::MAX pins difficulty at maximum, which effectively
disables PoW registration outright. Miners care because it fixes the
minimum compute cost of a PoW slot; root/governance sets it.
How it works
Storage is MinDifficulty in pallets/subtensor/src/lib.rs, read and
written by get_min_difficulty / set_min_difficulty
(pallets/subtensor/src/utils/misc.rs). In the classic controller,
difficulty was rescaled each adjustment interval by how far registrations
ran over or under target, then clamped to the
[min_difficulty, max_difficulty] band — so with quiet demand,
difficulty decayed until it sat on this floor.
The chain-wide migration migrate_set_min_difficulty
(pallets/subtensor/src/migrations/migrate_set_min_difficulty.rs) set the
floor to 10,000,000 on every subnet, matching the runtime default
(SubtensorInitialMinDifficulty in runtime/src/lib.rs).
Note that on the current runtime PoW registration is deprecated: the
register extrinsic routes to burned registration and no controller
adjusts difficulty between intervals, so this floor is dormant. The
playground below opens on a quiet-demand scenario where difficulty decays
until it sits on the bold floor line — drag the floor to its top stop (or
use the button) to see the u64::MAX disabled state:
This scenario starts with quiet demand (0 registrations vs a target of 2), so the controller decays difficulty every interval — until it lands on the bold min_difficulty floor and sits there. The floor is the one price the controller could never undercut. Drag the floor to its top stop (or use the button) for the u64::MAX disabled state.
Difficulty after 48 intervals
1.0e7
pinned at floor
Odds a single nonce passes
≈ 1 in 1.0e7
hash_meets_difficulty → expect ~1.0e7 hashes per registration
Registration pressure
0 regs vs target 2
under target: difficulty decays down
Reading and setting
btcli sudo get --netuid N --name min_difficultyRoot/governance only: sudo_set_min_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
difficulty ·
max_difficulty ·
network_pow_registration_allowed ·
target_regs_per_interval ·
adjustment_interval ·
min_burn