syntax = "proto3";
package ibc.core.channel.v1;

option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types";

import "gogoproto/gogo.proto";
import "ibc/core/channel/v1/channel.proto";

// GenesisState defines the ibc channel submodule's genesis state.
message GenesisState {
  repeated IdentifiedChannel   channels = 1 [(gogoproto.casttype) = "IdentifiedChannel", (gogoproto.nullable) = false];
  repeated PacketAckCommitment acknowledgements = 2
      [(gogoproto.casttype) = "PacketAckCommitment", (gogoproto.nullable) = false];
  repeated PacketAckCommitment commitments    = 3 [(gogoproto.nullable) = false];
  repeated PacketSequence      send_sequences = 4
      [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"send_sequences\""];
  repeated PacketSequence recv_sequences = 5
      [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"recv_sequences\""];
  repeated PacketSequence ack_sequences = 6
      [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"ack_sequences\""];
}

// PacketSequence defines the genesis type necessary to retrieve and store
// next send and receive sequences.
message PacketSequence {
  string port_id    = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
  string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""];
  uint64 sequence   = 3;
}
