2
2
3
3
use codec:: Encode ;
4
4
use 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 } ;
7
7
mod mock;
8
8
use mock:: * ;
9
9
use pallet_subtensor:: * ;
@@ -167,6 +167,22 @@ fn test_do_swap_hotkey_ok_robust() {
167
167
SubtensorModule :: add_balance_to_coldkey_account ( coldkey, swap_cost) ;
168
168
}
169
169
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
+
170
186
// Perform the swaps for only two hotkeys
171
187
assert_ok ! ( SubtensorModule :: do_swap_hotkey(
172
188
<<Test as Config >:: RuntimeOrigin >:: signed( coldkeys[ 0 ] ) ,
@@ -268,6 +284,10 @@ fn test_do_swap_hotkey_ok_robust() {
268
284
assert_eq ! ( Keys :: <Test >:: get( netuid, uid) , new_hotkeys[ i] ) ;
269
285
}
270
286
}
287
+
288
+ // Verify Senate membership swap
289
+ assert ! ( !Senate :: is_member( & old_hotkeys[ i] ) ) ;
290
+ assert ! ( Senate :: is_member( & new_hotkeys[ i] ) ) ;
271
291
} else {
272
292
// Ensure other hotkeys remain unchanged
273
293
assert_eq ! (
@@ -278,6 +298,10 @@ fn test_do_swap_hotkey_ok_robust() {
278
298
SubtensorModule :: get_owning_coldkey_for_hotkey( & new_hotkeys[ i] ) ,
279
299
coldkeys[ i]
280
300
) ;
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] ) ) ;
281
305
}
282
306
}
283
307
}
@@ -1059,7 +1083,8 @@ fn test_do_swap_coldkey_success() {
1059
1083
let netuid = 1u16 ;
1060
1084
let stake_amount1 = 1000u64 ;
1061
1085
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;
1063
1088
1064
1089
// Setup initial state
1065
1090
add_network ( netuid, 13 , 0 ) ;
@@ -1158,7 +1183,7 @@ fn test_do_swap_coldkey_success() {
1158
1183
// Verify balance transfer
1159
1184
assert_eq ! (
1160
1185
SubtensorModule :: get_coldkey_balance( & new_coldkey) ,
1161
- free_balance_old
1186
+ free_balance_old - swap_cost
1162
1187
) ;
1163
1188
assert_eq ! ( SubtensorModule :: get_coldkey_balance( & old_coldkey) , 0 ) ;
1164
1189
@@ -1332,6 +1357,7 @@ fn test_do_swap_coldkey_with_subnet_ownership() {
1332
1357
let hotkey = U256 :: from ( 3 ) ;
1333
1358
let netuid = 1u16 ;
1334
1359
let stake_amount: u64 = 1000u64 ;
1360
+ let swap_cost = SubtensorModule :: get_key_swap_cost ( ) ;
1335
1361
1336
1362
// Setup initial state
1337
1363
add_network ( netuid, 13 , 0 ) ;
@@ -1340,7 +1366,7 @@ fn test_do_swap_coldkey_with_subnet_ownership() {
1340
1366
// Set TotalNetworks because swap relies on it
1341
1367
pallet_subtensor:: TotalNetworks :: < Test > :: set ( 1 ) ;
1342
1368
1343
- SubtensorModule :: add_balance_to_coldkey_account ( & old_coldkey, stake_amount) ;
1369
+ SubtensorModule :: add_balance_to_coldkey_account ( & old_coldkey, stake_amount + swap_cost ) ;
1344
1370
SubnetOwner :: < Test > :: insert ( netuid, old_coldkey) ;
1345
1371
1346
1372
// Populate OwnedHotkeys map
@@ -1666,24 +1692,47 @@ fn test_coldkey_swap_total() {
1666
1692
} ) ;
1667
1693
}
1668
1694
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