@@ -865,40 +865,51 @@ fn test_basic_major_root_half_weights_to_validator() {
865865 log_subnet_state ( "SN1" , netuid1) ;
866866 log_neuron_state ( "SN1 neurons" , netuid1, & neurons) ;
867867
868- // 1. EffectiveRootProp should be > 0 (utilization > 0.5, not hard-capped)
868+ // 1. EffectiveRootProp should be > 0 (utilization is high, not hard-capped)
869+ // Even with half weights to a validator, the major root still earns its expected
870+ // share of root dividends because consensus clips the wasted weight and dividends
871+ // flow through bond formation with miners. Minor root also earns, so utilization ≈ 1.0.
869872 let erp = EffectiveRootProp :: < Test > :: get ( netuid1) ;
870- log:: info!( "EffectiveRootProp = {:?}" , erp) ;
873+ let rp = RootProp :: < Test > :: get ( netuid1) ;
874+ log:: info!( "EffectiveRootProp = {:?}, RootProp = {:?}" , erp, rp) ;
871875 assert ! (
872876 erp > U96F32 :: from_num( 0 ) ,
873877 "EffectiveRootProp should be > 0 (utilization > 0.5)"
874878 ) ;
875879
876- // 2. Root validators earn SOME dividends (scaled by utilization, not zero )
880+ // 2. Both root validators earn dividends (both set weights, both have bonds )
877881 let major_root_divs = root_divs_of ( MAJOR_ROOT_HK , netuid1) ;
878882 let minor_root_divs = root_divs_of ( MINOR_ROOT_HK , netuid1) ;
879883 log:: info!(
880884 "major_root_divs = {}, minor_root_divs = {}" ,
881885 major_root_divs,
882886 minor_root_divs
883887 ) ;
884- // At least one root validator should earn some root dividends
885888 assert ! (
886- major_root_divs > 0 || minor_root_divs > 0 ,
887- "At least one root validator should earn root dividends (utilization > 0.5)"
889+ major_root_divs > 0 ,
890+ "Major root should earn root dividends"
891+ ) ;
892+ assert ! (
893+ minor_root_divs > 0 ,
894+ "Minor root should earn root dividends"
888895 ) ;
889896
890- // 3. EffectiveRootProp should be less than the basic test (utilization < 1.0)
891- let rp = RootProp :: < Test > :: get ( netuid1) ;
892- log:: info!( "RootProp = {:?}" , rp) ;
897+ // 3. Utilization is high enough that EffectiveRootProp >= RootProp
898+ assert ! (
899+ erp >= rp,
900+ "EffectiveRootProp ({erp:?}) should be >= RootProp ({rp:?}) when all root validators set weights"
901+ ) ;
893902 } ) ;
894903}
895904
896905// ===========================================================================
897- // Test 6: Almost-half- weights test - hard cap triggers
906+ // Test 6: Half- weights, minor root doesn't set weights
898907//
899908// Big root sets half weights to miner, half to minor_root_validator.
900909// Small root does NOT set weights at all.
901- // Utilization drops below 50%, hard cap triggers.
910+ // Since major root (99.9% of root stake) still earns its expected share of
911+ // root dividends, utilization remains high (~0.999). Only minor root (0.1%)
912+ // is inactive. Hard cap does NOT trigger.
902913//
903914// Run:
904915// SKIP_WASM_BUILD=1 RUST_LOG=info cargo test --package pallet-subtensor --lib -- tests::wide_scope_dividend::test_basic_major_root_half_weights_no_minor_root --exact --show-output --nocapture
@@ -956,35 +967,40 @@ fn test_basic_major_root_half_weights_no_minor_root() {
956967 log_subnet_state ( "SN1" , netuid1) ;
957968 log_neuron_state ( "SN1 neurons" , netuid1, & neurons) ;
958969
959- // 1. EffectiveRootProp = 0 (hard cap triggered, utilization < 0.5)
970+ // 1. EffectiveRootProp > 0: utilization is high (~0.999) because major root
971+ // (99.9% of root stake) earns its expected share. Only minor root (0.1%) is idle.
960972 let erp = EffectiveRootProp :: < Test > :: get ( netuid1) ;
961- log :: info! ( "EffectiveRootProp = {:?}" , erp ) ;
962- assert_eq ! (
963- erp ,
964- U96F32 :: from_num( 0 ) ,
965- "EffectiveRootProp should be 0 when hard cap triggers ( utilization < 0.5)"
973+ let rp = RootProp :: < Test > :: get ( netuid1 ) ;
974+ log :: info! ( "EffectiveRootProp = {:?}, RootProp = {:?}" , erp , rp ) ;
975+ assert ! (
976+ erp > U96F32 :: from_num( 0 ) ,
977+ "EffectiveRootProp should be > 0 (major root active, utilization > 0.5)"
966978 ) ;
967979
968- // 2. All root alpha dividends should be 0 (recycled)
969- assert_eq ! (
970- root_divs_of( MAJOR_ROOT_HK , netuid1) ,
971- 0 ,
972- "Major root dividends should be 0 (hard cap)"
980+ // 2. Major root earns root dividends (set weights, has bonds)
981+ assert ! (
982+ root_divs_of( MAJOR_ROOT_HK , netuid1) > 0 ,
983+ "Major root should earn root dividends"
973984 ) ;
985+
986+ // 3. Minor root earns 0 (didn't set weights, no bonds)
974987 assert_eq ! (
975988 root_divs_of( MINOR_ROOT_HK , netuid1) ,
976989 0 ,
977- "Minor root dividends should be 0 (hard cap )"
990+ "Minor root should earn 0 root dividends (no weights set )"
978991 ) ;
979992
980- // 3. Root stakes unchanged (no dividends converted)
981- assert_eq ! ( stake_of( MAJOR_ROOT_HK , NetUid :: ROOT ) , MAJOR_ROOT_TAO ) ;
982- assert_eq ! ( stake_of( MINOR_ROOT_HK , NetUid :: ROOT ) , MINOR_ROOT_TAO ) ;
983-
984- // 4. Miner should still earn incentive (not affected by root dividend recycling)
993+ // 4. Miner earns incentive
985994 assert ! (
986995 stake_of( MINER1_HK , netuid1) > 0 ,
987- "Miner should still earn incentive"
996+ "Miner should earn incentive"
997+ ) ;
998+
999+ // 5. Utilization is slightly below 1.0 due to minor root being inactive,
1000+ // so ERP should be very close to RootProp but may be slightly scaled
1001+ assert ! (
1002+ erp >= rp,
1003+ "EffectiveRootProp should be close to RootProp with near-full utilization"
9881004 ) ;
9891005 } ) ;
9901006}
0 commit comments