Skip to content

Commit 85895a4

Browse files
reset neuron data on registration
1 parent c097ff8 commit 85895a4

File tree

2 files changed

+67
-7
lines changed

2 files changed

+67
-7
lines changed

pallets/subtensor/src/uids.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ impl<T: Config> Pallet<T> {
4545
Uids::<T>::insert(netuid, new_hotkey.clone(), uid_to_replace); // Make uid - hotkey association.
4646
BlockAtRegistration::<T>::insert(netuid, uid_to_replace, block_number); // Fill block at registration.
4747
IsNetworkMember::<T>::insert(new_hotkey.clone(), netuid, true); // Fill network is member.
48+
49+
// 4. Reset trust, emission, consensus, incentive, dividends and axon_info for the new uid.
50+
Emission::<T>::mutate(netuid, |v| v[uid_to_replace as usize] = 0);
51+
Trust::<T>::mutate(netuid, |v| v[uid_to_replace as usize] = 0);
52+
Consensus::<T>::mutate(netuid, |v| v[uid_to_replace as usize] = 0);
53+
Incentive::<T>::mutate(netuid, |v| v[uid_to_replace as usize] = 0);
54+
Dividends::<T>::mutate(netuid, |v| v[uid_to_replace as usize] = 0);
55+
56+
// 4a. reset axon info for the new uid.
57+
Axons::<T>::remove(netuid, old_hotkey);
4858
}
4959

5060
/// Appends the uid to the network.

pallets/subtensor/tests/uids.rs

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,45 @@ fn test_replace_neuron() {
4848
// Get UID
4949
let neuron_uid = SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_account_id);
5050
assert_ok!(neuron_uid);
51+
let neuron_uid = neuron_uid.unwrap();
52+
53+
// set non-default values
54+
Emission::<T>::mutate(netuid, |v| v[neuron_uid as usize] = 5u16);
55+
Trust::<T>::mutate(netuid, |v| v[neuron_uid as usize] = 5u16);
56+
Consensus::<T>::mutate(netuid, |v| v[neuron_uid as usize] = 5u16);
57+
Incentive::<T>::mutate(netuid, |v| v[neuron_uid as usize] = 5u16);
58+
Dividends::<T>::mutate(netuid, |v| v[neuron_uid as usize] = 5u16);
59+
60+
// serve axon mock address
61+
let ip: u128 = 1676056785;
62+
let port: u16 = 9999;
63+
let ip_type: u8 = 4;
64+
let hotkey = SubtensorModule::get_hotkey_for_net_and_uid(netuid, neuron_uid).unwrap();
65+
assert!(SubtensorModule::serve_axon(
66+
<<Test as Config>::RuntimeOrigin>::signed(hotkey_account_id),
67+
netuid,
68+
0,
69+
ip,
70+
port,
71+
ip_type,
72+
0,
73+
0,
74+
0
75+
)
76+
.is_ok());
5177

5278
// Replace the neuron.
53-
SubtensorModule::replace_neuron(
54-
netuid,
55-
neuron_uid.unwrap(),
56-
&new_hotkey_account_id,
57-
block_number,
58-
);
79+
SubtensorModule::replace_neuron(netuid, neuron_uid, &new_hotkey_account_id, block_number);
80+
81+
assert!(!SubtensorModule::has_axon_info(netuid, &hotkey));
5982

6083
// Check old hotkey is not registered on any network.
6184
assert!(SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_account_id).is_err());
6285
assert!(!SubtensorModule::is_hotkey_registered_on_any_network(
6386
&hotkey_account_id
6487
));
6588

66-
let curr_hotkey = SubtensorModule::get_hotkey_for_net_and_uid(netuid, neuron_uid.unwrap());
89+
let curr_hotkey = SubtensorModule::get_hotkey_for_net_and_uid(netuid, neuron_uid);
6790
assert_ok!(curr_hotkey);
6891
assert_ne!(curr_hotkey.unwrap(), hotkey_account_id);
6992

@@ -75,6 +98,33 @@ fn test_replace_neuron() {
7598
&new_hotkey_account_id
7699
));
77100
assert_eq!(curr_hotkey.unwrap(), new_hotkey_account_id);
101+
102+
// Check trust, emission, consensus, incentive, dividends have been reset to 0.
103+
assert_eq!(SubtensorModule::get_trust_for_uid(netuid, neuron_uid), 0);
104+
assert_eq!(SubtensorModule::get_emission_for_uid(netuid, neuron_uid), 0);
105+
assert_eq!(
106+
SubtensorModule::get_consensus_for_uid(netuid, neuron_uid),
107+
0
108+
);
109+
assert_eq!(
110+
SubtensorModule::get_incentive_for_uid(netuid, neuron_uid),
111+
0
112+
);
113+
assert_eq!(
114+
SubtensorModule::get_dividends_for_uid(netuid, neuron_uid),
115+
0
116+
);
117+
118+
assert!(!SubtensorModule::has_axon_info(
119+
netuid,
120+
&new_hotkey_account_id
121+
));
122+
123+
// Check axon info is reset.
124+
let axon_info = SubtensorModule::get_axon_info(netuid, &curr_hotkey.unwrap());
125+
assert_eq!(axon_info.ip, 0);
126+
assert_eq!(axon_info.port, 0);
127+
assert_eq!(axon_info.ip_type, 0);
78128
});
79129
}
80130

0 commit comments

Comments
 (0)