@Override
  public void start() {
    if (started.compareAndSet(false, true)) {
      startNewHeightManager(blockchain.getChainHeadHeader());
    } else {
      // In normal circumstances the height manager should only be started once. If the caller
      // has stopped the height manager (e.g. while sync completes) they must call stop() before
      // starting the height manager again.
      throw new IllegalStateException(
          "Attempt to start new height manager without stopping previous manager");
    }
  }
Instantiates a new Base bft controller.

@param blockchain the blockchain
@param bftFinalState the bft final state
@param gossiper the gossiper
@param duplicateMessageTracker the duplicate message tracker
@param futureMessageBuffer the future message buffer
@param synchronizerUpdater the synchronizer updater
consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/statemachine/BaseBftController.java