@@ -803,3 +803,94 @@ fn test_burn_adjustment_case_e_zero_registrations() {
803803 assert_eq ! ( adjusted_diff, 5_000 ) ;
804804 } ) ;
805805}
806+
807+ #[ test]
808+ fn test_emission_based_on_registration_status ( ) {
809+ new_test_ext ( 1 ) . execute_with ( || {
810+ let n: u16 = 100 ;
811+ let netuid_off: u16 = 1 ;
812+ let netuid_on: u16 = 2 ;
813+ let tempo: u16 = 1 ;
814+ let netuids: Vec < u16 > = vec ! [ netuid_off, netuid_on] ;
815+ let emissions: Vec < u64 > = vec ! [ 1000000000 , 1000000000 ] ;
816+
817+ // Add subnets with registration turned off and on
818+ add_network ( netuid_off, tempo, 0 ) ;
819+ add_network ( netuid_on, tempo, 0 ) ;
820+ SubtensorModule :: set_max_allowed_uids ( netuid_off, n) ;
821+ SubtensorModule :: set_max_allowed_uids ( netuid_on, n) ;
822+ SubtensorModule :: set_emission_values ( & netuids, emissions) . unwrap ( ) ;
823+ SubtensorModule :: set_network_registration_allowed ( netuid_off, false ) ;
824+ SubtensorModule :: set_network_registration_allowed ( netuid_on, true ) ;
825+
826+ // Populate the subnets with neurons
827+ for i in 0 ..n {
828+ SubtensorModule :: append_neuron ( netuid_off, & U256 :: from ( i) , 0 ) ;
829+ SubtensorModule :: append_neuron ( netuid_on, & U256 :: from ( i) , 0 ) ;
830+ }
831+
832+ // Generate emission at block 0
833+ let block: u64 = 0 ;
834+ SubtensorModule :: generate_emission ( block) ;
835+
836+ // Verify that no emission tuples are loaded for the subnet with registration off
837+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_off) . is_none( ) ) ;
838+
839+ // Verify that emission tuples are loaded for the subnet with registration on
840+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_on) . is_some( ) ) ;
841+ assert_eq ! (
842+ SubtensorModule :: get_loaded_emission_tuples( netuid_on)
843+ . unwrap( )
844+ . len( ) ,
845+ n as usize
846+ ) ;
847+
848+ // Step to the next epoch block
849+ let epoch_block: u16 = tempo;
850+ step_block ( epoch_block) ;
851+
852+ // Verify that no emission tuples are loaded for the subnet with registration off
853+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_off) . is_none( ) ) ;
854+ log:: info!(
855+ "Emissions for netuid with registration off: {:?}" ,
856+ SubtensorModule :: get_loaded_emission_tuples( netuid_off)
857+ ) ;
858+
859+ // Verify that emission tuples are loaded for the subnet with registration on
860+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_on) . is_some( ) ) ;
861+ log:: info!(
862+ "Emissions for netuid with registration on: {:?}" ,
863+ SubtensorModule :: get_loaded_emission_tuples( netuid_on)
864+ ) ;
865+ assert_eq ! (
866+ SubtensorModule :: get_loaded_emission_tuples( netuid_on)
867+ . unwrap( )
868+ . len( ) ,
869+ n as usize
870+ ) ;
871+
872+ // drain the emission tuples for the subnet with registration on
873+ SubtensorModule :: drain_emission ( next_block as u64 ) ;
874+ // Turn on registration for the subnet with registration off
875+ SubtensorModule :: set_network_registration_allowed ( netuid_off, true ) ;
876+ SubtensorModule :: set_network_registration_allowed ( netuid_on, false ) ;
877+
878+ // Generate emission at the next block
879+ let next_block: u64 = block + 1 ;
880+ SubtensorModule :: generate_emission ( next_block) ;
881+
882+ // Verify that emission tuples are now loaded for the subnet with registration turned on
883+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_off) . is_some( ) ) ;
884+ log:: info!(
885+ "Emissions for netuid with registration on: {:?}" ,
886+ SubtensorModule :: get_loaded_emission_tuples( netuid_on)
887+ ) ;
888+ assert ! ( SubtensorModule :: get_loaded_emission_tuples( netuid_on) . is_none( ) ) ;
889+ assert_eq ! (
890+ SubtensorModule :: get_loaded_emission_tuples( netuid_off)
891+ . unwrap( )
892+ . len( ) ,
893+ n as usize
894+ ) ;
895+ } ) ;
896+ }
0 commit comments