Lock & Conviction
StakingTime-locked stake builds conviction weight that drives subnet ownership and owner-cut allocation.
Mechanism Flow
Lock & Conviction
- lock_stake call (new lock or top-up)
- move_lock call (switch destination hotkey)
- set_perpetual_lock call (toggle decay)
- Continuous decay every block via UnlockRate
Click items to navigate to their reference pages.
The Big Picture
Lock & Conviction is how Bittensor turns time-committed alpha into governance weight. Where liquid stake captures current preference, conviction captures sustained commitment. The longer someone holds alpha locked on a subnet, the more weight they accrue toward subnet ownership and toward the owner's cut of subnet emissions. Move_lock keeps the commitment intact while switching validators; set_perpetual_lock opts out of decay for maximum sustained weight.
Use Cases
- Subnet owners build OwnerLock to protect ownership against challengers
- Stakers signal long-term alignment with a validator on a specific subnet
- Validators attract conviction-bearing stake to grow their share of owner-cut allocation
- Indexers compute conviction tallies for the next ownership boundary
Locking commits alpha stake on a (coldkey, subnet, hotkey) tuple for time. Locked alpha cannot be unstaked until it decays via UnlockRate. While locked, the stake accrues conviction at the MaturityRate. Conviction is the time-weighted measure of commitment; it feeds two outcomes: subnet ownership (whoever accumulates the most owner-side conviction can take ownership) and subnet owner-cut allocation (a share of the subnet emission routes to the owner hotkey based on conviction weight). Locks default to decaying, but a coldkey can flip its own lock to perpetual via set_perpetual_lock so it never erodes through time.
Triggers
- lock_stake call (new lock or top-up)
- move_lock call (switch destination hotkey)
- set_perpetual_lock call (toggle decay)
- Continuous decay every block via UnlockRate
Inputs (11)
| Item | Type | Role |
|---|---|---|
| lock_stake SubtensorModule | call | Create or top up a lock on (coldkey, subnet, hotkey) |
| move_lock SubtensorModule | call | Reattribute an existing lock to a different hotkey |
| set_perpetual_lock SubtensorModule | call | Flip a lock between decaying and perpetual |
| Lock SubtensorModule | storage | Per-coldkey per-subnet per-hotkey lock state |
| HotkeyLock SubtensorModule | storage | Aggregate locked alpha per hotkey per subnet |
| OwnerLock SubtensorModule | storage | Total owner-side lock per subnet |
| DecayingLock SubtensorModule | storage | Per-coldkey perpetual-lock flag per subnet |
| DecayingHotkeyLock SubtensorModule | storage | Decaying portion of HotkeyLock |
| DecayingOwnerLock SubtensorModule | storage | Decaying portion of OwnerLock |
| MaturityRate SubtensorModule | storage | Conviction accrual timescale |
| UnlockRate SubtensorModule | storage | Locked-mass decay timescale |
Outputs (5)
| Item | Type | Role |
|---|---|---|
| StakeLocked SubtensorModule | event | Lock created or topped up |
| StakeUnlocked SubtensorModule | event | Locked alpha decayed back to liquid stake |
| LockMoved SubtensorModule | event | Lock reattributed to a new hotkey |
| PerpetualLockUpdated SubtensorModule | event | Perpetual-lock flag toggled |
| SubnetOwnerChanged SubtensorModule | event | Conviction shift transferred subnet ownership |
Source Files
pallets/subtensor/src/macros/dispatches.rs