Skip to content
Snippets Groups Projects
Unverified Commit 22ea5fa0 authored by bgallois's avatar bgallois
Browse files

split OnEvent membership handler

parent 49356241
No related branches found
No related tags found
1 merge request!246Fix weight accounting
This commit is part of merge request !246. Comments created here will be created in the context of that merge request.
...@@ -196,23 +196,29 @@ impl<T: Config> sp_membership::traits::CheckMembershipOpAllowed<IdtyIndex> for P ...@@ -196,23 +196,29 @@ impl<T: Config> sp_membership::traits::CheckMembershipOpAllowed<IdtyIndex> for P
} }
// implement membership event handler // implement membership event handler
impl<T: Config> sp_membership::traits::OnEvent<IdtyIndex> for Pallet<T> impl<T: Config> sp_membership::traits::OnNewMembership<IdtyIndex> for Pallet<T>
where where
T: pallet_membership::Config, T: pallet_membership::Config,
{ {
fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight { fn on_created(idty_index: &IdtyIndex) -> Weight {
match membership_event { // when main membership is acquired, tell identity
sp_membership::Event::<IdtyIndex>::MembershipAdded(idty_index) => { // (only used on first membership acquiry)
// when main membership is acquired, tell identity pallet_identity::Pallet::<T>::membership_added(*idty_index)
// (only used on first membership acquiry) }
pallet_identity::Pallet::<T>::membership_added(*idty_index)
} fn on_renewed(_idty_index: &IdtyIndex) -> Weight {
sp_membership::Event::<IdtyIndex>::MembershipRemoved(idty_index) => { Weight::zero()
// when main membership is lost, tell identity }
pallet_identity::Pallet::<T>::membership_removed(*idty_index) }
}
sp_membership::Event::<IdtyIndex>::MembershipRenewed(_) => Weight::zero(), // implement membership event handler
} impl<T: Config> sp_membership::traits::OnRemoveMembership<IdtyIndex> for Pallet<T>
where
T: pallet_membership::Config,
{
fn on_removed(idty_index: &IdtyIndex) -> Weight {
// when main membership is lost, tell identity
pallet_identity::Pallet::<T>::membership_removed(*idty_index)
} }
} }
......
...@@ -99,8 +99,10 @@ pub mod pallet { ...@@ -99,8 +99,10 @@ pub mod pallet {
// i.e. asking for distance evaluation // i.e. asking for distance evaluation
#[pallet::constant] #[pallet::constant]
type MembershipRenewalPeriod: Get<BlockNumberFor<Self>>; type MembershipRenewalPeriod: Get<BlockNumberFor<Self>>;
/// On event handler /// On new and renew membership handler
type OnEvent: OnEvent<Self::IdtyId>; type OnNewMembership: OnNewMembership<Self::IdtyId>;
/// On revoked and removed membership handler
type OnRemoveMembership: OnRemoveMembership<Self::IdtyId>;
/// Because this pallet emits events, it depends on the runtime's definition of an event. /// Because this pallet emits events, it depends on the runtime's definition of an event.
type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>; type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
type WeightInfo: WeightInfo; type WeightInfo: WeightInfo;
...@@ -272,7 +274,7 @@ pub mod pallet { ...@@ -272,7 +274,7 @@ pub mod pallet {
member: idty_id, member: idty_id,
expire_on, expire_on,
}); });
T::OnEvent::on_event(&sp_membership::Event::MembershipAdded(idty_id)); T::OnNewMembership::on_created(&idty_id);
} }
/// perform membership renewal /// perform membership renewal
...@@ -286,7 +288,7 @@ pub mod pallet { ...@@ -286,7 +288,7 @@ pub mod pallet {
member: idty_id, member: idty_id,
expire_on, expire_on,
}); });
T::OnEvent::on_event(&sp_membership::Event::MembershipRenewed(idty_id)); T::OnNewMembership::on_renewed(&idty_id);
} }
/// perform membership removal /// perform membership removal
...@@ -304,9 +306,7 @@ pub mod pallet { ...@@ -304,9 +306,7 @@ pub mod pallet {
member: idty_id, member: idty_id,
reason, reason,
}); });
weight = weight.saturating_add(T::OnEvent::on_event( weight = weight.saturating_add(T::OnRemoveMembership::on_removed(&idty_id));
&sp_membership::Event::MembershipRemoved(idty_id),
));
} }
weight weight
} }
......
...@@ -62,10 +62,26 @@ use impl_trait_for_tuples::impl_for_tuples; ...@@ -62,10 +62,26 @@ use impl_trait_for_tuples::impl_for_tuples;
#[impl_for_tuples(5)] #[impl_for_tuples(5)]
#[allow(clippy::let_and_return)] #[allow(clippy::let_and_return)]
impl<IdtyId> traits::OnEvent<IdtyId> for Tuple { impl<IdtyId> traits::OnNewMembership<IdtyId> for Tuple {
fn on_event(event: &Event<IdtyId>) -> Weight { fn on_created(idty_index: &IdtyId) -> Weight {
let mut weight = Weight::zero(); let mut weight = Weight::zero();
for_tuples!( #( weight = weight.saturating_add(Tuple::on_event(event)); )* ); for_tuples!( #( weight = weight.saturating_add(Tuple::on_created(idty_index)); )* );
weight
}
fn on_renewed(idty_index: &IdtyId) -> Weight {
let mut weight = Weight::zero();
for_tuples!( #( weight = weight.saturating_add(Tuple::on_renewed(idty_index)); )* );
weight
}
}
#[impl_for_tuples(5)]
#[allow(clippy::let_and_return)]
impl<IdtyId> traits::OnRemoveMembership<IdtyId> for Tuple {
fn on_removed(idty_index: &IdtyId) -> Weight {
let mut weight = Weight::zero();
for_tuples!( #( weight = weight.saturating_add(Tuple::on_removed(idty_index)); )* );
weight weight
} }
} }
...@@ -31,8 +31,13 @@ impl<IdtyId> CheckMembershipOpAllowed<IdtyId> for () { ...@@ -31,8 +31,13 @@ impl<IdtyId> CheckMembershipOpAllowed<IdtyId> for () {
} }
} }
pub trait OnEvent<IdtyId> { pub trait OnNewMembership<IdtyId> {
fn on_event(event: &crate::Event<IdtyId>) -> Weight; fn on_created(idty_index: &IdtyId) -> Weight;
fn on_renewed(idty_index: &IdtyId) -> Weight;
}
pub trait OnRemoveMembership<IdtyId> {
fn on_removed(idty_index: &IdtyId) -> Weight;
} }
// impl<IdtyId> OnEvent<IdtyId> for () { // impl<IdtyId> OnEvent<IdtyId> for () {
......
...@@ -33,55 +33,71 @@ where ...@@ -33,55 +33,71 @@ where
} }
// membership event runtime handler // membership event runtime handler
pub struct OnMembershipEventHandler<Inner, Runtime>(core::marker::PhantomData<(Inner, Runtime)>); pub struct OnNewMembershipHandler<Inner, Runtime>(core::marker::PhantomData<(Inner, Runtime)>);
impl< impl<
Inner: sp_membership::traits::OnEvent<IdtyIndex>, Inner: sp_membership::traits::OnNewMembership<IdtyIndex>,
Runtime: frame_system::Config<AccountId = AccountId> Runtime: frame_system::Config<AccountId = AccountId>
+ pallet_identity::Config<IdtyData = IdtyData, IdtyIndex = IdtyIndex> + pallet_identity::Config<IdtyData = IdtyData, IdtyIndex = IdtyIndex>
+ pallet_membership::Config + pallet_membership::Config
+ pallet_smith_members::Config<IdtyIndex = IdtyIndex> + pallet_smith_members::Config<IdtyIndex = IdtyIndex>
+ pallet_universal_dividend::Config, + pallet_universal_dividend::Config,
> sp_membership::traits::OnEvent<IdtyIndex> for OnMembershipEventHandler<Inner, Runtime> > sp_membership::traits::OnNewMembership<IdtyIndex> for OnNewMembershipHandler<Inner, Runtime>
{ {
fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight { fn on_created(idty_index: &IdtyIndex) -> Weight {
let mut weight = Weight::zero(); let mut weight = Weight::zero();
let mut add_db_reads_writes = |reads, writes| { let mut add_db_reads_writes = |reads, writes| {
weight += crate::constants::DbWeight::get().reads_writes(reads, writes); weight += crate::constants::DbWeight::get().reads_writes(reads, writes);
}; };
(match membership_event { // when main membership is acquired, it starts getting right to UD
// when membership is removed, call on_removed_member handler which auto claims UD pallet_identity::Identities::<Runtime>::mutate_exists(idty_index, |idty_val_opt| {
sp_membership::Event::MembershipRemoved(idty_index) => { if let Some(ref mut idty_val) = idty_val_opt {
if let Some(idty_value) = pallet_identity::Identities::<Runtime>::get(idty_index) { idty_val.data = IdtyData {
add_db_reads_writes(1, 0); first_eligible_ud:
if let Some(first_ud_index) = idty_value.data.first_eligible_ud.into() { pallet_universal_dividend::Pallet::<Runtime>::init_first_eligible_ud(),
add_db_reads_writes(1, 0); };
weight += pallet_universal_dividend::Pallet::<Runtime>::on_removed_member(
first_ud_index,
&idty_value.owner_key,
);
}
}
weight +=
pallet_smith_members::Pallet::<Runtime>::on_removed_wot_member(*idty_index);
} }
// when main membership is acquired, it starts getting right to UD
sp_membership::Event::MembershipAdded(idty_index) => {
pallet_identity::Identities::<Runtime>::mutate_exists(idty_index, |idty_val_opt| {
if let Some(ref mut idty_val) = idty_val_opt {
idty_val.data = IdtyData {
first_eligible_ud:
pallet_universal_dividend::Pallet::<Runtime>::init_first_eligible_ud(
),
};
}
});
add_db_reads_writes(1, 1);
}
// in other case, ther is nothing to do
sp_membership::Event::MembershipRenewed(_) => (),
}); });
weight.saturating_add(Inner::on_event(membership_event)) add_db_reads_writes(1, 1);
weight.saturating_add(Inner::on_created(idty_index))
}
fn on_renewed(_idty_index: &IdtyIndex) -> Weight {
Weight::zero()
}
}
// membership event runtime handler
pub struct OnRemoveMembershipHandler<Inner, Runtime>(core::marker::PhantomData<(Inner, Runtime)>);
impl<
Inner: sp_membership::traits::OnRemoveMembership<IdtyIndex>,
Runtime: frame_system::Config<AccountId = AccountId>
+ pallet_identity::Config<IdtyData = IdtyData, IdtyIndex = IdtyIndex>
+ pallet_membership::Config
+ pallet_smith_members::Config<IdtyIndex = IdtyIndex>
+ pallet_universal_dividend::Config,
> sp_membership::traits::OnRemoveMembership<IdtyIndex>
for OnRemoveMembershipHandler<Inner, Runtime>
{
fn on_removed(idty_index: &IdtyIndex) -> Weight {
let mut weight = Weight::zero();
let mut add_db_reads_writes = |reads, writes| {
weight += crate::constants::DbWeight::get().reads_writes(reads, writes);
};
// when membership is removed, call on_removed_member handler which auto claims UD
if let Some(idty_value) = pallet_identity::Identities::<Runtime>::get(idty_index) {
add_db_reads_writes(1, 0);
if let Some(first_ud_index) = idty_value.data.first_eligible_ud.into() {
add_db_reads_writes(1, 0);
weight += pallet_universal_dividend::Pallet::<Runtime>::on_removed_member(
first_ud_index,
&idty_value.owner_key,
);
}
}
weight += pallet_smith_members::Pallet::<Runtime>::on_removed_wot_member(*idty_index);
weight.saturating_add(Inner::on_removed(idty_index))
} }
} }
......
...@@ -499,7 +499,8 @@ type RuntimeFreezeReason = (); ...@@ -499,7 +499,8 @@ type RuntimeFreezeReason = ();
type AccountIdOf = common_runtime::providers::IdentityAccountIdProvider<Self>; type AccountIdOf = common_runtime::providers::IdentityAccountIdProvider<Self>;
type MembershipPeriod = MembershipPeriod; type MembershipPeriod = MembershipPeriod;
type MembershipRenewalPeriod = MembershipRenewalPeriod; type MembershipRenewalPeriod = MembershipRenewalPeriod;
type OnEvent = (OnMembershipEventHandler<Wot, Runtime>, Wot); type OnNewMembership = (OnNewMembershipHandler<Wot, Runtime>, Wot);
type OnRemoveMembership = (OnRemoveMembershipHandler<Wot, Runtime>);
type RuntimeEvent = RuntimeEvent; type RuntimeEvent = RuntimeEvent;
type WeightInfo = common_runtime::weights::pallet_membership::WeightInfo<Runtime>; type WeightInfo = common_runtime::weights::pallet_membership::WeightInfo<Runtime>;
#[cfg(feature = "runtime-benchmarks")] #[cfg(feature = "runtime-benchmarks")]
......
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