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

option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types";

import "gogoproto/gogo.proto";
import "cosmos/slashing/v1beta1/slashing.proto";

// GenesisState defines the slashing module's genesis state.
message GenesisState {
  // params defines all the paramaters of related to deposit.
  Params params = 1 [(gogoproto.nullable) = false];

  // signing_infos represents a map between validator addresses and their
  // signing infos.
  repeated SigningInfo signing_infos = 2
      [(gogoproto.moretags) = "yaml:\"signing_infos\"", (gogoproto.nullable) = false];

  // missed_blocks represents a map between validator addresses and their
  // missed blocks.
  repeated ValidatorMissedBlocks missed_blocks = 3
      [(gogoproto.moretags) = "yaml:\"missed_blocks\"", (gogoproto.nullable) = false];
}

// SigningInfo stores validator signing info of corresponding address.
message SigningInfo {
  // address is the validator address.
  string address = 1;
  // validator_signing_info represents the signing info of this validator.
  ValidatorSigningInfo validator_signing_info = 2
      [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_signing_info\""];
}

// ValidatorMissedBlocks contains array of missed blocks of corresponding
// address.
message ValidatorMissedBlocks {
  // address is the validator address.
  string address = 1;
  // missed_blocks is an array of missed blocks by the validator.
  repeated MissedBlock missed_blocks = 2
      [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"missed_blocks\""];
}

// MissedBlock contains height and missed status as boolean.
message MissedBlock {
  // index is the height at which the block was missed.
  int64 index = 1;
  // missed is the missed status.
  bool missed = 2;
}