syntax = "proto3";
package cosmos.slashing.v1beta1;

option go_package            = "github.com/cosmos/cosmos-sdk/x/slashing/types";
option (gogoproto.equal_all) = true;

import "gogoproto/gogo.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "cosmos_proto/cosmos.proto";
import "amino/amino.proto";

// ValidatorSigningInfo defines a validator's signing info for monitoring their
// liveness activity.
message ValidatorSigningInfo {
  option (gogoproto.equal) = true;

  string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"];
  // Height at which validator was first a candidate OR was un-jailed
  int64 start_height = 2;
  // Index which is incremented every time a validator is bonded in a block and
  // _may_ have signed a pre-commit or not. This in conjunction with the
  // signed_blocks_window param determines the index in the missed block bitmap.
  int64 index_offset = 3;
  // Timestamp until which the validator is jailed due to liveness downtime.
  google.protobuf.Timestamp jailed_until = 4
      [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true];
  // Whether or not a validator has been tombstoned (killed out of validator
  // set). It is set once the validator commits an equivocation or for any other
  // configured misbehavior.
  bool tombstoned = 5;
  // A counter of missed (unsigned) blocks. It is used to avoid unnecessary
  // reads in the missed block bitmap.
  int64 missed_blocks_counter = 6;
}

// Params represents the parameters used for by the slashing module.
message Params {
  option (amino.name) = "cosmos-sdk/x/slashing/Params";

  int64 signed_blocks_window  = 1;
  bytes min_signed_per_window = 2 [
    (cosmos_proto.scalar)  = "cosmos.Dec",
    (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
    (gogoproto.nullable)   = false,
    (amino.dont_omitempty) = true
  ];
  google.protobuf.Duration downtime_jail_duration = 3
      [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdduration) = true];
  bytes slash_fraction_double_sign = 4 [
    (cosmos_proto.scalar)  = "cosmos.Dec",
    (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
    (gogoproto.nullable)   = false,
    (amino.dont_omitempty) = true
  ];
  bytes slash_fraction_downtime = 5 [
    (cosmos_proto.scalar)  = "cosmos.Dec",
    (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
    (gogoproto.nullable)   = false,
    (amino.dont_omitempty) = true
  ];
}
