subtensor icon indicating copy to clipboard operation
subtensor copied to clipboard

Unfair Emission Distribution During Network Inactivity Periods

Open distributedstatemachine opened this issue 5 months ago • 3 comments

Issue

During network inactivity (>5000 blocks), miners receive zero emissions while validators receive 100% of emissions based on stake. This creates an unfair distribution and penalizes miners during maintenance or network issues beyond their control.

Current behavior in run_epoch.rs:

if emission_sum == I32F32::from(0) {
    if is_zero(&active_stake) {
        // no active stake - miners get 0, validators get everything
        normalized_validator_emission.clone_from(&stake);
        normalized_combined_emission.clone_from(&stake);
    }
}

Impact

  • Miners lose all earnings during maintenance periods
  • Creates misaligned incentives during network recovery
  • Unfairly penalizes miners for protocol-level issues
  • Reduces network resilience by discouraging miner participation during recovery

Proposed Solutions

1. Minimum Miner Emission Floor

// Ensure miners get at least X% of emissions even during inactivity
let MIN_MINER_EMISSION_RATIO: I32F32 = I32F32::from_num(0.3); // 30%

if emission_sum == I32F32::from(0) {
    if is_zero(&active_stake) {
        // Split emissions between miners and validators
        normalized_server_emission = stake.iter()
            .map(|s| s.saturating_mul(MIN_MINER_EMISSION_RATIO))
            .collect();
        normalized_validator_emission = stake.iter()
            .map(|s| s.saturating_mul(I32F32::from_num(1.0) - MIN_MINER_EMISSION_RATIO))
            .collect();
    }
}

2. Time-Based Decay

// Gradually shift emissions to validators over time
let blocks_inactive = current_block.saturating_sub(last_activity);
let decay_rate = (blocks_inactive / activity_cutoff).min(1.0);
let miner_ratio = I32F32::from_num(0.5).saturating_mul(I32F32::from_num(1.0 - decay_rate));

3. Historical Performance Weighting

Use historical performance metrics to distribute inactive emissions instead of zeroing miner rewards.

Implementation Considerations

  • Need configurable parameters for minimum miner emissions
  • Should track historical performance metrics
  • Consider subnet-specific settings
  • Add emergency override capabilities
  • Include monitoring for extended inactivity

Migration Plan

  1. Implement minimum emission floor first
  2. Add configuration parameters
  3. Monitor impact
  4. Consider more sophisticated solutions based on data

Questions

  • What's the right minimum emission % for miners?
  • Should this vary by subnet?
  • How to handle very long inactivity periods?
  • What metrics should determine historical performance?

distributedstatemachine avatar May 22 '25 09:05 distributedstatemachine