private MainnetTransactionProcessor createProcessor(
      final MainnetTransactionProcessor baseProcessor,
      final Map<Address, Address> precompileAddressOverrides) {

    if (precompileAddressOverrides.isEmpty()) {
      return baseProcessor;
    }

    return MainnetTransactionProcessor.builder()
        .populateFrom(baseProcessor)
        .messageCallProcessor(
            new SimulationMessageCallProcessor(
                baseProcessor.getMessageCallProcessor(),
                originalPrecompileRegistry ->
                    overridePrecompileAddresses(
                        originalPrecompileRegistry, precompileAddressOverrides)))
        .build();
  }
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