pub struct CurrencyAdapter<C, OU>(_);
Expand description
Implements the transaction payment for a pallet implementing the Currency
trait (eg. the pallet_balances) using an unbalance handler (implementing
OnUnbalanced
).
The unbalance handler is given 2 unbalanceds in OnUnbalanced::on_unbalanceds
: fee and
then tip.
Trait Implementations
impl<T, C, OU> OnChargeTransaction<T> for CurrencyAdapter<C, OU> where
T: Config,
T::TransactionByteFee: Get<<C as Currency<<T as Config>::AccountId>>::Balance>,
C: Currency<<T as Config>::AccountId>,
C::PositiveImbalance: Imbalance<<C as Currency<<T as Config>::AccountId>>::Balance, Opposite = C::NegativeImbalance>,
C::NegativeImbalance: Imbalance<<C as Currency<<T as Config>::AccountId>>::Balance, Opposite = C::PositiveImbalance>,
OU: OnUnbalanced<<C as Currency<<T as Config>::AccountId>>::NegativeImbalance>,
impl<T, C, OU> OnChargeTransaction<T> for CurrencyAdapter<C, OU> where
T: Config,
T::TransactionByteFee: Get<<C as Currency<<T as Config>::AccountId>>::Balance>,
C: Currency<<T as Config>::AccountId>,
C::PositiveImbalance: Imbalance<<C as Currency<<T as Config>::AccountId>>::Balance, Opposite = C::NegativeImbalance>,
C::NegativeImbalance: Imbalance<<C as Currency<<T as Config>::AccountId>>::Balance, Opposite = C::PositiveImbalance>,
OU: OnUnbalanced<<C as Currency<<T as Config>::AccountId>>::NegativeImbalance>,
Default implementation for a Currency and an OnUnbalanced handler.
The unbalance handler is given 2 unbalanceds in OnUnbalanced::on_unbalanceds
: fee and
then tip.
fn withdraw_fee(
who: &T::AccountId,
_call: &T::Call,
_info: &DispatchInfoOf<T::Call>,
fee: Self::Balance,
tip: Self::Balance
) -> Result<Self::LiquidityInfo, TransactionValidityError>
fn withdraw_fee(
who: &T::AccountId,
_call: &T::Call,
_info: &DispatchInfoOf<T::Call>,
fee: Self::Balance,
tip: Self::Balance
) -> Result<Self::LiquidityInfo, TransactionValidityError>
Withdraw the predicted fee from the transaction origin.
Note: The fee
already includes the tip
.
fn correct_and_deposit_fee(
who: &T::AccountId,
_dispatch_info: &DispatchInfoOf<T::Call>,
_post_info: &PostDispatchInfoOf<T::Call>,
corrected_fee: Self::Balance,
tip: Self::Balance,
already_withdrawn: Self::LiquidityInfo
) -> Result<(), TransactionValidityError>
fn correct_and_deposit_fee(
who: &T::AccountId,
_dispatch_info: &DispatchInfoOf<T::Call>,
_post_info: &PostDispatchInfoOf<T::Call>,
corrected_fee: Self::Balance,
tip: Self::Balance,
already_withdrawn: Self::LiquidityInfo
) -> Result<(), TransactionValidityError>
Hand the fee and the tip over to the [OnUnbalanced]
implementation.
Since the predicted fee might have been too high, parts of the fee may
be refunded.
Note: The corrected_fee
already includes the tip
.
type LiquidityInfo = Option<<C as Currency<<T as Config>::AccountId>>::NegativeImbalance>
Auto Trait Implementations
impl<C, OU> RefUnwindSafe for CurrencyAdapter<C, OU> where
C: RefUnwindSafe,
OU: RefUnwindSafe,
impl<C, OU> Send for CurrencyAdapter<C, OU> where
C: Send,
OU: Send,
impl<C, OU> Sync for CurrencyAdapter<C, OU> where
C: Sync,
OU: Sync,
impl<C, OU> Unpin for CurrencyAdapter<C, OU> where
C: Unpin,
OU: Unpin,
impl<C, OU> UnwindSafe for CurrencyAdapter<C, OU> where
C: UnwindSafe,
OU: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘimpl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘimpl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more