syntax = "proto3";

package cosmos_sdk.x.bank.v1;

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

import "third_party/proto/gogoproto/gogo.proto";
import "types/types.proto";

// MsgSend - high level transaction of the coin module
message MsgSend {
  option (gogoproto.equal) = true;

  bytes from_address = 1 [
    (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress",
    (gogoproto.moretags) = "yaml:\"from_address\""
  ];
  bytes to_address = 2 [
    (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress",
    (gogoproto.moretags) = "yaml:\"to_address\""
  ];
  repeated cosmos_sdk.v1.Coin amount = 3 [
    (gogoproto.nullable)     = false,
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
  ];
}

// Input models transaction input
message Input {
  option (gogoproto.equal) = true;

  bytes    address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
  repeated cosmos_sdk.v1.Coin coins = 2 [
    (gogoproto.nullable)     = false,
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
  ];
}

// Output models transaction outputs
message Output {
  option (gogoproto.equal) = true;

  bytes    address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
  repeated cosmos_sdk.v1.Coin coins = 2 [
    (gogoproto.nullable)     = false,
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
  ];
}

// MsgMultiSend - high level transaction of the coin module
message MsgMultiSend {
  option (gogoproto.equal) = true;

  repeated Input  inputs  = 1 [(gogoproto.nullable) = false];
  repeated Output outputs = 2 [(gogoproto.nullable) = false];
}
