laconicd-deprecated/x/feemarket/spec/09_antehandlers.md
yihuang e1560849dd
feat(ante, evm): set priority for eth transactions (#1214)
* Set priority for eth transactions

Set the tx priority to the lowest priority in the messages.

fix unit tests

code cleanup and spec

update spec

fix go lint

add priority integration test

add python linter job

add access list tx type

fix gas limit

remove ledger tag, so no need to replace hid dependency

fix earlier check

ibc-go v5.0.0-beta1

* fix pruned node integration test

* Update x/feemarket/spec/09_antehandlers.md

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
2022-08-05 15:00:31 +02:00

1.7 KiB

AnteHandlers

The x/feemarket module provides AnteDecorators that are recursively chained together into a single Antehandler. These decorators perform basic validity checks on an Ethereum or Cosmos SDK transaction, such that it could be thrown out of the transaction Mempool.

Note that the AnteHandler is run for every transaction and called on both CheckTx and DeliverTx.

Decorators

MinGasPriceDecorator

Rejects Cosmos SDK transactions with transaction fees lower than MinGasPrice * GasLimit.

EthMinGasPriceDecorator

Rejects EVM transactions with transactions fees lower than MinGasPrice * GasLimit. - For LegacyTx and AccessListTx, the GasPrice * GasLimit is used. - For EIP-1559 (aka. DynamicFeeTx), the EffectivePrice * GasLimit is used.

::: tip Note: For dynamic transactions, if the feemarket formula results in a BaseFee that lowers EffectivePrice < MinGasPrices, the users must increase the GasTipCap (priority fee) until EffectivePrice > MinGasPrices. Transactions with MinGasPrices * GasLimit < transaction fee < EffectiveFee are rejected by the feemarket AnteHandle. :::

EthGasConsumeDecorator

Calculates the effective fees to deduct and the tx priority according to EIP-1559 spec, then deducts the fees and sets the tx priority in the response.

effectivePrice = min(baseFee + tipFeeCap, gasFeeCap)
effectiveTipFee = effectivePrice - baseFee
priority = effectiveTipFee / DefaultPriorityReduction

When there are multiple messages in the transaction, choose the lowest priority in them.