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