private static BlockHeaderValidator.Builder getBlockHeaderValidator(
      final EpochManager epochManager,
      final long secondsBetweenBlocks,
      final boolean createEmptyBlocks,
      final FeeMarket feeMarket) {
    Optional<BaseFeeMarket> baseFeeMarket =
        Optional.of(feeMarket).filter(FeeMarket::implementsBaseFee).map(BaseFeeMarket.class::cast);

    return BlockHeaderValidationRulesetFactory.cliqueBlockHeaderValidator(
        secondsBetweenBlocks, createEmptyBlocks, epochManager, baseFeeMarket);
  }
Create protocol schedule.

@param config the config
@param forksSchedule the transitions
@param nodeKey the node key
@param isRevertReasonEnabled the is revert reason enabled
@param evmConfiguration the evm configuration
@param miningConfiguration the mining configuration
@param badBlockManager the cache to use to keep invalid blocks
@param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled
@param metricsSystem A metricSystem instance to be able to expose metrics in the underlying
    calls
@return the protocol schedule
consensus/clique/src/main/java/org/hyperledger/besu/consensus/clique/CliqueProtocolSchedule.java