Hyperparameters
difficulty
Current PoW registration difficulty; u64::MAX means PoW registration is effectively disabled.
difficulty is the current compute price of PoW subnet registration. A value
of D takes roughly D hash attempts on average. Direct zero-tip PoW pays no
TAO burn, transaction fee or initial collateral purchase.
How it works
PoW and burn have independent demand signals. A successful PoW registration
multiplies only PoW difficulty by
burn_increase_mult; a burn registration
increases only burn cost. Both reuse the same multiplier and
burn_half_life setting, while each price
decays toward its own minimum each block:
after PoW registration: D = clamp(floor(D × multiplier), min_difficulty, max_difficulty)
after each block: D = clamp(floor(D × 2^(-1 / half_life)), min_difficulty, max_difficulty)The chain uses the same fixed-point rounding as burn pricing. The two prices
have different units and their own bounds: burn is measured in rao, difficulty
in expected hash attempts. MinDifficulty remains root/governance controlled;
an owner-controlled maximum below this minimum cannot bypass the minimum.
The effective floor is at least one. Existing stored difficulty values bootstrap
the controller; no reset or new price storage is introduced.
Defaults are a multiplier of 1.26 and half-life of 360 blocks. Away from bounds
and rounding, one PoW registration per half_life × log2(multiplier) blocks balances
the decay (approximately 120 blocks with defaults). More PoW registrations
increase difficulty; quiet PoW demand lets it fall toward its floor, even while
miners continue registering through burn.
Updates continue when PoW admission is disabled, so toggling it does not reset
accumulated demand. Root remains burn-only; faucet work is separate.
The subnet owner enables PoW with network_pow_registration_allowed. Burn
registration has its own registration_allowed toggle; owners may enable either
method or both, and must leave at least one enabled.
The current proof binds subnet, block hash, hotkey, coldkey and nonce. The SDK
and CLI check current difficulty and refresh work invalidated by a price bump.
Historically, PoW and burn also shared their pricing parameters, using an interval/target-rate controller. This implementation uses today's burn controller: immediate registration bumps and per-block decay, rather than restoring the retired interval controller.
Reading and setting
btcli sudo get --netuid N --name difficultySubnet owner or root/governance:
sudo_set_difficulty
in the AdminUtils pallet takes a raw u64. Owner changes use the standard
per-parameter cooldown and admin freeze window, and can be delegated through
an Owner proxy. Root remains able to override the owner cooldown.
To enable PoW on a subnet whose floor is pinned at u64::MAX, lower
min_difficulty and then set difficulty to the desired starting value.
Both calls can be submitted atomically with Utility.batch_all; changing
one parameter does not consume the other parameter's cooldown.
Related
min_difficulty ·
max_difficulty ·
network_pow_registration_allowed ·
registration_allowed ·
max_regs_per_block ·
min_burn ·
max_burn