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";
import "cosmos_proto/cosmos.proto";
import "amino/amino.proto";

// GenesisState defines the slashing module's genesis state.
message GenesisState {
  // params defines all the parameters of the module.
  Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];

  // signing_infos represents a map between validator addresses and their
  // signing infos.
  repeated SigningInfo signing_infos = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];

  // missed_blocks represents a map between validator addresses and their
  // missed blocks.
  repeated ValidatorMissedBlocks missed_blocks = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
}

// SigningInfo stores validator signing info of corresponding address.
message SigningInfo {
  // address is the validator address.
  string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  // validator_signing_info represents the signing info of this validator.
  ValidatorSigningInfo validator_signing_info = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
}

// ValidatorMissedBlocks contains array of missed blocks of corresponding
// address.
message ValidatorMissedBlocks {
  // address is the validator address.
  string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  // missed_blocks is an array of missed blocks by the validator.
  repeated MissedBlock missed_blocks = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
}

// 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;
}