@Override
  public void handleMessageEvent(final BftReceivedMessageEvent msg) {
    final MessageData data = msg.getMessage().getData();
    if (!duplicateMessageTracker.hasSeenMessage(data)) {
      duplicateMessageTracker.addSeenMessage(data);
      handleMessage(msg.getMessage());
    } else {
      LOG.trace("Discarded duplicate message");
    }
  }
Instantiates a new Qbft controller.

@param blockchain the blockchain
@param finalState the qbft final state
@param qbftBlockHeightManagerFactory the qbft block height manager factory
@param gossiper the gossiper
@param duplicateMessageTracker the duplicate message tracker
@param futureMessageBuffer the future message buffer
@param blockEncoder the block encoder
consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftController.java