syntax = "proto3";

package ibc.applications.interchain_accounts.v1;

option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/types";

import "google/protobuf/any.proto";
import "gogoproto/gogo.proto";

// Type defines a classification of message issued from a controller chain to its associated interchain accounts
// host
enum Type {
  option (gogoproto.goproto_enum_prefix) = false;

  // Default zero value enumeration
  TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"];
  // Execute a transaction on an interchain accounts host chain
  TYPE_EXECUTE_TX = 1 [(gogoproto.enumvalue_customname) = "EXECUTE_TX"];
}

// InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.
message InterchainAccountPacketData {
  Type   type = 1;
  bytes  data = 2;
  string memo = 3;
}

// CosmosTx contains a list of sdk.Msg's. It should be used when sending transactions to an SDK host chain.
message CosmosTx {
  repeated google.protobuf.Any messages = 1;
}
