public MainnetTransactionProcessor getTransactionProcessor(
      final ProcessableBlockHeader processableHeader,
      final Optional<StateOverrideMap> maybeStateOverrides) {

    MainnetTransactionProcessor baseProcessor =
        protocolSchedule.getByBlockHeader(processableHeader).getTransactionProcessor();

    Map<Address, Address> precompileOverrides =
        maybeStateOverrides.map(this::extractPrecompileAddressOverrides).orElse(Map.of());

    return createProcessor(baseProcessor, precompileOverrides);
  }
Creates a transaction processor, optionally applying state overrides.

@param processableHeader the block header to process transactions against
@param maybeStateOverrides optional state overrides for simulation
@return a transaction processor, with overrides applied if provided
ethereum/core/src/main/java/org/hyperledger/besu/ethereum/transaction/SimulationTransactionProcessorFactory.java