Skip to content

Commit 87be095

Browse files
reset neuron data on registration
1 parent 86b7f6d commit 87be095

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

pallets/subtensor/src/uids.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,37 @@ impl<T: Config> Pallet<T> {
99
SubnetworkN::<T>::get(netuid)
1010
}
1111

12+
pub fn set_emission_for_uid(netuid: u16, neuron_uid: u16, emission: u64) {
13+
Emission::<T>::mutate(netuid, |v| v[neuron_uid as usize] = emission);
14+
}
15+
pub fn set_trust_for_uid(netuid: u16, neuron_uid: u16, trust: u16) {
16+
Trust::<T>::mutate(netuid, |v| v[neuron_uid as usize] = trust);
17+
}
18+
pub fn set_consensus_for_uid(netuid: u16, neuron_uid: u16, consensus: u16) {
19+
Consensus::<T>::mutate(netuid, |v| v[neuron_uid as usize] = consensus);
20+
}
21+
pub fn set_incentive_for_uid(netuid: u16, neuron_uid: u16, incentive: u16) {
22+
Incentive::<T>::mutate(netuid, |v| v[neuron_uid as usize] = incentive);
23+
}
24+
pub fn set_dividends_for_uid(netuid: u16, neuron_uid: u16, dividends: u16) {
25+
Dividends::<T>::mutate(netuid, |v| v[neuron_uid as usize] = dividends);
26+
}
27+
28+
fn reset_axon_info_for_uid(netuid: u16, old_hotkey: &T::AccountId, new_hotkey: &T::AccountId) {
29+
let axon_info = AxonInfo {
30+
block: 0,
31+
version: 0,
32+
ip: 0,
33+
port: 0,
34+
ip_type: 0,
35+
protocol: 0,
36+
placeholder1: 0,
37+
placeholder2: 0,
38+
};
39+
Axons::<T>::remove(netuid, old_hotkey);
40+
Axons::<T>::set(netuid, new_hotkey, Some(axon_info));
41+
}
42+
1243
/// Replace the neuron under this uid.
1344
pub fn replace_neuron(
1445
netuid: u16,
@@ -45,6 +76,15 @@ impl<T: Config> Pallet<T> {
4576
Uids::<T>::insert(netuid, new_hotkey.clone(), uid_to_replace); // Make uid - hotkey association.
4677
BlockAtRegistration::<T>::insert(netuid, uid_to_replace, block_number); // Fill block at registration.
4778
IsNetworkMember::<T>::insert(new_hotkey.clone(), netuid, true); // Fill network is member.
79+
80+
// 4. Reset trust, emission, consensus, incentive, dividends and axon_info for the new uid.
81+
Self::set_trust_for_uid(netuid, uid_to_replace, 0);
82+
Self::set_emission_for_uid(netuid, uid_to_replace, 0);
83+
Self::set_consensus_for_uid(netuid, uid_to_replace, 0);
84+
Self::set_incentive_for_uid(netuid, uid_to_replace, 0);
85+
Self::set_dividends_for_uid(netuid, uid_to_replace, 0);
86+
87+
Self::reset_axon_info_for_uid(netuid, &old_hotkey, new_hotkey);
4888
}
4989

5090
/// Appends the uid to the network.

pallets/subtensor/tests/uids.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ fn test_replace_neuron() {
4949
let neuron_uid = SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_account_id);
5050
assert_ok!(neuron_uid);
5151

52+
// set some values
53+
SubtensorModule::set_trust_for_uid(netuid, neuron_uid.unwrap(), 5u16);
54+
SubtensorModule::set_emission_for_uid(netuid, neuron_uid.unwrap(), 5u64);
55+
SubtensorModule::set_consensus_for_uid(netuid, neuron_uid.unwrap(), 5u16);
56+
SubtensorModule::set_incentive_for_uid(netuid, neuron_uid.unwrap(), 5u16);
57+
SubtensorModule::set_dividends_for_uid(netuid, neuron_uid.unwrap(), 5u16);
58+
5259
// Replace the neuron.
5360
SubtensorModule::replace_neuron(
5461
netuid,
@@ -75,6 +82,47 @@ fn test_replace_neuron() {
7582
&new_hotkey_account_id
7683
));
7784
assert_eq!(curr_hotkey.unwrap(), new_hotkey_account_id);
85+
86+
assert_eq!(
87+
SubtensorModule::has_axon_info(netuid, &hotkey_account_id),
88+
false
89+
);
90+
// Check trust, emission, consensus, incentive, dividends have been reset to 0.
91+
assert_eq!(
92+
SubtensorModule::get_trust_for_uid(netuid, neuron_uid.unwrap()),
93+
0
94+
);
95+
assert_eq!(
96+
SubtensorModule::get_emission_for_uid(netuid, neuron_uid.unwrap()),
97+
0
98+
);
99+
assert_eq!(
100+
SubtensorModule::get_consensus_for_uid(netuid, neuron_uid.unwrap()),
101+
0
102+
);
103+
assert_eq!(
104+
SubtensorModule::get_incentive_for_uid(netuid, neuron_uid.unwrap()),
105+
0
106+
);
107+
assert_eq!(
108+
SubtensorModule::get_dividends_for_uid(netuid, neuron_uid.unwrap()),
109+
0
110+
);
111+
112+
assert_eq!(
113+
SubtensorModule::has_axon_info(netuid, &hotkey.unwrap()),
114+
false
115+
);
116+
117+
// Check axon info has been reset.
118+
let axon_info = SubtensorModule::get_axon_info(netuid, &curr_hotkey.unwrap());
119+
assert_eq!(axon_info.ip, 0);
120+
assert_eq!(axon_info.version, 0);
121+
assert_eq!(axon_info.port, 0);
122+
assert_eq!(axon_info.ip_type, 0);
123+
assert_eq!(axon_info.protocol, 0);
124+
assert_eq!(axon_info.placeholder1, 0);
125+
assert_eq!(axon_info.placeholder2, 0);
78126
});
79127
}
80128

0 commit comments

Comments
 (0)