diff --git a/pallets/authority-members/src/impls.rs b/pallets/authority-members/src/impls.rs index ade9f7437bcf80a0e396625d44530c901841dd35..bdea383ae42477ef04c8eb4945d778b7fdcc8489 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 9284bb25c88a8d02111a972a59f910fc7ab7f14a..78be54ef211abc8d2f5f4074714483e7706fff7a 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 be6180f05c9523ce5c916dc52c4dcb0bd07ebc26..12b7c907731d43a427e797b932531cd224f157ab 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 040e4fb039eefa4af66fcd6790a98fa1aae69e58..2a33e783b06c7f7efb3e06c8b04b98efe25af84a 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> {