@@ -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,189 @@ 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+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
902+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
903+ 10u64
904+ ) ) ;
905+ assert_eq ! ( SubtensorModule :: get_nominator_min_required_stake( ) , 10u64 ) ;
906+
907+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
908+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
909+ 5u64
910+ ) ) ;
911+ assert_eq ! ( SubtensorModule :: get_nominator_min_required_stake( ) , 5u64 ) ;
912+ } ) ;
913+ }
914+
915+ #[ test]
916+ fn sets_a_higher_value ( ) {
917+ new_test_ext ( ) . execute_with ( || {
918+ let to_be_set: u64 = SubtensorModule :: get_nominator_min_required_stake ( ) + 5 as u64 ;
919+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
920+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
921+ to_be_set
922+ ) ) ;
923+ assert_eq ! (
924+ SubtensorModule :: get_nominator_min_required_stake( ) ,
925+ to_be_set
926+ ) ;
927+ } ) ;
928+ }
929+
930+ #[ test]
931+ fn clears_staker_nominations_below_min ( ) {
932+ new_test_ext ( ) . execute_with ( || {
933+ System :: set_block_number ( 1 ) ;
934+
935+ // Create accounts.
936+ let netuid = 1 ;
937+ let hot1 = U256 :: from ( 1 ) ;
938+ let hot2 = U256 :: from ( 2 ) ;
939+ let cold1 = U256 :: from ( 3 ) ;
940+ let cold2 = U256 :: from ( 4 ) ;
941+
942+ SubtensorModule :: set_target_stakes_per_interval ( 10 ) ;
943+ // Register network.
944+ add_network ( netuid, 0 , 0 ) ;
945+
946+ // Register hot1.
947+ register_ok_neuron ( netuid, hot1, cold1, 0 ) ;
948+ assert_ok ! ( SubtensorModule :: do_become_delegate(
949+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
950+ hot1,
951+ 0
952+ ) ) ;
953+ assert_eq ! ( SubtensorModule :: get_owning_coldkey_for_hotkey( & hot1) , cold1) ;
954+
955+ // Register hot2.
956+ register_ok_neuron ( netuid, hot2, cold2, 0 ) ;
957+ assert_ok ! ( SubtensorModule :: do_become_delegate(
958+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
959+ hot2,
960+ 0
961+ ) ) ;
962+ assert_eq ! ( SubtensorModule :: get_owning_coldkey_for_hotkey( & hot2) , cold2) ;
963+
964+ // Add stake cold1 --> hot1 (non delegation.)
965+ SubtensorModule :: add_balance_to_coldkey_account ( & cold1, 5 ) ;
966+ assert_ok ! ( SubtensorModule :: add_stake(
967+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
968+ hot1,
969+ 1
970+ ) ) ;
971+ assert_eq ! (
972+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
973+ 1
974+ ) ;
975+ assert_eq ! ( Balances :: free_balance( cold1) , 4 ) ;
976+
977+ // Add stake cold2 --> hot1 (is delegation.)
978+ SubtensorModule :: add_balance_to_coldkey_account ( & cold2, 5 ) ;
979+ assert_ok ! ( SubtensorModule :: add_stake(
980+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
981+ hot1,
982+ 1
983+ ) ) ;
984+ assert_eq ! (
985+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
986+ 1
987+ ) ;
988+ assert_eq ! ( Balances :: free_balance( cold2) , 4 ) ;
989+
990+ // Add stake cold1 --> hot2 (non delegation.)
991+ SubtensorModule :: add_balance_to_coldkey_account ( & cold1, 5 ) ;
992+ assert_ok ! ( SubtensorModule :: add_stake(
993+ <<Test as Config >:: RuntimeOrigin >:: signed( cold1) ,
994+ hot2,
995+ 1
996+ ) ) ;
997+ assert_eq ! (
998+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
999+ 1
1000+ ) ;
1001+ assert_eq ! ( Balances :: free_balance( cold1) , 8 ) ;
1002+
1003+ // Add stake cold2 --> hot2 (is delegation.)
1004+ SubtensorModule :: add_balance_to_coldkey_account ( & cold2, 5 ) ;
1005+ assert_ok ! ( SubtensorModule :: add_stake(
1006+ <<Test as Config >:: RuntimeOrigin >:: signed( cold2) ,
1007+ hot2,
1008+ 1
1009+ ) ) ;
1010+ assert_eq ! (
1011+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1012+ 1
1013+ ) ;
1014+ assert_eq ! ( Balances :: free_balance( cold2) , 8 ) ;
1015+
1016+ // Set min stake to 0 (noop)
1017+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
1018+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
1019+ 0u64
1020+ ) ) ;
1021+ assert_eq ! (
1022+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
1023+ 1
1024+ ) ;
1025+ assert_eq ! (
1026+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
1027+ 1
1028+ ) ;
1029+ assert_eq ! (
1030+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
1031+ 1
1032+ ) ;
1033+ assert_eq ! (
1034+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1035+ 1
1036+ ) ;
1037+
1038+ // Set min nomination to 10: should clear (cold2, hot1) and (cold1, hot2).
1039+ assert_ok ! ( AdminUtils :: sudo_set_nominator_min_required_stake(
1040+ <<Test as Config >:: RuntimeOrigin >:: root( ) ,
1041+ 10u64
1042+ ) ) ;
1043+ assert_eq ! (
1044+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot1) ,
1045+ 1
1046+ ) ;
1047+ assert_eq ! (
1048+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold1, & hot2) ,
1049+ 0
1050+ ) ;
1051+ assert_eq ! (
1052+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot1) ,
1053+ 0
1054+ ) ;
1055+ assert_eq ! (
1056+ SubtensorModule :: get_stake_for_coldkey_and_hotkey( & cold2, & hot2) ,
1057+ 1
1058+ ) ;
1059+
1060+ // Balances have been added back into accounts.
1061+ assert_eq ! ( Balances :: free_balance( cold1) , 9 ) ;
1062+ assert_eq ! ( Balances :: free_balance( cold2) , 9 ) ;
1063+ } ) ;
1064+ }
1065+ }
0 commit comments