Skip to content

Commit a9d80d0

Browse files
committed
passes clippy
1 parent 91b86c3 commit a9d80d0

File tree

1 file changed

+142
-2
lines changed

1 file changed

+142
-2
lines changed

pallets/subtensor/src/tests/delegate_info.rs

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
use super::mock::*;
2+
13
use codec::Compact;
4+
use frame_support::assert_ok;
5+
use scale_info::prelude::collections::HashMap;
6+
use sp_core::U256;
27
use substrate_fixed::types::U64F64;
38

4-
use super::mock::*;
5-
69
#[test]
710
fn test_return_per_1000_tao() {
811
let take = // 18% take to the Validator
@@ -31,3 +34,140 @@ fn test_return_per_1000_tao() {
3134
eps
3235
);
3336
}
37+
38+
#[test]
39+
fn test_get_delegated() {
40+
new_test_ext(1).execute_with(|| {
41+
let sn_owner_0 = U256::from(0);
42+
let sn_owner_1 = U256::from(1);
43+
44+
// Delegates
45+
let owner_0 = U256::from(100);
46+
let owner_1 = U256::from(1 + 100);
47+
let delegate_0 = U256::from(200);
48+
let delegate_1 = U256::from(1 + 200);
49+
50+
// Create 2 networks
51+
let netuid_0 = add_dynamic_network(&sn_owner_0, &sn_owner_0);
52+
let netuid_1 = add_dynamic_network(&sn_owner_1, &sn_owner_1);
53+
54+
// Create delegate hotkey 0 on both networks
55+
register_ok_neuron(netuid_0, delegate_0, owner_0, 0);
56+
register_ok_neuron(netuid_1, delegate_0, owner_0, 1);
57+
58+
// Create delegate hotkey 1 on both networks
59+
register_ok_neuron(netuid_0, delegate_1, owner_1, 2);
60+
register_ok_neuron(netuid_1, delegate_1, owner_1, 3);
61+
62+
// Stake to both hotkeys on both networks with delegatee_0
63+
let delegatee_0 = U256::from(300);
64+
let to_stake_0 = vec![
65+
(netuid_0, Some(delegate_0), 1_000_000_000),
66+
(netuid_1, Some(delegate_0), 2_000_000_000),
67+
(netuid_0, Some(delegate_1), 1_000_000_000),
68+
(netuid_1, Some(delegate_1), 2_000_000_000),
69+
];
70+
71+
// Stake to both hotkeys on only one network with delegatee_1
72+
let delegatee_1 = U256::from(1 + 300);
73+
let to_stake_1 = vec![
74+
(netuid_0, Some(delegate_0), 1_000_000_000),
75+
(netuid_0, Some(delegate_1), 2_000_000_000),
76+
];
77+
78+
// Stake to both hotkey on either network with delegatee_2
79+
let delegatee_2 = U256::from(2 + 300);
80+
let to_stake_2 = vec![
81+
(netuid_0, Some(delegate_0), 1_000_000_000),
82+
(netuid_0, None, 0),
83+
(netuid_1, None, 0),
84+
(netuid_1, Some(delegate_1), 2_000_000_000),
85+
];
86+
87+
// Stake to one hotkey on one network with delegatee_3
88+
let delegatee_3 = U256::from(3 + 300);
89+
let to_stake_3 = vec![
90+
(netuid_0, Some(delegate_0), 1_000_000_000),
91+
(netuid_0, None, 0),
92+
(netuid_1, None, 0),
93+
(netuid_1, None, 0),
94+
];
95+
96+
// Stake to no hotkeys with delegatee_4
97+
let delegatee_4 = U256::from(4 + 300);
98+
let to_stake_4 = vec![
99+
(netuid_0, None, 0),
100+
(netuid_0, None, 0),
101+
(netuid_1, None, 0),
102+
(netuid_1, None, 0),
103+
];
104+
105+
// Run staking for each delegatee
106+
let coldkeys = vec![
107+
delegatee_0,
108+
delegatee_1,
109+
delegatee_2,
110+
delegatee_3,
111+
delegatee_4,
112+
];
113+
let to_stakes = [to_stake_0, to_stake_1, to_stake_2, to_stake_3, to_stake_4];
114+
let mut expected_stake_map: HashMap<U256, HashMap<U256, HashMap<u16, u64>>> =
115+
HashMap::new();
116+
117+
for (i, to_stake) in to_stakes.iter().enumerate() {
118+
let delegatee = coldkeys.get(i).expect("Delegatee not found");
119+
for (netuid, delegate, amount) in to_stake {
120+
let Some(delegate) = delegate else {
121+
continue;
122+
};
123+
SubtensorModule::add_balance_to_coldkey_account(delegatee, *amount + 500_000);
124+
assert_ok!(SubtensorModule::add_stake(
125+
RuntimeOrigin::signed(*delegatee),
126+
*delegate,
127+
*netuid,
128+
*amount
129+
));
130+
let expected_stake = SubtensorModule::get_stake_for_hotkey_and_coldkey_on_subnet(
131+
delegate, delegatee, *netuid,
132+
);
133+
let stakes = expected_stake_map
134+
.entry(*delegatee)
135+
.or_default()
136+
.entry(*delegate)
137+
.or_default();
138+
stakes.insert(*netuid, expected_stake);
139+
}
140+
}
141+
142+
// Check delegated info for each coldkey
143+
for coldkey in coldkeys {
144+
let delegated = SubtensorModule::get_delegated(coldkey);
145+
146+
for (delegate_info, (netuid, staked)) in delegated.iter() {
147+
if let Some(coldkey_stakes_map) = expected_stake_map.get(&coldkey) {
148+
if let Some(expected_under_delegate) =
149+
coldkey_stakes_map.get(&delegate_info.delegate_ss58)
150+
{
151+
if let Some(expected_stake) =
152+
expected_under_delegate.get(&u16::from(*netuid))
153+
{
154+
assert_eq!(u64::from(*staked), *expected_stake);
155+
} else {
156+
panic!(
157+
"Netuid {} not found in expected stake map",
158+
u16::from(*netuid)
159+
);
160+
};
161+
} else {
162+
panic!(
163+
"Delegate {} not found in expected stake map",
164+
delegate_info.delegate_ss58
165+
);
166+
};
167+
} else {
168+
panic!("Coldkey {} not found in expected stake map", coldkey);
169+
}
170+
}
171+
}
172+
});
173+
}

0 commit comments

Comments
 (0)