@Override
  protected MiningCoordinator createMiningCoordinator(
      final ProtocolSchedule protocolSchedule,
      final ProtocolContext protocolContext,
      final TransactionPool transactionPool,
      final MiningConfiguration miningConfiguration,
      final SyncState syncState,
      final EthProtocolManager ethProtocolManager) {

    // cast to transition schedule for explicit access to pre and post objects:
    final TransitionProtocolSchedule transitionProtocolSchedule =
        (TransitionProtocolSchedule) protocolSchedule;

    // PoA consensus mines by default, get consensus-specific mining parameters for
    // TransitionCoordinator:
    MiningConfiguration transitionMiningConfiguration =
        preMergeBesuControllerBuilder.getMiningParameterOverrides(miningConfiguration);

    // construct a transition backward sync context
    BackwardSyncContext transitionBackwardsSyncContext =
        new TransitionBackwardSyncContext(
            protocolContext,
            transitionProtocolSchedule,
            syncConfig,
            metricsSystem,
            ethProtocolManager.ethContext(),
            syncState,
            storageProvider);

    final TransitionCoordinator composedCoordinator =
        new TransitionCoordinator(
            preMergeBesuControllerBuilder.createMiningCoordinator(
                transitionProtocolSchedule.getPreMergeSchedule(),
                protocolContext,
                transactionPool,
                ImmutableMiningConfiguration.builder()
                    .from(miningConfiguration)
                    .mutableInitValues(
                        ImmutableMiningConfiguration.MutableInitValues.builder()
                            .isMiningEnabled(false)
                            .build())
                    .build(),
                syncState,
                ethProtocolManager),
            mergeBesuControllerBuilder.createTransitionMiningCoordinator(
                transitionProtocolSchedule,
                protocolContext,
                transactionPool,
                transitionMiningConfiguration,
                syncState,
                transitionBackwardsSyncContext,
                ethProtocolManager.ethContext().getScheduler()),
            mergeBesuControllerBuilder.getPostMergeContext());
    initTransitionWatcher(protocolContext, composedCoordinator);
    return composedCoordinator;
  }
Instantiates a new Transition besu controller builder.

@param preMergeBesuControllerBuilder the pre merge besu controller builder
@param mergeBesuControllerBuilder the merge besu controller builder
app/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java