This pallet provides the basic logic needed to pay the absolute minimum amount needed for a transaction to be included. This includes:
- base fee: This is the minimum amount a user pays for a transaction. It is declared
as a base weight in the runtime and converted to a fee using
- weight fee: A fee proportional to amount of weight a transaction consumes.
- length fee: A fee proportional to the encoded length of the transaction.
- tip: An optional tip. Tip increases the priority of the transaction, giving it a higher chance to be included by the transaction queue.
The base fee and adjusted weight and length fees constitute the inclusion fee, which is the minimum fee for a transaction to be included in a block.
The formula of final fee:
inclusion_fee = base_fee + length_fee + [targeted_fee_adjustment * weight_fee]; final_fee = inclusion_fee + tip;
targeted_fee_adjustment: This is a multiplier that can tune the final fee based on the congestion of the network.
Additionally, this pallet allows one to configure:
- The mapping between one unit of weight to one unit of fee via
- A means of updating the fee for the next block, via defining a multiplier, based on the
final state of the chain at the end of the previous block. This can be configured via
- How the fees are paid via
pub use pallet::*;
palletmodule in each FRAME pallet hosts the most important items needed to construct this pallet.
- Require the transactor pay for themselves and maybe include a tip to gain additional priority in the queue.
- A struct to make the fee multiplier a constant
- Implements the transaction payment for a pallet implementing the
Currencytrait (eg. the pallet_balances) using an unbalance handler (implementing
FeeDetailsis composed of:
- The base fee and adjusted weight and length fees constitute the inclusion fee.
- Information related to a dispatchable’s class, weight, and fee that can be queried from the runtime.
- A struct to update the weight multiplier per block. It implements
Convert<Multiplier, Multiplier>, meaning that it can convert the previous multiplier to the next one. This should be called on
on_finalizeof a block, prior to potentially cleaning the weight data from the system pallet.
- Something that can convert the current multiplier to the next one.
- Handle withdrawing, refunding and depositing of transaction fees.
- Fee multiplier.