syntax = "proto3";
package gaia.liquid.v1beta1;

option go_package = "github.com/cosmos/gaia/x/liquid/types";

import "gogoproto/gogo.proto";
import "gaia/liquid/v1beta1/liquid.proto";
import "amino/amino.proto";
import "google/protobuf/timestamp.proto";

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

  // store tokenize share records to provide reward to record owners
  repeated TokenizeShareRecord tokenize_share_records = 9
      [ (gogoproto.nullable) = false ];

  // last tokenize share record id, used for next share record id calculation
  uint64 last_tokenize_share_record_id = 10;

  // total number of liquid staked tokens at genesis
  bytes total_liquid_staked_tokens = 11 [
    (gogoproto.customtype) = "cosmossdk.io/math.Int",
    (gogoproto.moretags) = "yaml:\"total_liquid_staked_tokens\"",
    (gogoproto.nullable) = false
  ];

  // tokenize shares locks at genesis
  repeated TokenizeShareLock tokenize_share_locks = 12
      [ (gogoproto.nullable) = false ];
}

// TokenizeSharesLock required for specifying account locks at genesis
message TokenizeShareLock {
  // Address of the account that is locked
  string address = 1;
  // Status of the lock (LOCKED or LOCK_EXPIRING)
  string status = 2;
  // Completion time if the lock is expiring
  google.protobuf.Timestamp completion_time = 3 [
    (gogoproto.nullable) = false,
    (gogoproto.stdtime) = true,
    (gogoproto.moretags) = "yaml:\"completion_time\""
  ];
}
