Trait xor_fee::ApplyCustomFees
source · pub trait ApplyCustomFees<Call: Dispatchable, AccountId> {
type FeeDetails;
// Required methods
fn should_be_postponed(
who: &AccountId,
fee_source: &AccountId,
call: &Call,
fee: Balance
) -> bool;
fn should_be_paid(who: &AccountId, call: &Call) -> bool;
fn get_fee_source(who: &AccountId, call: &Call, fee: Balance) -> AccountId;
fn compute_fee(call: &Call) -> Option<(Balance, Self::FeeDetails)>;
fn compute_actual_fee(
post_info: &PostDispatchInfoOf<Call>,
info: &DispatchInfoOf<Call>,
result: &DispatchResult,
fee_details: Option<Self::FeeDetails>
) -> Option<Balance>;
}
Expand description
Trait whose implementation allows to redefine extrinsics fees based
on the extrinsic’s Call
variant and dispatch result
Required Associated Types§
sourcetype FeeDetails
type FeeDetails
Additinal information to be passed between Self::compute_fee
and Self::compute_actual_fee
Required Methods§
sourcefn should_be_postponed(
who: &AccountId,
fee_source: &AccountId,
call: &Call,
fee: Balance
) -> bool
fn should_be_postponed( who: &AccountId, fee_source: &AccountId, call: &Call, fee: Balance ) -> bool
Check if the fee payment should be postponed
Parameters:
who
is the caller of the extrinsic
fee_source
is the account which will pay fees
call
is the Call extracted from the extrinsic
fee
is the pre dispatch fee
Returns:
true
then fee payment should be postponed to the post dispatch phase
false
then fee should be paid at pre dispatch phase and corrected at post dispatch phase
This call should check if fee_source
will have enough funds to pay the fee after call dispatch
and if not then it should return false
sourcefn should_be_paid(who: &AccountId, call: &Call) -> bool
fn should_be_paid(who: &AccountId, call: &Call) -> bool
Check if the fee should be paid for this extrinsic
Parameters:
who
is the caller of the extrinsic
call
is the Call extracted from the extrinsic
Returns:
true
then fee should be paid
false
then fee should not be paid
sourcefn get_fee_source(who: &AccountId, call: &Call, fee: Balance) -> AccountId
fn get_fee_source(who: &AccountId, call: &Call, fee: Balance) -> AccountId
Get the account which will pay fees
Parameters:
who
is the caller of the extrinsic
call
is the Call extracted from the extrinsic
fee
is the pre dispatch fee
Returns account which will pay fees
sourcefn compute_fee(call: &Call) -> Option<(Balance, Self::FeeDetails)>
fn compute_fee(call: &Call) -> Option<(Balance, Self::FeeDetails)>
Compute custom fees for this call
Parameters:
call
is the Call extracted from the extrinsic
Returns:
Some(..)
if custom fees should be applied. Then Balance
value is used as fee
and Self::FeeDetails
is passed to Self::compute_actual_fee
at post dispatch phase
None
if default transaction payment pallet fees should be used
sourcefn compute_actual_fee(
post_info: &PostDispatchInfoOf<Call>,
info: &DispatchInfoOf<Call>,
result: &DispatchResult,
fee_details: Option<Self::FeeDetails>
) -> Option<Balance>
fn compute_actual_fee( post_info: &PostDispatchInfoOf<Call>, info: &DispatchInfoOf<Call>, result: &DispatchResult, fee_details: Option<Self::FeeDetails> ) -> Option<Balance>
Compute actual fees for this call
Parameters:
post_info
is the PostDispatchInfo
returned from the call
info
is the DispatchInfo
for the call
result
is the DispatchResult
returned from the call
fee_details
is the Self::FeeDetails
returned from the previous Self::compute_fee
call
Returns:
Some(..)
if custom post dispatch fees should be applied
None
if transaction payment pallet post dispatch fees should be used