Subnet Configuration (Hyperparameters)
Bittensor subnets are configured with a set of state variables (known as hyperparameters) that are recorded on the blockchain. Many of these can be accessed (viewed and set) using the Bittensor CLI btcli, but some of them must be checked or set using Subtensor extrinsics, as noted.
Note that the names of the variables may be slightly different in various representations, e.g. in btcli and in the chain codebase.
Non-root neuron (UID) registration pricing is driven by BurnHalfLife and BurnIncreaseMult, with MinBurn and MaxBurn as bounds. Confirm live names and values with btcli subnet hyperparameters.
Manage hyperparams with btcli
This section covers how to use BTCLI to view, update, and verify network hyperparameters directly from the terminal.
View the hyperparameters
Any user can view the hyperparameters of any subnet by using the btcli subnets hyperparameters command and including the --netuid flag . The command displays the subnet hyperparameter information, including their values, descriptions, and permission information.
Example
btcli subnet hyperparameters --netuid 14
Run the command against your target network to see current hyperparameter names, values, and descriptions.
Set hyperparameters on BTCLI
Setting hyperparameters can be set using BTCLI requires the appropriate permissions. Only the subnet owner coldkey or a coldkey with root permissions can modify subnet hyperparameters. Hyperparameters that require root permissions cannot be set using BTCLI.
To set a hyperparameter:
btcli sudo set --netuid 14
Show sample output
Available hyperparameters:
# HYPERPARAMETER OWNER SETTABLE DESCRIPTION
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 activity_cutoff Yes Effective validator inactivity cutoff in blocks, computed as activity_cutoff_factor × tempo ÷ 1000. Read-only; set activity_cutoff_factor instead.
2 activity_cutoff_factor COMPLICATED Tolerated validator inactivity as per-mille of tempo (1000 = one full tempo). Effective cutoff in blocks = factor × tempo ÷ 1000. Allowed range: 1000
to 50000.
3 alpha_high Yes High bound of the alpha range for stake calculations.
4 alpha_low Yes Low bound of the alpha range for stake calculations.
5 alpha_sigmoid_steepness No (Root Only) Steepness parameter for alpha sigmoid function.
6 alpha_values Yes Alpha range for stake calculations.
7 bonds_moving_avg Yes Moving average window size for bond calculations.
8 bonds_reset_enabled Yes Enable or disable periodic bond resets.
9 burn_half_life Yes Half-life (in blocks) controlling how quickly the registration burn price decays back toward min_burn.
10 burn_increase_mult Yes Multiplier applied to the registration burn price after each successful registration.
11 commit_reveal_period Yes Duration (in blocks) for commit-reveal weight submission scheme.
12 commit_reveal_weights_enabled Yes Enable or disable commit-reveal scheme for weight submissions.
13 immunity_period Yes Duration (in blocks) during which newly registered neurons are protected from certain penalties.
14 kappa No (Root Only) Kappa determines the scaling factor for consensus calculations.
15 liquid_alpha_enabled Yes Enable or disable liquid alpha staking mechanism.
16 max_allowed_uids Yes Maximum number of UIDs (neurons) on the subnet, essentially 'untrimming'.
17 max_burn COMPLICATED Maximum TAO burn amount cap for subnet registration.
18 max_regs_per_block No (Root Only) Maximum number of registrations allowed per block.
19 max_validators No (Root Only) Maximum number of validators allowed in the subnet.
20 min_allowed_uids No (Root Only) Minimum number of UIDs (neurons) required for the subnet to remain active.
21 min_allowed_weights Yes Minimum number of weight connections a neuron must maintain to stay active.
22 min_burn Yes Minimum TAO burn amount required for subnet registration.
23 min_childkey_take Yes Minimum childkey take (%) required on this subnet. Settable by the subnet owner. Cannot be set below the global protocol minimum.
24 network_pow_registration_allowed Yes Enable or disable proof-of-work based registration.
25 owner_cut_auto_lock_enabled Yes Whether the subnet owner cut is automatically locked when collected.
26 owner_cut_enabled Yes Whether the subnet owner cut is taken from the subnet's emissions.
27 recycle_or_burn Yes Set whether subnet TAO is recycled or burned.
28 registration_allowed No (Root Only) Enable or disable new registrations to the subnet.
29 serving_rate_limit Yes Rate limit for serving requests.
30 sn_owner_hotkey Yes Set the subnet owner hotkey.
31 subnet_is_active Yes Whether the subnet is currently active and operational.
32 subnet_owner_hotkey Yes Alias for sn_owner_hotkey; sets the subnet owner hotkey.
33 target_regs_per_interval No (Root Only) Target number of new registrations per adjustment interval.
34 tempo COMPLICATED Number of blocks between automatic epoch transitions. Owner-settable between 360 and 50400 blocks (rate-limited to one change per 360 blocks); root
can set any value via sudo.
35 transfers_enabled Yes Enable or disable TAO transfers within the subnet.
36 weights_rate_limit No (Root Only) Maximum number of weight updates allowed per epoch.
37 weights_version Yes Version key for weight sets.
38 yuma3_enabled Yes Enable or disable Yuma3 consensus mechanism.
39 yuma_version Yes Version of the Yuma consensus mechanism.
Enter the number of the hyperparameter: 7
Selected: bonds_moving_avg
Moving average window size for bond calculations. link
Side Effects: Larger windows provide smoother bond values but slower response to changes. Smaller windows react faster but may be more volatile.
📚 Docs: https://docs.learnbittensor.org/subnets/subnet-hyperparameters#bondsmovingaverage
Enter the new value for bonds_moving_avg in the VALUE column format: 89000
Enter the wallet name (Hint: You can set this with `btcli config set --wallet-name`) (default): sn-creator
Enter your password:
Decrypting...
✅ Your extrinsic has been included as 1671-6
✅ Hyperparameter bonds_moving_avg changed to 89000
Set custom hyperparameters
You can also modify values for hyperparameters that are not included in the table. To do this, you must provide the hyperparameter's setter extrinsic and value when running the btcli sudo set command.
btcli sudo set --param SETTER_EXTRINSIC --value VALUE --netuid NETUID
When using custom hyperparameters, provide values in the format that matches their underlying type. For numeric types like u16 or u64, you must pass a normalized floating point value between 0 and 1. Alternatively, add the --normalize flag to provide a base-10 integer value instead.
For example, the following command sets the number of owner-immune neurons to four using a base-10 value:
btcli sudo set --param sudo_set_owner_immune_neuron_limit --value 4 --normalize
Runtime API: get_subnet_hyperparams_v3
The canonical runtime API for fetching subnet hyperparameters is get_subnet_hyperparams_v3. V1 and V2 are deprecated.
V3 returns Option<Vec<HyperparamEntry>> (None if the subnet does not exist). Each entry is:
struct HyperparamEntry {
name: Vec<u8>, // ASCII identifier, e.g. b"kappa"
value: HyperparamValue,
}
enum HyperparamValue {
Bool(bool),
U16(u16),
U32(u32),
U64(u64),
U128(u128),
TaoBalance(u64),
I32F32(i32f32),
U64F64(u64f64),
}
Clients look up params by name. Unknown names are forward-compatible additions and should be ignored rather than treated as errors.
Params removed from V3 (no longer returned): adjustment_alpha, adjustment_interval, difficulty, min_difficulty, max_difficulty, rho.
Params added in V3: burn_half_life, burn_increase_mult, owner_cut_enabled, owner_cut_auto_lock_enabled.
Subnet Hyperparameters
This section details all subnet hyperparameters, including their default values, descriptions, and the setter extrinsics required to modify them.
ActivityCutoff
With the introduction of dynamic tempos, the ActivityCutoff hyperparameter is no longer settable. Use the activity_cutoff_factor instead.
The BTCLI display for activity_cutoff still shows the computed block value for readability.
Type: u16
Default: 5000
btcli setter: btcli sudo set --param activity_cutoff
Setter extrinsic: sudo_set_activity_cutoff
Permissions required to set: Subnet owner
Description:
The number of blocks for the stake to become inactive for the purpose of epoch in Yuma Consensus. If a validator doesn't submit weights within the first ActivityCutoff blocks of the epoch, it will not be able to participate until the start of the next epoch.
ActivityCutoffFactor
Type: u32
Default: 13,889 (≈ 13.889 tempos—preserves the legacy 5,000-block cutoff at the default tempo of 360)
btcli setter: btcli sudo set --param activity_cutoff_factor
Setter extrinsic: set_activity_cutoff_factor
Permissions required to set: Subnet owner
Description:
The validator inactivity tolerance expressed in per-mille epochs (1/1000 granularity). Bounded by MinActivityCutoffFactorMilli—1000 and MaxActivityCutoffFactorMilli—50,000
See how its calculated
The effective cutoff in blocks is computed at runtime as:
cutoff_blocks = (ActivityCutoffFactorMilli × Tempo) / 1000
This means the activity cutoff scales automatically with tempo—a subnet with a longer tempo gets a proportionally longer inactivity window, which prevents validators from being excluded for not submitting weights at a rate that doesn't match their subnet's epoch schedule.
AlphaSigmoidSteepness
Type: i16
Default: 1000
btcli setter: btcli sudo set --param alpha_sigmoid_steepness
Setter extrinsic: sudo_set_alpha_sigmoid_steepness
Permissions required to set: Subnet owner
Description:
AlphaSigmoidSteepness determines how the consensus mechanism assigns an alpha value for a given miner-validator pair based on voting alignment. Lower steepness values result in moderate alpha values, while higher steepness values push alpha values closer to the defined alpha_low or alpha_high values.
AlphaValues
Type: nil
Default: nil
btcli setter: btcli sudo set --param sudo_set_alpha_values
Setter extrinsic: sudo_set_alpha_values
Permissions required to set: Subnet owner
Description:
The AlphaValues hyperparameter sets the values for liquid alpha on a subnet. Modifying the AlphaValues hyperparameter will require you to set the alpha_low and alpha_high values for the subnet.
BondsMovingAverage
Type: u64
Default:
btcli setter: btcli sudo set --param bonds_moving_avg
btcli setter: sudo_set_bonds_moving_average
Permissions required to set: Subnet owner
Description:
The moving average of bonds. The higher bonds yield to higher dividends for validators.
See Yuma Consensus: bonding mechanics.
BondsPenalty
Type: u16
Default: 0
btcli setter: none
Setter extrinsic: sudo_set_bonds_penalty
Permissions required to set: Subnet owner
Description: The magnitude of the penalty subtracted from weights for exceeding consensus, for a specific subnet.
See Yuma Consensus: Penalizing out-of-consensus bonds.
BondsResetEnabled
Type: Bool
Default: False
btcli setter: btcli sudo set --param bonds_reset_enabled
Setter extrinsic: sudo_set_bonds_reset_enabled
Permissions required to set: Subnet owner
Description:
Determines whether or not bonds are reset-enabled.
BurnHalfLife
Type: Confirm on target network (typically a block count)
Default: Network-dependent; use btcli subnet hyperparameters
btcli setter: Use the parameter name as listed by btcli subnet hyperparameters on your network (often burn_half_life)
Setter extrinsic: sudo_set_burn_half_life
Permissions required to set: Subnet owner
Description:
BurnHalfLife sets the decay horizon (in blocks) for the neuron registration burn cost between registrations: a longer half-life means the price falls more slowly when nobody registers.
BurnIncreaseMult
Type: Confirm on target network (floating-point multiplier in the runtime)
Default: Network-dependent; use btcli subnet hyperparameters
btcli setter: Use the parameter name as listed by btcli subnet hyperparameters on your network (often burn_increase_mult)
Setter extrinsic: sudo_set_burn_increase_mult
Permissions required to set: Subnet owner
Description:
BurnIncreaseMult is the factor by which the current neuron registration burn cost is multiplied when a registration succeeds (before MinBurn / MaxBurn clamping). Higher values make rapid successive registrations more expensive.
CommitRevealPeriod
Type: u64
Default: 1
btcli setter: btcli sudo set --param commit_reveal_period
Setter extrinsic: sudo_set_commit_reveal_weights_interval
Permissions required to set: Subnet owner
Description:
The number of tempos (epochs) that must elapse before validator weights are revealed from time-lock encryption. Prevents weight-copying.
Important: This is measured in tempos, not blocks. A tempo equals the subnet's configured tempo hyperparameter (default 360 blocks). For example, if you set commit_reveal_period to 3 and your subnet's configured tempo is 360, weights will be revealed after 3 tempos = 1080 blocks.
See Commit Reveal for details on how commit reveal works.
CommitRevealWeightsEnabled
Type: Boolean
Default: False
btcli setter: btcli sudo set --param commit_reveal_weights_enabled
Setter extrinsic: sudo_set_commit_reveal_weights_enabled
Permissions required to set: Subnet owner
Description:
Enables Commit Reveal
EMAPriceHalvingPeriod
Type: u64
Default: 201600
btcli setter: n/a
Setter extrinsic: sudo_set_ema_price_halving_period
Permissions required to set: Root
Description:
Sets the halving time of average moving price on a subnet.
ImmuneOwnerUidsLimit
Type: u16
Default: 1
btcli setter: btcli sudo set --param sudo_set_owner_immune_neuron_limit
Setter extrinsic: sudo_set_owner_immune_neuron_limit
Permissions required to set: Subnet owner
Description:
The ImmuneOwnerUidsLimit hyperparameter determines the maximum number neurons that can be marked as owner-immune on a subnet.
ImmunityPeriod
Type: u16
Default: 5000
btcli setter: btcli sudo set --param immunity_period
Setter extrinsic: sudo_set_immunity_period
Permissions required to set: Subnet owner
Description:
The number of blocks after registration when a miner is protected from deregistration
Kappa
Type: u16
Default: 32767 ( or approximately 0.5 normalized )
btcli setter: btcli sudo set --param kappa
Setter extrinsic: sudo_set_kappa
Permissions required to set: Root
Description:
The consensus majority ratio: The weights set by validators who have lower normalized stake than Kappa are not used in calculating consensus, which affects ranks, which affect incentives.
the consensus threshold for bond-clipping during Yuma Consensus
LiquidAlphaEnabled
Type: Bool
Default: False
btcli setter: btcli sudo set --param liquid_alpha_enabled
Setter extrinsic: sudo_set_liquid_alpha_enabled
Permissions required to set: Subnet owner
Description:
Enables the liquid alpha feature.
MaxAllowedUids
Type: u16
Default: 256
btcli setter: btcli sudo set --param sudo_trim_to_max_allowed_uids / btcli sudo trim
Setter extrinsic: sudo_trim_to_max_allowed_uids
Permissions required to set: Subnet owner
Description:
Maximum number of neurons on a subnet.
MaxAllowedValidators
Type: u16
Default: 64
btcli setter: btcli sudo set --param max_validators
Setter extrinsic: sudo_set_max_allowed_validators
Permissions required to set: Root
Description:
Maximum validators on a subnet.
MaxBurn
Type: u64
Default: 100000000000 normalized to 100.0000(τ)
btcli setter: btcli sudo set --param max_burn
Setter extrinsic: sudo_set_max_burn
Permissions required to set: Subnet owner
Description:
Upper bound for the dynamic TAO burn required for neuron (UID) registration on the subnet. This clamps the price together with MinBurn; BurnHalfLife and BurnIncreaseMult shape how the price moves over time and on each registration.
MaxRegistrationsPerBlock
Type: u16
Default: 1
btcli setter: btcli sudo set --param max_regs_per_block
Setter extrinsic: sudo_set_max_registrations_per_block
Permissions required to set: Root
Description:
Not used for neuron registration. Neuron admission is governed by continuous burn pricing; see BurnHalfLife and BurnIncreaseMult.