Skip to content
Snippets Groups Projects

Resolve "use counted maps instead of counters in authority members"

1 unresolved thread
@@ -116,7 +116,6 @@ pub mod pallet {
.collect::<Vec<T::MemberId>>();
members_ids.sort();
AuthoritiesCounter::<T>::put(members_ids.len() as u32);
OnlineAuthorities::<T>::put(members_ids.clone());
}
}
@@ -129,11 +128,6 @@ pub mod pallet {
pub type AccountIdOf<T: Config> =
StorageMap<_, Twox64Concat, T::MemberId, T::AccountId, OptionQuery>;
/// count the number of authorities
#[pallet::storage]
#[pallet::getter(fn authorities_counter)]
pub type AuthoritiesCounter<T: Config> = StorageValue<_, u32, ValueQuery>;
/// list incoming authorities
#[pallet::storage]
#[pallet::getter(fn incoming)]
@@ -270,7 +264,10 @@ pub mod pallet {
if Self::is_online(member_id) && !is_outgoing {
return Err(Error::<T>::AlreadyOnline.into());
}
if AuthoritiesCounter::<T>::get() >= T::MaxAuthorities::get() {
let authorities_count = OnlineAuthorities::<T>::get().len()
+ IncomingAuthorities::<T>::get().len()
- OutgoingAuthorities::<T>::get().len();
if authorities_count as u32 >= T::MaxAuthorities::get() {
return Err(Error::<T>::TooManyAuthorities.into());
}
@@ -411,7 +408,7 @@ pub mod pallet {
}
/// perform incoming authorities insertion
fn insert_in(member_id: T::MemberId) -> bool {
let not_already_inserted = IncomingAuthorities::<T>::mutate(|members_ids| {
let did_insert_in = IncomingAuthorities::<T>::mutate(|members_ids| {
if let Err(index) = members_ids.binary_search(&member_id) {
members_ids.insert(index, member_id);
true
@@ -419,15 +416,14 @@ pub mod pallet {
false
}
});
if not_already_inserted {
AuthoritiesCounter::<T>::mutate(|counter| *counter += 1);
if did_insert_in {
Self::deposit_event(Event::MemberGoOnline { member: member_id });
}
not_already_inserted
did_insert_in
}
/// perform outgoing authority insertion
pub fn insert_out(member_id: T::MemberId) -> bool {
let not_already_inserted = OutgoingAuthorities::<T>::mutate(|members_ids| {
let did_insert_out = OutgoingAuthorities::<T>::mutate(|members_ids| {
if let Err(index) = members_ids.binary_search(&member_id) {
members_ids.insert(index, member_id);
true
@@ -435,15 +431,10 @@ pub mod pallet {
false
}
});
if not_already_inserted {
AuthoritiesCounter::<T>::mutate(|counter| {
if *counter > 0 {
*counter -= 1
}
});
if did_insert_out {
Self::deposit_event(Event::MemberGoOffline { member: member_id });
}
not_already_inserted
did_insert_out
}
/// check if member is incoming
fn is_incoming(member_id: T::MemberId) -> bool {
@@ -469,7 +460,6 @@ pub mod pallet {
}
/// perform removal from incoming authorities
fn remove_in(member_id: T::MemberId) {
AuthoritiesCounter::<T>::mutate(|counter| counter.saturating_sub(1));
IncomingAuthorities::<T>::mutate(|members_ids| {
if let Ok(index) = members_ids.binary_search(&member_id) {
members_ids.remove(index);
@@ -478,7 +468,6 @@ pub mod pallet {
}
/// perform removal from online authorities
fn remove_online(member_id: T::MemberId) {
AuthoritiesCounter::<T>::mutate(|counter| counter.saturating_add(1));
OnlineAuthorities::<T>::mutate(|members_ids| {
if let Ok(index) = members_ids.binary_search(&member_id) {
members_ids.remove(index);
Loading