Skip to content

Commit e96625a

Browse files
committed
fix announcement
1 parent c5b0330 commit e96625a

File tree

3 files changed

+64
-49
lines changed

3 files changed

+64
-49
lines changed

pallets/subtensor/src/macros/dispatches.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2345,6 +2345,15 @@ mod dispatches {
23452345
let who = ensure_signed(origin)?;
23462346
let now = <frame_system::Pallet<T>>::block_number();
23472347

2348+
if let Some(existing) = ColdkeySwapAnnouncements::<T>::get(who.clone()) {
2349+
let delay = ColdkeySwapScheduleDuration::<T>::get();
2350+
let when = existing.0;
2351+
ensure!(
2352+
now > when + delay,
2353+
Error::<T>::ColdkeySwapReannouncedTooEarly
2354+
);
2355+
}
2356+
23482357
ColdkeySwapAnnouncements::<T>::insert(who.clone(), (now, new_coldkey.clone()));
23492358

23502359
Self::deposit_event(Event::ColdkeySwapAnnounced {
@@ -2355,25 +2364,8 @@ mod dispatches {
23552364
Ok(())
23562365
}
23572366

2358-
/// Removes a coldkey swap announcement.
2359-
#[pallet::call_index(126)]
2360-
#[pallet::weight(Weight::zero())]
2361-
pub fn remove_coldkey_swap_announcement(origin: OriginFor<T>) -> DispatchResult {
2362-
let who = ensure_signed(origin)?;
2363-
2364-
ensure!(
2365-
ColdkeySwapAnnouncements::<T>::contains_key(who.clone()),
2366-
Error::<T>::ColdkeySwapAnnouncementNotFound
2367-
);
2368-
2369-
ColdkeySwapAnnouncements::<T>::remove(who.clone());
2370-
2371-
Self::deposit_event(Event::ColdkeySwapAnnouncementRemoved { who: who.clone() });
2372-
Ok(())
2373-
}
2374-
23752367
/// Performs a coldkey swap iff an announcement has been made.
2376-
#[pallet::call_index(127)]
2368+
#[pallet::call_index(126)]
23772369
#[pallet::weight(Weight::zero())]
23782370
pub fn swap_coldkey_announced(origin: OriginFor<T>) -> DispatchResult {
23792371
let who = ensure_signed(origin)?;
@@ -2382,8 +2374,8 @@ mod dispatches {
23822374
.ok_or(Error::<T>::ColdkeySwapAnnouncementNotFound)?;
23832375

23842376
let now = <frame_system::Pallet<T>>::block_number();
2385-
let delay = when + ColdkeySwapScheduleDuration::<T>::get();
2386-
ensure!(now >= delay, Error::<T>::ColdkeySwapTooEarly);
2377+
let delay = ColdkeySwapScheduleDuration::<T>::get();
2378+
ensure!(now > when + delay, Error::<T>::ColdkeySwapTooEarly);
23872379

23882380
Self::do_swap_coldkey(&who, &new_coldkey)?;
23892381

pallets/subtensor/src/macros/errors.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ mod errors {
154154
ColdkeySwapAnnouncementNotFound,
155155
/// Coldkey swap too early.
156156
ColdkeySwapTooEarly,
157+
/// Coldkey swap reannounced too early.
158+
ColdkeySwapReannouncedTooEarly,
157159
/// New coldkey is hotkey
158160
NewColdKeyIsHotkey,
159161
/// Childkey take is invalid.

pallets/subtensor/src/tests/swap_coldkey.rs

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ use crate::*;
2929
use crate::{Call, ColdkeySwapScheduleDuration, Error};
3030

3131
#[test]
32-
fn test_announce_coldkey_swap_works() {
32+
fn test_announce_coldkey_swap_with_no_announcement_works() {
3333
new_test_ext(1).execute_with(|| {
3434
let who = U256::from(1);
35-
let new_coldkey = U256::from(1);
35+
let new_coldkey = U256::from(2);
3636

3737
assert_eq!(ColdkeySwapAnnouncements::<Test>::iter().count(), 0);
3838

@@ -58,65 +58,86 @@ fn test_announce_coldkey_swap_works() {
5858
}
5959

6060
#[test]
61-
fn test_announce_coldkey_swap_bad_origin_fails() {
61+
fn test_announce_coldkey_swap_with_existing_announcement_past_delay_works() {
6262
new_test_ext(1).execute_with(|| {
63-
let new_coldkey = U256::from(1);
63+
let who = U256::from(1);
64+
let new_coldkey = U256::from(2);
65+
let new_coldkey_2 = U256::from(3);
6466

65-
assert_noop!(
66-
SubtensorModule::announce_coldkey_swap(RuntimeOrigin::none(), new_coldkey),
67-
BadOrigin
67+
assert_eq!(ColdkeySwapAnnouncements::<Test>::iter().count(), 0);
68+
69+
assert_ok!(SubtensorModule::announce_coldkey_swap(
70+
RuntimeOrigin::signed(who.clone()),
71+
new_coldkey,
72+
));
73+
74+
let now = System::block_number();
75+
assert_eq!(
76+
ColdkeySwapAnnouncements::<Test>::iter().collect::<Vec<_>>(),
77+
vec![(who.clone(), (now, new_coldkey))]
6878
);
6979

70-
assert_noop!(
71-
SubtensorModule::announce_coldkey_swap(RuntimeOrigin::root(), new_coldkey),
72-
BadOrigin
80+
let delay = ColdkeySwapScheduleDuration::<Test>::get() + 1;
81+
System::run_to_block::<AllPalletsWithSystem>(now + delay);
82+
83+
assert_ok!(SubtensorModule::announce_coldkey_swap(
84+
RuntimeOrigin::signed(who.clone()),
85+
new_coldkey_2,
86+
));
87+
88+
let now = System::block_number();
89+
assert_eq!(
90+
ColdkeySwapAnnouncements::<Test>::iter().collect::<Vec<_>>(),
91+
vec![(who.clone(), (now, new_coldkey_2))]
7392
);
7493
});
7594
}
7695

7796
#[test]
78-
fn test_remove_coldkey_swap_announcement_works() {
97+
fn test_announce_coldkey_swap_with_existing_announcement_not_past_delay_fails() {
7998
new_test_ext(1).execute_with(|| {
8099
let who = U256::from(1);
81100
let new_coldkey = U256::from(2);
82-
let now = System::block_number();
83-
ColdkeySwapAnnouncements::<Test>::insert(who.clone(), (now, new_coldkey));
101+
let new_coldkey_2 = U256::from(3);
102+
103+
assert_eq!(ColdkeySwapAnnouncements::<Test>::iter().count(), 0);
84104

85-
assert_ok!(SubtensorModule::remove_coldkey_swap_announcement(
105+
assert_ok!(SubtensorModule::announce_coldkey_swap(
86106
RuntimeOrigin::signed(who.clone()),
107+
new_coldkey,
87108
));
88109

89-
assert_eq!(ColdkeySwapAnnouncements::<Test>::iter().count(), 0);
110+
let now = System::block_number();
90111
assert_eq!(
91-
last_event(),
92-
RuntimeEvent::SubtensorModule(Event::ColdkeySwapAnnouncementRemoved { who })
112+
ColdkeySwapAnnouncements::<Test>::iter().collect::<Vec<_>>(),
113+
vec![(who.clone(), (now, new_coldkey))]
93114
);
94-
});
95-
}
96115

97-
#[test]
98-
fn test_remove_coldkey_swap_announcement_fails_if_no_announcement_exists() {
99-
new_test_ext(1).execute_with(|| {
100-
let who = U256::from(1);
101-
let new_coldkey = U256::from(2);
116+
let unmet_delay = ColdkeySwapScheduleDuration::<Test>::get();
117+
System::run_to_block::<AllPalletsWithSystem>(now + unmet_delay);
102118

103119
assert_noop!(
104-
SubtensorModule::remove_coldkey_swap_announcement(RuntimeOrigin::signed(who.clone())),
105-
Error::<Test>::ColdkeySwapAnnouncementNotFound
120+
SubtensorModule::announce_coldkey_swap(
121+
RuntimeOrigin::signed(who.clone()),
122+
new_coldkey_2,
123+
),
124+
Error::<Test>::ColdkeySwapReannouncedTooEarly
106125
);
107126
});
108127
}
109128

110129
#[test]
111-
fn test_remove_coldkey_swap_announcement_bad_origin_fails() {
130+
fn test_announce_coldkey_swap_with_bad_origin_fails() {
112131
new_test_ext(1).execute_with(|| {
132+
let new_coldkey = U256::from(1);
133+
113134
assert_noop!(
114-
SubtensorModule::remove_coldkey_swap_announcement(RuntimeOrigin::none()),
135+
SubtensorModule::announce_coldkey_swap(RuntimeOrigin::none(), new_coldkey),
115136
BadOrigin
116137
);
117138

118139
assert_noop!(
119-
SubtensorModule::remove_coldkey_swap_announcement(RuntimeOrigin::root()),
140+
SubtensorModule::announce_coldkey_swap(RuntimeOrigin::root(), new_coldkey),
120141
BadOrigin
121142
);
122143
});

0 commit comments

Comments
 (0)