@Override
  protected String internalLogStats() {

    if (orderByFee.isEmpty()) {
      return "Basefee Prioritized: Empty";
    }

    final PendingTransaction highest = orderByFee.last();
    final PendingTransaction lowest = orderByFee.first();

    return "Basefee Prioritized: "
        + "count: "
        + pendingTransactions.size()
        + ", space used: "
        + spaceUsed
        + ", unique senders: "
        + txsBySender.size()
        + ", highest priority tx: [score: "
        + highest.getScore()
        + ", max fee: "
        + highest.getTransaction().getMaxGasPrice().toHumanReadableString()
        + ", curr prio fee: "
        + highest
            .getTransaction()
            .getEffectivePriorityFeePerGas(nextBlockBaseFee)
            .toHumanReadableString()
        + ", hash: "
        + highest.getHash()
        + "], lowest priority tx: [score: "
        + lowest.getScore()
        + ", max fee: "
        + lowest.getTransaction().getMaxGasPrice().toHumanReadableString()
        + ", curr prio fee: "
        + lowest
            .getTransaction()
            .getEffectivePriorityFeePerGas(nextBlockBaseFee)
            .toHumanReadableString()
        + ", hash: "
        + lowest.getHash()
        + "], next block base fee: "
        + nextBlockBaseFee.get().toHumanReadableString();
  }
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