subtensor
subtensor copied to clipboard
Unfair Emission Distribution During Network Inactivity Periods
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
- Implement minimum emission floor first
- Add configuration parameters
- Monitor impact
- 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?