public boolean validate(final SignedData<RoundChangePayload> signedPayload) {

    if (!validators.contains(signedPayload.getAuthor())) {
      LOG.info("{}: did not originate from a recognized validator.", ERROR_PREFIX);
      return false;
    }

    final RoundChangePayload payload = signedPayload.getPayload();

    if (payload.getRoundIdentifier().getSequenceNumber() != chainHeight) {
      LOG.info("{}: did not target expected height", ERROR_PREFIX);
      return false;
    }

    final int targetRound = payload.getRoundIdentifier().getRoundNumber();
    if (targetRound <= 0) {
      LOG.info("{}: must contain a positive target round number", ERROR_PREFIX);
      return false;
    }

    if (payload.getPreparedRoundMetadata().isPresent()) {
      final PreparedRoundMetadata metadata = payload.getPreparedRoundMetadata().get();
      if (metadata.getPreparedRound() >= targetRound) {
        LOG.info("{}: prepared metadata is from a round ahead of target round", ERROR_PREFIX);
        return false;
      }

      if (metadata.getPreparedRound() < 0) {
        LOG.info("{}: prepared metadata is from a negative round number", ERROR_PREFIX);
        return false;
      }
    }
    return true;
  }
Validate.

@param signedPayload the signed payload
@return the boolean
consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangePayloadValidator.java