Hyperparameters

bonds_penalty

How much out-of-consensus weight is excluded from bond accrual, from none (0) to full clipping (1).

View as Markdown

bonds_penalty decides whether validators build bonds from their raw weights or only from the consensus-clipped portion. Subnet owners use it to punish (or tolerate) weight-setting that deviates from the stake-weighted consensus; validators care because it determines whether an out-of-consensus bet still accrues bonds.

How it works

Before the bonds EMA runs, the epoch interpolates between raw and clipped weight matrices (pallets/subtensor/src/epoch/run_epoch.rs, around the "Bonds and Dividends" step):

weights_for_bonds = (1 − penalty) × weights + penalty × clipped_weights
  • bonds_penalty = 0: bonds accrue from raw weights — deviating from consensus costs nothing in bond terms.
  • bonds_penalty = 1 (the default, stored as 65535): bonds accrue only from consensus-clipped weights, so any weight above the stake-weighted median is ignored for bonding.

Values in between blend the two. The interpolated matrix feeds the bonds EMA on both the classic path and the yuma3_enabled path, so the penalty applies regardless of which consensus variant is active. See the Yuma Consensus overview for where this sits in the epoch.

Drag the penalty from 0 to 1 to watch a deviant validator's out-of-consensus weight get clipped away while an in-consensus validator is untouched:

bonds_penalty: interpolating raw and clipped weights

Matches weights_for_bonds = interpolate(weights, clipped_weights, bonds_penalty) in run_epoch.rs. The dashed steps are the stake-weighted consensus; clipping caps each weight there. An in-consensus validator (light bars) is never affected — only weight above consensus is at stake.

Deviant bond weight on M5

0.70 → 0.100

consensus caps M5 at 0.10

Deviant bond mass retained

40%

share of raw weight still accruing bonds

In-consensus validator

100% retained

weights at or below consensus are never clipped

65,535 (1.00)

Reading and setting

btcli sudo get --netuid N --name bonds_penalty

Stored as u16 (65535 = 1.0, full penalty). The set command accepts the raw integer or a 0..1 fraction with a decimal point:

btcli sudo set --netuid N --name bonds_penalty --value 1.0

bonds_moving_avg, bonds_reset_enabled, liquid_alpha_enabled, yuma3_enabled