use super::{entities::*, AccountId, IdtyIndex};
use frame_support::{pallet_prelude::Weight, traits::UnfilteredDispatchable};
use pallet_smith_members::SmithRemovalReason;
pub struct OnNewSessionHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<Runtime> pallet_authority_members::traits::OnNewSession for OnNewSessionHandler<Runtime>
where
Runtime: pallet_provide_randomness::Config + pallet_smith_members::Config,
{
fn on_new_session(index: sp_staking::SessionIndex) {
pallet_provide_randomness::Pallet::<Runtime>::on_new_epoch();
pallet_smith_members::Pallet::<Runtime>::on_new_session(index);
}
}
pub struct OnNewIdtyHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<Runtime: pallet_duniter_wot::Config + pallet_quota::Config>
pallet_identity::traits::OnNewIdty<Runtime> for OnNewIdtyHandler<Runtime>
{
fn on_created(idty_index: &IdtyIndex, creator: &IdtyIndex) {
pallet_duniter_wot::Pallet::<Runtime>::on_created(idty_index, creator);
pallet_quota::Pallet::<Runtime>::on_created(idty_index, creator);
}
}
pub struct OnRemoveIdtyHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<Runtime: pallet_duniter_wot::Config + pallet_quota::Config>
pallet_identity::traits::OnRemoveIdty<Runtime> for OnRemoveIdtyHandler<Runtime>
{
fn on_removed(idty_index: &IdtyIndex) -> Weight {
let mut weight = pallet_duniter_wot::Pallet::<Runtime>::on_removed(idty_index);
weight += pallet_quota::Pallet::<Runtime>::on_removed(idty_index);
weight
}
fn on_revoked(idty_index: &IdtyIndex) -> Weight {
let mut weight = pallet_duniter_wot::Pallet::<Runtime>::on_revoked(idty_index);
weight += pallet_quota::Pallet::<Runtime>::on_revoked(idty_index);
weight
}
}
pub struct OnNewMembershipHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<
Runtime: frame_system::Config<AccountId = AccountId>
+ pallet_identity::Config<IdtyData = IdtyData, IdtyIndex = IdtyIndex>
+ pallet_duniter_wot::Config
+ pallet_universal_dividend::Config,
> sp_membership::traits::OnNewMembership<IdtyIndex> for OnNewMembershipHandler<Runtime>
{
fn on_created(idty_index: &IdtyIndex) {
pallet_duniter_wot::Pallet::<Runtime>::on_created(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(),
};
}
});
}
fn on_renewed(_idty_index: &IdtyIndex) {}
}
pub struct OnRemoveMembershipHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<
Runtime: frame_system::Config<AccountId = AccountId>
+ pallet_identity::Config<IdtyData = IdtyData, IdtyIndex = IdtyIndex>
+ pallet_smith_members::Config<IdtyIndex = IdtyIndex>
+ pallet_duniter_wot::Config
+ pallet_universal_dividend::Config,
> sp_membership::traits::OnRemoveMembership<IdtyIndex> for OnRemoveMembershipHandler<Runtime>
{
fn on_removed(idty_index: &IdtyIndex) -> Weight {
let mut weight = pallet_duniter_wot::Pallet::<Runtime>::on_removed(idty_index);
let mut add_db_reads_writes = |reads, writes| {
weight += crate::constants::DbWeight::get().reads_writes(reads, writes);
};
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.saturating_add(
pallet_smith_members::Pallet::<Runtime>::on_removed_wot_member(*idty_index),
)
}
}
pub struct TreasurySpendFunds<Runtime>(core::marker::PhantomData<Runtime>);
impl<Runtime> pallet_treasury::SpendFunds<Runtime> for TreasurySpendFunds<Runtime>
where
Runtime: pallet_treasury::Config,
{
fn spend_funds(
_budget_remaining: &mut pallet_treasury::BalanceOf<Runtime>,
_imbalance: &mut pallet_treasury::PositiveImbalanceOf<Runtime>,
_total_weight: &mut Weight,
missed_any: &mut bool,
) {
*missed_any = true;
}
}
pub struct OnSmithDeletedHandler<Runtime>(core::marker::PhantomData<Runtime>);
impl<Runtime> pallet_smith_members::traits::OnSmithDelete<Runtime::MemberId>
for OnSmithDeletedHandler<Runtime>
where
Runtime: pallet_authority_members::Config,
{
fn on_smith_delete(idty_index: Runtime::MemberId, _reason: SmithRemovalReason) {
let call = pallet_authority_members::Call::<Runtime>::remove_member {
member_id: idty_index,
};
if let Err(e) = call.dispatch_bypass_filter(frame_system::Origin::<Runtime>::Root.into()) {
sp_std::if_std! {
println!("faid to remove member: {:?}", e)
}
}
}
}