pallet_transaction_payment

Branch/Release: release-polkadot-v1.10.0

Source Code

Purpose

pallet-transaction-payment implements transaction fee logic.

In substrate, every transaction has an associated call, and each call has its own weight function. The weight function estimates the time it takes to execute the call.

Config::WeightToFee is a mapping between the smallest unit of compute (Weight) and smallest unit of fee.

This pallet also exposes - how to update fees for the next block based on past fees (Config::FeeMultiplierUpdate) - how fees are paid (Config::OnChargeTransaction)

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 + [fee_multiplier_update * weight_fee];
final_fee = inclusion_fee + tip;

The inputs are defined below in the glossary and config sections.

Config

  • Pallet-specific handlers:

    • OnChargeTransaction — Handler for withdrawing, refunding and depositing the transaction fee. Type must implement the trait OnChargeTransaction<Self>.

    • FeeMultiplierUpdate — Handler to define how base fees change over time (over blocks). Type must implement the trait MultiplierUpdate. Possible assignments include ConstantFee, SlowAdjustingFee, and FastAdjustingFee.

  • Pallet-specific converters:

    • WeightToFee — Mapping between the smallest unit of weight and smallest unit of fee. Type must implement the trait WeightToFee<Balance = BalanceOf<Self>>.

    • LengthToFee — Convert a length value into a deductible fee based on the currency type. Type must implement the trait WeightToFee<Balance = BalanceOf<Self>>.

  • Pallet-specific constants:

    • OperationalFeeMultiplier — A fee multiplier for Operational extrinsics to compute "virtual tip" to boost their priority. Type must implement the trait Get<u32>.

  • Common configs:

    • RuntimeEvent

Dispatchables

There are no dispatchables (and no errors) in this pallet. This pallet is only intended to configure the transaction fee logic for a chain.

Events:

  • TransactionFeePaid(who, actual_fee, tip) — a transaction fee was paid by account who with total amount of actual_fee + tip.