syntax = "proto3";

package ibc.applications.transfer.v1;

import "gogoproto/gogo.proto";
import "cosmos/base/v1beta1/coin.proto";
import "ibc/applications/transfer/v1/transfer.proto";
import "ibc/applications/transfer/v1/token.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "google/api/annotations.proto";

option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types";

// Query provides defines the gRPC querier service.
service Query {
  // Params queries all parameters of the ibc-transfer module.
  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/params";
  }

  // Denoms queries all denominations
  rpc Denoms(QueryDenomsRequest) returns (QueryDenomsResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/denoms";
  }

  // Denom queries a denomination
  rpc Denom(QueryDenomRequest) returns (QueryDenomResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/denoms/{hash=**}";
  }

  // DenomHash queries a denomination hash information.
  rpc DenomHash(QueryDenomHashRequest) returns (QueryDenomHashResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/denom_hashes/{trace=**}";
  }

  // EscrowAddress returns the escrow address for a particular port and channel id.
  rpc EscrowAddress(QueryEscrowAddressRequest) returns (QueryEscrowAddressResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address";
  }

  // TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.
  rpc TotalEscrowForDenom(QueryTotalEscrowForDenomRequest) returns (QueryTotalEscrowForDenomResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/total_escrow/{denom=**}";
  }
}

// QueryParamsRequest is the request type for the Query/Params RPC method.
message QueryParamsRequest {}

// QueryParamsResponse is the response type for the Query/Params RPC method.
message QueryParamsResponse {
  // params defines the parameters of the module.
  Params params = 1;
}

// QueryDenomRequest is the request type for the Query/Denom RPC
// method
message QueryDenomRequest {
  // hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.
  string hash = 1;
}

// QueryDenomResponse is the response type for the Query/Denom RPC
// method.
message QueryDenomResponse {
  // denom returns the requested denomination.
  Denom denom = 1;
}

// QueryDenomsRequest is the request type for the Query/Denoms RPC
// method
message QueryDenomsRequest {
  // pagination defines an optional pagination for the request.
  cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

// QueryDenomsResponse is the response type for the Query/Denoms RPC
// method.
message QueryDenomsResponse {
  // denoms returns all denominations.
  repeated Denom denoms = 1 [(gogoproto.castrepeated) = "Denoms", (gogoproto.nullable) = false];
  // pagination defines the pagination in the response.
  cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

// QueryDenomHashRequest is the request type for the Query/DenomHash RPC
// method
message QueryDenomHashRequest {
  // The denomination trace ([port_id]/[channel_id])+/[denom]
  string trace = 1;
}

// QueryDenomHashResponse is the response type for the Query/DenomHash RPC
// method.
message QueryDenomHashResponse {
  // hash (in hex format) of the denomination trace information.
  string hash = 1;
}

// QueryEscrowAddressRequest is the request type for the EscrowAddress RPC method.
message QueryEscrowAddressRequest {
  // unique port identifier
  string port_id = 1;
  // unique channel identifier
  string channel_id = 2;
}

// QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.
message QueryEscrowAddressResponse {
  // the escrow account address
  string escrow_address = 1;
}

// QueryTotalEscrowForDenomRequest is the request type for TotalEscrowForDenom RPC method.
message QueryTotalEscrowForDenomRequest {
  string denom = 1;
}

// QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.
message QueryTotalEscrowForDenomResponse {
  cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false];
}
