public static ProtocolSchedule create(
      final GenesisConfigOptions config,
      final boolean isRevertReasonEnabled,
      final MiningConfiguration miningConfiguration,
      final BadBlockManager badBlockManager,
      final boolean isParallelTxProcessingEnabled,
      final MetricsSystem metricsSystem) {

    Map<Long, Function<ProtocolSpecBuilder, ProtocolSpecBuilder>> postMergeModifications =
        new HashMap<>();
    postMergeModifications.put(
        0L,
        (specBuilder) ->
            MergeProtocolSchedule.applyParisSpecificModifications(
                specBuilder, config.getChainId()));
    unapplyModificationsFromShanghaiOnwards(config, postMergeModifications);

    return new ProtocolScheduleBuilder(
            config,
            Optional.of(DEFAULT_CHAIN_ID),
            new ProtocolSpecAdapters(postMergeModifications),
            isRevertReasonEnabled,
            EvmConfiguration.DEFAULT,
            miningConfiguration,
            badBlockManager,
            isParallelTxProcessingEnabled,
            metricsSystem)
        .createProtocolSchedule();
  }
Create protocol schedule.

@param config the config
@param isRevertReasonEnabled the is revert reason enabled
@param miningConfiguration the mining parameters
@param badBlockManager the cache to use to keep invalid blocks
@param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled.
@return the protocol schedule
consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeProtocolSchedule.java