Hyperparameters

activity_cutoff

Blocks without setting weights after which a validator is inactive and excluded from consensus.

View as Markdown

activity_cutoff is the window, in blocks, that a validator can go without setting weights before the epoch marks it inactive and removes its stake from consensus. Validators care because an expired cutoff silently zeroes their influence and dividends; owners tune it to keep consensus limited to validators that are actually evaluating miners.

How it works

At each epoch (pallets/subtensor/src/epoch/run_epoch.rs), a neuron is inactive when last_update + activity_cutoff is less than the current block, where last_update is the block of its last accepted weight submission. Inactive stake is masked out of the active-stake vector before consensus, so an inactive validator contributes nothing to the kappa-weighted median and earns no dividends until it sets weights again.

The effective value is derived, not stored directly: get_activity_cutoff_blocks (pallets/subtensor/src/utils/misc.rs) computes factor_milli × tempo / 1000, clamped to at least 1 block. The per-mille factor is bounded to 1,000–50,000 (one to fifty tempos); the default 13,889 at tempo 360 yields the legacy 5,000-block cutoff (~16.7 hours).

The chart below plots each validator's blocks-since-last-weights against the cutoff — slide it to see who drops out of consensus.

activity_cutoff inactivity mask

Each bar is how long a validator has gone without setting weights. run_epoch.rs marks a neuron inactive when last_update + activity_cutoff < current_block: bars past the dashed line fade out — their stake is masked from the active-stake vector and they earn no dividends until they set weights again.

Active validators

9 / 14

counted into consensus

Cutoff in wall-clock

16.7 h

5000 blocks × 12 s

Legacy default

5,000 blocks

~16.7 h at tempo 360

5000 blocks

Reading and setting

Inspect with:

btcli sudo get --netuid N --name activity_cutoff

This returns the effective block count. It is not settable directly: the epoch derives it from activity_cutoff_factor (per-mille of tempo), so change the factor instead:

btcli sudo set --netuid N --name activity_cutoff_factor --value 13889

A legacy absolute-blocks extrinsic (sudo_set_activity_cutoff) still exists on chain, but the value it writes is ignored by the epoch and it will be removed; don't use it.

activity_cutoff_factor · tempo · kappa · rho · max_validators · weights_rate_limit