Skip to content
Snippets Groups Projects
Commit 2bc694a5 authored by Éloïs's avatar Éloïs
Browse files

feat(runtimes): count idtities & memberships with CountedStorageMap

parent 3a3150b1
No related branches found
No related tags found
No related merge requests found
......@@ -134,7 +134,6 @@ pub mod pallet {
let mut identities = self.identities.clone();
identities.sort_unstable_by(|a, b| a.index.cmp(&b.index));
<IdentitiesCount<T>>::put(identities.len() as u64);
for idty in identities.into_iter() {
let idty_index = Pallet::<T>::get_next_idty_index();
if idty.value.removable_on > T::BlockNumber::zero() {
......@@ -155,7 +154,7 @@ pub mod pallet {
#[pallet::storage]
#[pallet::getter(fn identity)]
pub type Identities<T: Config> =
StorageMap<_, Twox64Concat, T::IdtyIndex, IdtyValue<T::BlockNumber>, OptionQuery>;
CountedStorageMap<_, Twox64Concat, T::IdtyIndex, IdtyValue<T::BlockNumber>, OptionQuery>;
#[pallet::storage]
#[pallet::getter(fn identity_index_of)]
......@@ -169,10 +168,6 @@ pub mod pallet {
#[pallet::storage]
pub(super) type NextIdtyIndex<T: Config> = StorageValue<_, T::IdtyIndex, ValueQuery>;
#[pallet::storage]
#[pallet::getter(fn identities_count)]
pub(super) type IdentitiesCount<T: Config> = StorageValue<_, u64, ValueQuery>;
/// Identities by removed block
#[pallet::storage]
#[pallet::getter(fn removable_on)]
......@@ -266,7 +261,6 @@ pub mod pallet {
);
IdentitiesRemovableOn::<T>::append(removable_on, (idty_index, IdtyStatus::Created));
IdentityIndexOf::<T>::insert(owner_key.clone(), idty_index);
Self::inc_identities_counter();
Self::deposit_event(Event::IdtyCreated(idty_index, owner_key));
T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Created { creator });
Ok(().into())
......@@ -459,19 +453,19 @@ pub mod pallet {
NotRespectIdtyCreationPeriod,
}
// INTERNAL FUNCTIONS //
// PUBLIC FUNCTIONS //
impl<T: Config> Pallet<T> {
fn dec_identities_counter() {
if let Ok(counter) = <IdentitiesCount<T>>::try_get() {
<IdentitiesCount<T>>::put(counter.saturating_sub(1));
} else {
panic!("storage corrupted")
}
pub fn identities_count() -> u32 {
Identities::<T>::count()
}
}
// INTERNAL FUNCTIONS //
impl<T: Config> Pallet<T> {
pub(super) fn do_remove_identity(idty_index: T::IdtyIndex) -> Weight {
<Identities<T>>::remove(idty_index);
Self::dec_identities_counter();
T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Removed);
0
......@@ -485,13 +479,6 @@ pub mod pallet {
T::IdtyIndex::one()
}
}
fn inc_identities_counter() {
if let Ok(counter) = <IdentitiesCount<T>>::try_get() {
<IdentitiesCount<T>>::put(counter.saturating_add(1));
} else {
<IdentitiesCount<T>>::put(1);
}
}
fn prune_identities(block_number: T::BlockNumber) -> Weight {
let mut total_weight: Weight = 0;
......
......@@ -127,7 +127,7 @@ pub mod pallet {
#[pallet::storage]
#[pallet::getter(fn membership)]
pub type Membership<T: Config<I>, I: 'static = ()> =
StorageMap<_, Twox64Concat, T::IdtyId, MembershipData<T::BlockNumber>, OptionQuery>;
CountedStorageMap<_, Twox64Concat, T::IdtyId, MembershipData<T::BlockNumber>, OptionQuery>;
#[pallet::storage]
#[pallet::getter(fn memberships_expire_on)]
......@@ -477,3 +477,9 @@ impl<T: Config<I>, I: 'static> sp_runtime::traits::IsMember<T::IdtyId> for Palle
Self::is_member_inner(idty_id)
}
}
impl<T: Config<I>, I: 'static> MembersCount for Pallet<T, I> {
fn members_count() -> u32 {
Membership::<T, I>::count()
}
}
......@@ -19,7 +19,7 @@ use crate::mock::*;
use crate::{Error, Event};
use frame_support::assert_ok;
use maplit::btreemap;
use sp_membership::traits::IsInPendingMemberships;
use sp_membership::traits::*;
use sp_membership::MembershipData;
use sp_runtime::traits::IsMember;
......@@ -46,6 +46,7 @@ fn test_genesis_build() {
renewable_on: 2
})
);
assert_eq!(DefaultMembership::members_count(), 1);
});
}
......
......@@ -51,6 +51,10 @@ impl<IdtyId, MetaData> OnEvent<IdtyId, MetaData> for () {
}
}
pub trait MembersCount {
fn members_count() -> u32;
}
pub trait MembershipExternalStorage<BlockNumber: Decode + Encode + TypeInfo, IdtyId>:
sp_runtime::traits::IsMember<IdtyId>
{
......
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