public MessageValidator createMessageValidator(
      final ConsensusRoundIdentifier roundIdentifier, final QbftBlockHeader parentHeader) {
    final Collection<Address> validatorsForHeight =
        validatorProvider.getValidatorsAfterBlock(parentHeader);

    final ProposalValidator proposalValidator =
        new ProposalValidator(
            blockInterface,
            protocolSchedule,
            BftHelpers.calculateRequiredValidatorQuorum(validatorsForHeight.size()),
            validatorsForHeight,
            roundIdentifier,
            proposerSelector.selectProposerForRound(roundIdentifier));

    return new MessageValidator(
        block ->
            new SubsequentMessageValidator(
                validatorsForHeight, roundIdentifier, block, blockInterface),
        proposalValidator);
  }
Create message validator.

@param roundIdentifier the round identifier
@param parentHeader the parent header
@return the message validator
consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/MessageValidatorFactory.java