22
33use codec:: Encode ;
44use frame_support:: weights:: Weight ;
5- use frame_support:: { assert_err, assert_ok} ;
6- use frame_system:: Config ;
5+ use frame_support:: { assert_err, assert_noop , assert_ok} ;
6+ use frame_system:: { Config , RawOrigin } ;
77mod mock;
88use mock:: * ;
99use pallet_subtensor:: * ;
@@ -167,6 +167,22 @@ fn test_do_swap_hotkey_ok_robust() {
167167 SubtensorModule :: add_balance_to_coldkey_account ( coldkey, swap_cost) ;
168168 }
169169
170+ // Add old_hotkeys[0] and old_hotkeys[1] to Senate
171+ assert_ok ! ( SenateMembers :: add_member(
172+ RawOrigin :: Root . into( ) ,
173+ old_hotkeys[ 0 ]
174+ ) ) ;
175+ assert_ok ! ( SenateMembers :: add_member(
176+ RawOrigin :: Root . into( ) ,
177+ old_hotkeys[ 1 ]
178+ ) ) ;
179+
180+ // Verify initial Senate membership
181+ assert ! ( Senate :: is_member( & old_hotkeys[ 0 ] ) ) ;
182+ assert ! ( Senate :: is_member( & old_hotkeys[ 1 ] ) ) ;
183+ assert ! ( !Senate :: is_member( & new_hotkeys[ 0 ] ) ) ;
184+ assert ! ( !Senate :: is_member( & new_hotkeys[ 1 ] ) ) ;
185+
170186 // Perform the swaps for only two hotkeys
171187 assert_ok ! ( SubtensorModule :: do_swap_hotkey(
172188 <<Test as Config >:: RuntimeOrigin >:: signed( coldkeys[ 0 ] ) ,
@@ -268,6 +284,10 @@ fn test_do_swap_hotkey_ok_robust() {
268284 assert_eq ! ( Keys :: <Test >:: get( netuid, uid) , new_hotkeys[ i] ) ;
269285 }
270286 }
287+
288+ // Verify Senate membership swap
289+ assert ! ( !Senate :: is_member( & old_hotkeys[ i] ) ) ;
290+ assert ! ( Senate :: is_member( & new_hotkeys[ i] ) ) ;
271291 } else {
272292 // Ensure other hotkeys remain unchanged
273293 assert_eq ! (
@@ -278,6 +298,10 @@ fn test_do_swap_hotkey_ok_robust() {
278298 SubtensorModule :: get_owning_coldkey_for_hotkey( & new_hotkeys[ i] ) ,
279299 coldkeys[ i]
280300 ) ;
301+
302+ // Verify Senate membership remains unchanged for other hotkeys
303+ assert ! ( !Senate :: is_member( & old_hotkeys[ i] ) ) ;
304+ assert ! ( !Senate :: is_member( & new_hotkeys[ i] ) ) ;
281305 }
282306 }
283307 }
@@ -1059,7 +1083,8 @@ fn test_do_swap_coldkey_success() {
10591083 let netuid = 1u16 ;
10601084 let stake_amount1 = 1000u64 ;
10611085 let stake_amount2 = 2000u64 ;
1062- let free_balance_old = 12345u64 + MIN_BALANCE_TO_PERFORM_COLDKEY_SWAP ;
1086+ let swap_cost = SubtensorModule :: get_key_swap_cost ( ) ;
1087+ let free_balance_old = 12345u64 + swap_cost;
10631088
10641089 // Setup initial state
10651090 add_network ( netuid, 13 , 0 ) ;
@@ -1158,7 +1183,7 @@ fn test_do_swap_coldkey_success() {
11581183 // Verify balance transfer
11591184 assert_eq ! (
11601185 SubtensorModule :: get_coldkey_balance( & new_coldkey) ,
1161- free_balance_old
1186+ free_balance_old - swap_cost
11621187 ) ;
11631188 assert_eq ! ( SubtensorModule :: get_coldkey_balance( & old_coldkey) , 0 ) ;
11641189
@@ -1332,6 +1357,7 @@ fn test_do_swap_coldkey_with_subnet_ownership() {
13321357 let hotkey = U256 :: from ( 3 ) ;
13331358 let netuid = 1u16 ;
13341359 let stake_amount: u64 = 1000u64 ;
1360+ let swap_cost = SubtensorModule :: get_key_swap_cost ( ) ;
13351361
13361362 // Setup initial state
13371363 add_network ( netuid, 13 , 0 ) ;
@@ -1340,7 +1366,7 @@ fn test_do_swap_coldkey_with_subnet_ownership() {
13401366 // Set TotalNetworks because swap relies on it
13411367 pallet_subtensor:: TotalNetworks :: < Test > :: set ( 1 ) ;
13421368
1343- SubtensorModule :: add_balance_to_coldkey_account ( & old_coldkey, stake_amount) ;
1369+ SubtensorModule :: add_balance_to_coldkey_account ( & old_coldkey, stake_amount + swap_cost ) ;
13441370 SubnetOwner :: < Test > :: insert ( netuid, old_coldkey) ;
13451371
13461372 // Populate OwnedHotkeys map
@@ -1666,24 +1692,47 @@ fn test_coldkey_swap_total() {
16661692 } ) ;
16671693}
16681694
1669- // #[test]
1670- // fn test_coldkey_arbitrated_sw() {
1671- // new_test_ext(1).execute_with(|| {
1672- // let coldkey = U256::from(1);
1673- // let hotkey = U256::from(2);
1674- // let netuid = 1u16;
1675-
1676- // // Setup initial state
1677- // add_network(netuid, 13, 0);
1678- // register_ok_neuron(netuid, hotkey, coldkey, 0);
1679-
1680- // // Check if coldkey has associated hotkeys
1681- // assert!(SubtensorModule::coldkey_has_associated_hotkeys(&coldkey));
1682-
1683- // // Check for a coldkey without associated hotkeys
1684- // let unassociated_coldkey = U256::from(3);
1685- // assert!(!SubtensorModule::coldkey_has_associated_hotkeys(
1686- // &unassociated_coldkey
1687- // ));
1688- // });
1689- // }
1695+ #[ test]
1696+ fn test_swap_senate_member ( ) {
1697+ new_test_ext ( 1 ) . execute_with ( || {
1698+ let old_hotkey = U256 :: from ( 1 ) ;
1699+ let new_hotkey = U256 :: from ( 2 ) ;
1700+ let non_member_hotkey = U256 :: from ( 3 ) ;
1701+ let mut weight = Weight :: zero ( ) ;
1702+
1703+ // Setup: Add old_hotkey as a Senate member
1704+ assert_ok ! ( SenateMembers :: add_member(
1705+ RawOrigin :: Root . into( ) ,
1706+ old_hotkey
1707+ ) ) ;
1708+
1709+ // Test 1: Successful swap
1710+ assert_ok ! ( SubtensorModule :: swap_senate_member(
1711+ & old_hotkey,
1712+ & new_hotkey,
1713+ & mut weight
1714+ ) ) ;
1715+ assert ! ( Senate :: is_member( & new_hotkey) ) ;
1716+ assert ! ( !Senate :: is_member( & old_hotkey) ) ;
1717+
1718+ // Verify weight update
1719+ let expected_weight = <Test as frame_system:: Config >:: DbWeight :: get ( ) . reads_writes ( 2 , 2 ) ;
1720+ assert_eq ! ( weight, expected_weight) ;
1721+
1722+ // Reset weight for next test
1723+ weight = Weight :: zero ( ) ;
1724+
1725+ // Test 2: Swap with non-member (should not change anything)
1726+ assert_ok ! ( SubtensorModule :: swap_senate_member(
1727+ & non_member_hotkey,
1728+ & new_hotkey,
1729+ & mut weight
1730+ ) ) ;
1731+ assert ! ( Senate :: is_member( & new_hotkey) ) ;
1732+ assert ! ( !Senate :: is_member( & non_member_hotkey) ) ;
1733+
1734+ // Verify weight update (should only have read operations)
1735+ let expected_weight = <Test as frame_system:: Config >:: DbWeight :: get ( ) . reads ( 1 ) ;
1736+ assert_eq ! ( weight, expected_weight) ;
1737+ } ) ;
1738+ }
0 commit comments