private static ProtocolSpecBuilder applyIbftChanges(
      final long secondsBetweenBlocks, final ProtocolSpecBuilder builder) {
    return builder
        .blockHeaderValidatorBuilder(
            (feeMarket, gasCalculator, gasLimitCalculator) ->
                ibftBlockHeaderValidatorBuilder(secondsBetweenBlocks))
        .ommerHeaderValidatorBuilder(
            (feeMarket, gasCalculator, gasLimitCalculator) ->
                ibftBlockHeaderValidatorBuilder(secondsBetweenBlocks))
        .blockBodyValidatorBuilder(MainnetBlockBodyValidator::new)
        .blockValidatorBuilder(MainnetProtocolSpecs.blockValidatorBuilder())
        .blockImporterBuilder(MainnetBlockImporter::new)
        .difficultyCalculator((time, parent) -> BigInteger.ONE)
        .blockReward(Wei.ZERO)
        .skipZeroBlockRewards(true)
        .blockHeaderFunctions(
            new BftBlockHeaderFunctions(
                IbftBlockHashing::calculateHashOfIbftBlockOnchain, ibftExtraDataCodec));
  }
Create protocol schedule.

@param config the config
@param isRevertReasonEnabled the is revert reason enabled
@param evmConfiguration the evm configuration
@return the protocol schedule
consensus/ibftlegacy/src/main/java/org/hyperledger/besu/consensus/ibftlegacy/IbftProtocolSchedule.java