diff --git a/pallets/distance/src/lib.rs b/pallets/distance/src/lib.rs index b965d0fc8cdf2d98aa60e91b5f5ea4366bc8c6ea..ba5e800861a04cb357951b2ae2b41d06c2e86eb1 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 f837bac853882dd99ba6a608eb94e2e38b315245..fa963500b2201913cccdbeac6bd039db0b7e07e2 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 e82397cd9339ef2b167a931be6ab49ae388ebd5c..3b5ae90ba85c60d1ab677e5e3c1014cfceb3e414 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;