pub struct WeightFeeHandler<AccountId, C, W, T, const POLICY: bool>(/* private fields */);Expand description
A weight-based fee handler implementation that calculates and charges fees based on message processing weight.
This implementation computes the weight consumed by a batch of messages, converts this weight
into a fee, and charges the fee to the message originator’s account. The behavior is
configurable through a ChargePolicy.
§Type Parameters
AccountId- The account identifier type used to identify fee payers.C- TheCurrencytrait implementation for handling balances.W- A type implementingWeightToFeeto convert computationalWeightinto aBalance.T- AGet<AccountId>implementation that returns the Treasury’s account ID.Policy- A type implementingChargePolicyto determine if fees should be charged.
§Examples
This handler is typically configured in a runtime to establish a weight-based fee model.
ⓘ
// In the runtime configuration
use pallet_ismp::fee_handler::{self, WeightToFee};
use frame_support::weights::WeightToFee as SubstrateWeightToFee;
// An adapter to use the runtime's default WeightToFee implementation
pub struct IsmpWeightToFee;
impl WeightToFee for IsmpWeightToFee {
type Balance = Balance;
fn convert(weight: Weight) -> Self::Balance {
<Runtime as pallet_transaction_payment::Config>::WeightToFee::weight_to_fee(&weight)
}
}
// Define the fee handler type
type FeeHandler = fee_handler::WeightFeeHandler<
AccountId,
Balances,
IsmpWeightToFee,
TreasuryPalletId.
true
>;Trait Implementations§
Source§impl<AccountId, C, W, T, const POLICY: bool> FeeHandler for WeightFeeHandler<AccountId, C, W, T, POLICY>where
AccountId: Member + MaybeDisplay + Decode + Encode,
C: Currency<AccountId>,
W: WeightToFee<Balance = <C as Currency<AccountId>>::Balance>,
T: Get<PalletId>,
impl<AccountId, C, W, T, const POLICY: bool> FeeHandler for WeightFeeHandler<AccountId, C, W, T, POLICY>where
AccountId: Member + MaybeDisplay + Decode + Encode,
C: Currency<AccountId>,
W: WeightToFee<Balance = <C as Currency<AccountId>>::Balance>,
T: Get<PalletId>,
Source§fn on_executed(
messages: Vec<MessageWithWeight>,
_events: Vec<Event>,
) -> DispatchResultWithPostInfo
fn on_executed( messages: Vec<MessageWithWeight>, _events: Vec<Event>, ) -> DispatchResultWithPostInfo
Process a batch of successfully executed messages and calculate appropriate fees. Read more
Auto Trait Implementations§
impl<AccountId, C, W, T, const POLICY: bool> Freeze for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> RefUnwindSafe for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> Send for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> Sync for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> Unpin for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> UnsafeUnpin for WeightFeeHandler<AccountId, C, W, T, POLICY>
impl<AccountId, C, W, T, const POLICY: bool> UnwindSafe for WeightFeeHandler<AccountId, C, W, T, POLICY>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
Source§fn defensive_truncate_into(self) -> U
fn defensive_truncate_into(self) -> U
Defensively truncate a value and convert it into its bounded form.
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
Source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
Source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
Source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of
T. Read moreSource§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
Source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
Source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
The counterpart to
unchecked_from.Source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T.