void addVote(final ValidatorVote validatorVote) {
    final Set<Address> addVotesForSubject =
        addVotesBySubject.computeIfAbsent(validatorVote.getRecipient(), target -> new HashSet<>());
    final Set<Address> removeVotesForSubject =
        removeVotesBySubject.computeIfAbsent(
            validatorVote.getRecipient(), target -> new HashSet<>());

    if (validatorVote.isAuthVote()) {
      addVotesForSubject.add(validatorVote.getProposer());
      removeVotesForSubject.remove(validatorVote.getProposer());
    } else {
      removeVotesForSubject.add(validatorVote.getProposer());
      addVotesForSubject.remove(validatorVote.getProposer());
    }

    final int validatorLimit = validatorLimit();
    if (addVotesForSubject.size() >= validatorLimit) {
      currentValidators.add(validatorVote.getRecipient());
      discardOutstandingVotesFor(validatorVote.getRecipient());
    }
    if (removeVotesForSubject.size() >= validatorLimit) {
      currentValidators.remove(validatorVote.getRecipient());
      discardOutstandingVotesFor(validatorVote.getRecipient());
      addVotesBySubject.values().forEach(votes -> votes.remove(validatorVote.getRecipient()));
      removeVotesBySubject.values().forEach(votes -> votes.remove(validatorVote.getRecipient()));
    }
  }
Add a vote to the current tally. The current validator list will be updated if this vote takes
the tally past the required votes to approve the change.

@param validatorVote The vote which was cast in a block header.
consensus/common/src/main/java/org/hyperledger/besu/consensus/common/validator/blockbased/VoteTally.java