From 53c2df8cf13ae18fc3bdb81d5d8bed00f3728a28 Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Thu, 14 Dec 2023 16:09:21 +0100 Subject: [PATCH] feat(smith-members): blacklisting stub --- pallets/authority-members/src/impls.rs | 11 ++++++----- pallets/authority-members/src/lib.rs | 1 + pallets/smith-members/src/impls.rs | 8 +++++--- pallets/smith-members/src/lib.rs | 9 +++++++++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/pallets/authority-members/src/impls.rs b/pallets/authority-members/src/impls.rs index ade9f7437..bdea383ae 100644 --- a/pallets/authority-members/src/impls.rs +++ b/pallets/authority-members/src/impls.rs @@ -24,6 +24,7 @@ #![allow(clippy::type_complexity)] use super::pallet::*; +use crate::OnBlacklistedMember; use frame_support::pallet_prelude::Weight; use frame_support::traits::Get; use pallet_offences::traits::OnOffenceHandler; @@ -54,9 +55,9 @@ where match strategy { SlashStrategy::Blacklist => { for offender in offenders { - Blacklist::<T>::mutate(|blacklist| { - if let Some(member_id) = T::MemberIdOf::convert(offender.offender.0.clone()) - { + if let Some(member_id) = T::MemberIdOf::convert(offender.offender.0.clone()) { + T::OnBlacklistedMember::on_blacklisted_member(member_id.clone()); + Blacklist::<T>::mutate(|blacklist| { if !blacklist.contains(&member_id) { blacklist.push(member_id); Self::deposit_event(Event::MemberAddedToBlacklist { @@ -66,8 +67,8 @@ where } Self::insert_out(member_id); add_db_reads_writes(2, 1); - } - }) + }); + } } } SlashStrategy::Disconnect => { diff --git a/pallets/authority-members/src/lib.rs b/pallets/authority-members/src/lib.rs index 9284bb25c..78be54ef2 100644 --- a/pallets/authority-members/src/lib.rs +++ b/pallets/authority-members/src/lib.rs @@ -71,6 +71,7 @@ pub mod pallet { type OnRemovedMember: OnRemovedMember<Self::MemberId>; type OnOutgoingMember: OnOutgoingMember<Self::MemberId>; type OnIncomingMember: OnIncomingMember<Self::MemberId>; + type OnBlacklistedMember: OnBlacklistedMember<Self::MemberId>; /// Max number of authorities allowed #[pallet::constant] type MaxAuthorities: Get<u32>; diff --git a/pallets/smith-members/src/impls.rs b/pallets/smith-members/src/impls.rs index be6180f05..12b7c9077 100644 --- a/pallets/smith-members/src/impls.rs +++ b/pallets/smith-members/src/impls.rs @@ -15,9 +15,11 @@ impl<T: Config> pallet_authority_members::OnRemovedMember<T> for Pallet<T> { /// We want to remove a Smith when he is removed (blacklisted) from the higher level set of "authorities". /// A blacklisting means the user does not respect the operational conditions for an authority, so /// he does not deserve the Smith role. -impl<T: Config> pallet_authority_members::OnBlacklistedMember<T> for Pallet<T> { - fn on_blacklisted_member(member_id: T) { - todo!("Remove smith, he is dangereous") +impl<T: Config> pallet_authority_members::OnBlacklistedMember<T::MemberId> for Pallet<T> { + fn on_blacklisted_member(member_id: T::MemberId) { + Pallet::<T>::smith_goes_blacklisted( + T::IdtyIdOfAuthorityId::convert(member_id).expect("convertion should be ok"), + ); } } diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs index 040e4fb03..2a33e783b 100644 --- a/pallets/smith-members/src/lib.rs +++ b/pallets/smith-members/src/lib.rs @@ -392,6 +392,15 @@ impl<T: Config> Pallet<T> { } } } + + // TODO: return what? + fn smith_goes_blacklisted(idty_index: T::IdtyIndex) { + // TODO: for now, just let smith_goes_offline do the job + // if let Some(_) = Smiths::<T>::get(idty_index) { + // Smiths::<T>::remove(idty_index); + // T::OnSmithDelete::on_smith_delete(idty_index, SmithRemovalReason::Blacklisted); + // } + } } impl<T: Config> Pallet<T> { -- GitLab