@@ -8,13 +8,6 @@ use sp_core::U256;
88mod mock;
99use mock:: * ;
1010
11- #[ allow( dead_code) ]
12- pub fn add_network ( netuid : u16 , tempo : u16 , modality : u16 ) {
13- SubtensorModule :: init_new_network ( netuid, tempo) ;
14- SubtensorModule :: set_network_registration_allowed ( netuid, true ) ;
15- SubtensorModule :: set_network_pow_registration_allowed ( netuid, true ) ;
16- }
17-
1811#[ test]
1912fn test_sudo_set_default_take ( ) {
2013 new_test_ext ( ) . execute_with ( || {
@@ -884,3 +877,187 @@ fn test_sudo_set_network_pow_registration_allowed() {
884877 ) ;
885878 } ) ;
886879}
880+
881+ mod sudo_set_nominator_min_required_stake {
882+ use super :: * ;
883+
884+ #[ test]
885+ fn can_only_be_called_by_admin ( ) {
886+ new_test_ext ( ) . execute_with ( || {
887+ let to_be_set: u64 = SubtensorModule :: get_nominator_min_required_stake ( ) + 5 as u64 ;
888+ assert_eq ! (
889+ AdminUtils :: sudo_set_nominator_min_required_stake(
890+ <<Test as Config >:: RuntimeOrigin >:: signed( U256 :: from( 0 ) ) ,
891+ to_be_set
892+ ) ,
893+ Err ( DispatchError :: BadOrigin . into( ) )
894+ ) ;
895+ } ) ;
896+ }
897+
898+ #[ test]
899+ fn sets_a_lower_value ( ) {
900+ new_test_ext ( ) . execute_with ( || {
901+ let to_be_set: u64 = SubtensorModule :: get_nominator_min_required_stake ( ) - 5 as u64 ;
902+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
903+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
904+ to_be_set
905+ ) ) ;
906+ assert_eq ! (
907+ SubtensorModule :: get_nominator_min_required_stake( ) ,
908+ to_be_set
909+ ) ;
910+ } ) ;
911+ }
912+
913+ #[ test]
914+ fn sets_a_higher_value ( ) {
915+ new_test_ext ( ) . execute_with ( || {
916+ let to_be_set: u64 = SubtensorModule :: get_nominator_min_required_stake ( ) + 5 as u64 ;
917+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
918+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
919+ to_be_set
920+ ) ) ;
921+ assert_eq ! (
922+ SubtensorModule :: get_nominator_min_required_stake( ) ,
923+ to_be_set
924+ ) ;
925+ } ) ;
926+ }
927+
928+ #[ test]
929+ fn clears_staker_nominations_below_min ( ) {
930+ new_test_ext ( ) . execute_with ( || {
931+ System :: set_block_number ( 1 ) ;
932+
933+ // Create accounts.
934+ let netuid = 1 ;
935+ let hot1 = U256 :: from ( 1 ) ;
936+ let hot2 = U256 :: from ( 2 ) ;
937+ let cold1 = U256 :: from ( 3 ) ;
938+ let cold2 = U256 :: from ( 4 ) ;
939+
940+ SubtensorModule :: set_target_stakes_per_interval ( 10 ) ;
941+ // Register network.
942+ add_network ( netuid, 0 , 0 ) ;
943+
944+ // Register hot1.
945+ register_ok_neuron ( netuid, hot1, cold1, 0 ) ;
946+ assert_ok ! ( SubtensorModule :: do_become_delegate(
947+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
948+ hot1,
949+ 0
950+ ) ) ;
951+ assert_eq ! ( SubtensorModule :: get_owning_coldkey_for_hotkey( & hot1) , cold1) ;
952+
953+ // Register hot2.
954+ register_ok_neuron ( netuid, hot2, cold2, 0 ) ;
955+ assert_ok ! ( SubtensorModule :: do_become_delegate(
956+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
957+ hot2,
958+ 0
959+ ) ) ;
960+ assert_eq ! ( SubtensorModule :: get_owning_coldkey_for_hotkey( & hot2) , cold2) ;
961+
962+ // Add stake cold1 --> hot1 (non delegation.)
963+ SubtensorModule :: add_balance_to_coldkey_account ( & cold1, 5 ) ;
964+ assert_ok ! ( SubtensorModule :: add_stake(
965+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
966+ hot1,
967+ 1
968+ ) ) ;
969+ assert_eq ! (
970+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
971+ 1
972+ ) ;
973+ assert_eq ! ( Balances :: free_balance( cold1) , 4 ) ;
974+
975+ // Add stake cold2 --> hot1 (is delegation.)
976+ SubtensorModule :: add_balance_to_coldkey_account ( & cold2, 5 ) ;
977+ assert_ok ! ( SubtensorModule :: add_stake(
978+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
979+ hot1,
980+ 1
981+ ) ) ;
982+ assert_eq ! (
983+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
984+ 1
985+ ) ;
986+ assert_eq ! ( Balances :: free_balance( cold2) , 4 ) ;
987+
988+ // Add stake cold1 --> hot2 (non delegation.)
989+ SubtensorModule :: add_balance_to_coldkey_account ( & cold1, 5 ) ;
990+ assert_ok ! ( SubtensorModule :: add_stake(
991+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
992+ hot2,
993+ 1
994+ ) ) ;
995+ assert_eq ! (
996+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
997+ 1
998+ ) ;
999+ assert_eq ! ( Balances :: free_balance( cold1) , 8 ) ;
1000+
1001+ // Add stake cold2 --> hot2 (is delegation.)
1002+ SubtensorModule :: add_balance_to_coldkey_account ( & cold2, 5 ) ;
1003+ assert_ok ! ( SubtensorModule :: add_stake(
1004+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
1005+ hot2,
1006+ 1
1007+ ) ) ;
1008+ assert_eq ! (
1009+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1010+ 1
1011+ ) ;
1012+ assert_eq ! ( Balances :: free_balance( cold2) , 8 ) ;
1013+
1014+ // Set min stake to 0 (noop)
1015+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
1016+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
1017+ 0u64
1018+ ) ) ;
1019+ assert_eq ! (
1020+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
1021+ 1
1022+ ) ;
1023+ assert_eq ! (
1024+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
1025+ 1
1026+ ) ;
1027+ assert_eq ! (
1028+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
1029+ 1
1030+ ) ;
1031+ assert_eq ! (
1032+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1033+ 1
1034+ ) ;
1035+
1036+ // Set min nomination to 10: should clear (cold2, hot1) and (cold1, hot2).
1037+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
1038+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
1039+ 10u64
1040+ ) ) ;
1041+ assert_eq ! (
1042+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
1043+ 1
1044+ ) ;
1045+ assert_eq ! (
1046+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
1047+ 0
1048+ ) ;
1049+ assert_eq ! (
1050+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
1051+ 0
1052+ ) ;
1053+ assert_eq ! (
1054+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1055+ 1
1056+ ) ;
1057+
1058+ // Balances have been added back into accounts.
1059+ assert_eq ! ( Balances :: free_balance( cold1) , 9 ) ;
1060+ assert_eq ! ( Balances :: free_balance( cold2) , 9 ) ;
1061+ } ) ;
1062+ }
1063+ }
0 commit comments