From 78c6c744f1e1e1902b79184ddd17856b575dec40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Eng=C3=A9libert?= <tuxmain@zettascript.org> Date: Sat, 7 Sep 2024 14:58:31 +0200 Subject: [PATCH] distance: handle slash unbalance --- pallets/distance/src/lib.rs | 10 +++++++--- pallets/distance/src/mock.rs | 1 + runtime/common/src/pallets_config.rs | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pallets/distance/src/lib.rs b/pallets/distance/src/lib.rs index b965d0fc8..ba5e80086 100644 --- a/pallets/distance/src/lib.rs +++ b/pallets/distance/src/lib.rs @@ -82,9 +82,9 @@ pub use types::*; pub use weights::WeightInfo; use frame_support::traits::{ - fungible::{self, hold, Mutate, MutateHold}, + fungible::{self, hold, Credit, Mutate, MutateHold}, tokens::Precision, - StorageVersion, + OnUnbalanced, StorageVersion, }; use sp_distance::{InherentError, INHERENT_IDENTIFIER}; use sp_inherents::{InherentData, InherentIdentifier}; @@ -155,6 +155,9 @@ pub mod pallet { #[pallet::constant] type MinAccessibleReferees: Get<Perbill>; + /// Handler for unbalanced reduction when invalid distance causes a slash. + type OnUnbalanced: OnUnbalanced<Credit<Self::AccountId, Self::Currency>>; + /// The overarching event type. type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>; @@ -668,11 +671,12 @@ pub mod pallet { ); } else { // Negative result, slash and deposit event - let _ = <T::Currency as hold::Balanced<_>>::slash( + let (imbalance, _) = <T::Currency as hold::Balanced<_>>::slash( &HoldReason::DistanceHold.into(), &requester, <T as Config>::EvaluationPrice::get(), ); + T::OnUnbalanced::on_unbalanced(imbalance); Self::deposit_event(Event::EvaluatedInvalid { idty_index: idty, distance, diff --git a/pallets/distance/src/mock.rs b/pallets/distance/src/mock.rs index f837bac85..fa963500b 100644 --- a/pallets/distance/src/mock.rs +++ b/pallets/distance/src/mock.rs @@ -261,6 +261,7 @@ impl pallet_distance::Config for Test { type EvaluationPrice = frame_support::traits::ConstU64<1000>; type MaxRefereeDistance = frame_support::traits::ConstU32<5>; type MinAccessibleReferees = MinAccessibleReferees; + type OnUnbalanced = (); type OnValidDistanceStatus = (); type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs index e82397cd9..3b5ae90ba 100644 --- a/runtime/common/src/pallets_config.rs +++ b/runtime/common/src/pallets_config.rs @@ -519,6 +519,7 @@ macro_rules! pallets_config { type EvaluationPrice = frame_support::traits::ConstU64<1000>; type MaxRefereeDistance = MaxRefereeDistance; type MinAccessibleReferees = MinAccessibleReferees; + type OnUnbalanced = HandleFees; type OnValidDistanceStatus = Wot; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; -- GitLab