Skip to content
Snippets Groups Projects
Commit 874d1c93 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

fix(#148) "use counted maps instead of counters in authority members" (!224)

* fix(#148): update metadata.scale

* fix(#148): remove AuthoritiesCounter

* fix(#148): reveal bug with a test
parent 644aef3f
No related branches found
No related tags found
1 merge request!224Resolve "use counted maps instead of counters in authority members"
Pipeline #35235 passed
...@@ -116,18 +116,12 @@ pub mod pallet { ...@@ -116,18 +116,12 @@ pub mod pallet {
.collect::<Vec<T::MemberId>>(); .collect::<Vec<T::MemberId>>();
members_ids.sort(); members_ids.sort();
AuthoritiesCounter::<T>::put(members_ids.len() as u32);
OnlineAuthorities::<T>::put(members_ids.clone()); OnlineAuthorities::<T>::put(members_ids.clone());
} }
} }
// STORAGE // // STORAGE //
/// count the number of authorities
#[pallet::storage]
#[pallet::getter(fn authorities_counter)]
pub type AuthoritiesCounter<T: Config> = StorageValue<_, u32, ValueQuery>;
/// list incoming authorities /// list incoming authorities
#[pallet::storage] #[pallet::storage]
#[pallet::getter(fn incoming)] #[pallet::getter(fn incoming)]
...@@ -264,7 +258,7 @@ pub mod pallet { ...@@ -264,7 +258,7 @@ pub mod pallet {
if Self::is_online(member_id) && !is_outgoing { if Self::is_online(member_id) && !is_outgoing {
return Err(Error::<T>::AlreadyOnline.into()); return Err(Error::<T>::AlreadyOnline.into());
} }
if AuthoritiesCounter::<T>::get() >= T::MaxAuthorities::get() { if Self::authorities_counter() >= T::MaxAuthorities::get() {
return Err(Error::<T>::TooManyAuthorities.into()); return Err(Error::<T>::TooManyAuthorities.into());
} }
...@@ -371,6 +365,12 @@ pub mod pallet { ...@@ -371,6 +365,12 @@ pub mod pallet {
Ok(().into()) Ok(().into())
} }
pub fn authorities_counter() -> u32 {
let count = OnlineAuthorities::<T>::get().len() + IncomingAuthorities::<T>::get().len()
- OutgoingAuthorities::<T>::get().len();
count as u32
}
} }
// INTERNAL FUNCTIONS // // INTERNAL FUNCTIONS //
...@@ -414,7 +414,6 @@ pub mod pallet { ...@@ -414,7 +414,6 @@ pub mod pallet {
} }
}); });
if not_already_inserted { if not_already_inserted {
AuthoritiesCounter::<T>::mutate(|counter| *counter += 1);
Self::deposit_event(Event::MemberGoOnline { member: member_id }); Self::deposit_event(Event::MemberGoOnline { member: member_id });
} }
not_already_inserted not_already_inserted
...@@ -430,11 +429,6 @@ pub mod pallet { ...@@ -430,11 +429,6 @@ pub mod pallet {
} }
}); });
if not_already_inserted { if not_already_inserted {
AuthoritiesCounter::<T>::mutate(|counter| {
if *counter > 0 {
*counter -= 1
}
});
Self::deposit_event(Event::MemberGoOffline { member: member_id }); Self::deposit_event(Event::MemberGoOffline { member: member_id });
} }
not_already_inserted not_already_inserted
...@@ -463,7 +457,6 @@ pub mod pallet { ...@@ -463,7 +457,6 @@ pub mod pallet {
} }
/// perform removal from incoming authorities /// perform removal from incoming authorities
fn remove_in(member_id: T::MemberId) { fn remove_in(member_id: T::MemberId) {
AuthoritiesCounter::<T>::mutate(|counter| counter.saturating_sub(1));
IncomingAuthorities::<T>::mutate(|members_ids| { IncomingAuthorities::<T>::mutate(|members_ids| {
if let Ok(index) = members_ids.binary_search(&member_id) { if let Ok(index) = members_ids.binary_search(&member_id) {
members_ids.remove(index); members_ids.remove(index);
...@@ -472,7 +465,6 @@ pub mod pallet { ...@@ -472,7 +465,6 @@ pub mod pallet {
} }
/// perform removal from online authorities /// perform removal from online authorities
fn remove_online(member_id: T::MemberId) { fn remove_online(member_id: T::MemberId) {
AuthoritiesCounter::<T>::mutate(|counter| counter.saturating_add(1));
OnlineAuthorities::<T>::mutate(|members_ids| { OnlineAuthorities::<T>::mutate(|members_ids| {
if let Ok(index) = members_ids.binary_search(&member_id) { if let Ok(index) = members_ids.binary_search(&member_id) {
members_ids.remove(index); members_ids.remove(index);
......
...@@ -175,6 +175,8 @@ fn test_too_many_authorities() { ...@@ -175,6 +175,8 @@ fn test_too_many_authorities() {
assert_eq!(AuthorityMembers::authorities_counter(), 3); assert_eq!(AuthorityMembers::authorities_counter(), 3);
assert_ok!(AuthorityMembers::go_online(RuntimeOrigin::signed(15)),); assert_ok!(AuthorityMembers::go_online(RuntimeOrigin::signed(15)),);
assert_eq!(AuthorityMembers::authorities_counter(), 4); assert_eq!(AuthorityMembers::authorities_counter(), 4);
assert_ok!(AuthorityMembers::remove_member(RawOrigin::Root.into(), 15));
assert_eq!(AuthorityMembers::authorities_counter(), 3);
}); });
} }
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment