class ProposerSlashingValidator {

  public InternalValidationResult validate(ProposerSlashing slashing) {
    if (!isFirstValidSlashingForValidator(slashing)) {
      LOG.trace(
          "ProposerSlashingValidator: Slashing is not the first one for the given validator.");
      return IGNORE;
    }

    if (!passesProcessProposerSlashingConditions(slashing)) {
      return REJECT;
    }

    if (receivedValidSlashingForProposerSet.add(
        slashing.getHeader_1().getMessage().getProposer_index())) {
      return ACCEPT;
    } else {
      LOG.trace(
          "ProposerSlashingValidator: Slashing is not the first one for the given validator.");
      return IGNORE;
    }
  }

  public  ProposerSlashingValidator(
      RecentChainData recentChainData,
      ProposerSlashingStateTransitionValidator proposerSlashingStateTransitionValidator,
      ProposerSlashingSignatureVerifier proposerSlashingSignatureVerifier);

}