Hyperparameters

difficulty

Current PoW registration difficulty; u64::MAX means PoW registration is effectively disabled.

View as Markdown

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 difficulty

Subnet 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.

min_difficulty · max_difficulty · network_pow_registration_allowed · registration_allowed · max_regs_per_block · min_burn · max_burn