@Override
  protected boolean promotionFilter(final PendingTransaction pendingTransaction) {

    // check if the tx is willing to pay at least the base fee
    if (nextBlockBaseFee
        .map(pendingTransaction.getTransaction().getMaxGasPrice()::lessThan)
        .orElse(true)) {
      return false;
    }

    // priority txs are promoted even if they pay less
    if (!pendingTransaction.hasPriority()) {
      // check if effective gas price is higher than the min gas price
      if (pendingTransaction
          .getTransaction()
          .getEffectiveGasPrice(nextBlockBaseFee)
          .lessThan(miningConfiguration.getMinTransactionGasPrice())) {
        return false;
      }

      // check if enough priority fee is paid
      if (!miningConfiguration.getMinPriorityFeePerGas().equals(Wei.ZERO)) {
        final Wei priorityFeePerGas =
            pendingTransaction.getTransaction().getEffectivePriorityFeePerGas(nextBlockBaseFee);
        if (priorityFeePerGas.lessThan(miningConfiguration.getMinPriorityFeePerGas())) {
          return false;
        }
      }
    }

    return true;
  }
On base fee markets when a new block is added we can calculate the base fee for the next block
and use it to keep only pending transactions willing to pay at least that fee in the
prioritized layer, since only these transactions are executable, while all the other can be
demoted to the next layer.

@param blockHeader the header of the added block
@param feeMarket the fee market
ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/layered/BaseFeePrioritizedTransactions.java