Skip to content

feat: add consensus mode selection for liquid alpha calculations#2568

Open
ppolewicz wants to merge 4 commits intodevnet-readyfrom
consensus-modes-devnet
Open

feat: add consensus mode selection for liquid alpha calculations#2568
ppolewicz wants to merge 4 commits intodevnet-readyfrom
consensus-modes-devnet

Conversation

@ppolewicz
Copy link
Copy Markdown
Collaborator

@ppolewicz ppolewicz commented Apr 7, 2026

Summary

Introduces a ConsensusMode enum and per-subnet storage to allow subnet owners to control which consensus values are used when computing liquid alpha bonding matrices.

Motivation

The liquid alpha mechanism uses consensus values to compute per-validator-miner bonding alphas. Previously, only the current in-memory (just-computed) consensus was used. This change adds flexibility to use the previous epoch's consensus from storage, which provides more stable bonding behavior particularly when bond_penalty == 1.

Changes

  • New ConsensusMode enum (Current, Previous, Auto) with Auto as the default:
    • Current: use the freshly-computed in-memory consensus (existing behavior)
    • Previous: use the previous epoch's consensus stored in Consensus<T> storage, normalized from u16 to I32F32
    • Auto: use Previous when bonds_penalty == 1, otherwise Current
  • New storage map LiquidAlphaConsensusMode<T> (per-netuid, default: Auto)
  • New extrinsic helper do_set_liquid_alpha_consensus_mode (callable by subnet owner or root)
  • New utility functions get/set_liquid_alpha_consensus_mode and compute_consensus_for_liquid_alpha
  • Updated epoch logic: both dense and sparse bond computation paths now call compute_consensus_for_liquid_alpha to select the appropriate consensus vector before passing it to compute_liquid_alpha_values[_sparse]
  • New test module consensus_mode with full coverage of all three modes, permission checks, and edge cases

Test plan

  • test_set_consensus_mode_liquid_alpha_disabled — can set mode regardless of liquid alpha enable state
  • test_set_consensus_mode_permissions — non-owner is rejected, owner succeeds
  • test_set_and_get_consensus_modes — round-trip for all three variants
  • test_compute_consensus_current_mode — returns current in-memory consensus
  • test_compute_consensus_previous_mode — returns normalized previous-epoch consensus from storage
  • test_compute_consensus_auto_mode — returns current when bond_penalty ≠ 1, previous when bond_penalty == 1
  • Existing epoch test test_liquid_alpha_equal_values_against_itself updated to set ConsensusMode::Current to preserve original behavior

@ppolewicz ppolewicz added the skip-cargo-audit This PR fails cargo audit but needs to be merged anyway label Apr 7, 2026
Introduces ConsensusMode enum (Current/Previous/Auto) with per-subnet
storage LiquidAlphaConsensusMode<T> to control which consensus values
are used when computing liquid alpha bonding matrices.

- Auto (default): uses Previous when bond_penalty==1, else Current
- Current: always uses fresh in-memory consensus values
- Previous: always uses previous epoch consensus from storage (normalized)

Adds do_set_liquid_alpha_consensus_mode callable by subnet owner or root.
@ppolewicz ppolewicz force-pushed the consensus-modes-devnet branch from a0522b9 to 610fe00 Compare April 7, 2026 06:36
@ppolewicz ppolewicz mentioned this pull request Apr 7, 2026
13 tasks
The add_balance_to_coldkey_account API now takes TaoBalance instead of
a plain u64 integer. Use .into() for type coercion.
…dAlphaConsensusModeSet event

- Add DecodeWithMemTracking, Copy, MaxEncodedLen derives to ConsensusMode enum
- Change bonds_penalty comparison to use integer domain (u16::MAX)
- Remove .clone() on ConsensusMode (now Copy)
- Make compute_consensus_for_liquid_alpha pub(crate)
- Add deposit_event for LiquidAlphaConsensusModeSet
- Add LiquidAlphaConsensusModeSet event variant in macros/events.rs
- Add sudo_set_liquid_alpha_consensus_mode dispatchable in admin-utils
- Add LiquidAlphaConsensusMode = 28 to Hyperparameter enum in rate_limiting.rs
- Bump STORAGE_VERSION to 8
- Add integration test test_compute_bonds_uses_previous_consensus_mode
- Fix comment in tests/consensus_mode.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-cargo-audit This PR fails cargo audit but needs to be merged anyway

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant