syntax = "proto3";

package ibc.applications.transfer.v1;

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

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

// Query provides defines the gRPC querier service.
service Query {
  // DenomTrace queries a denomination trace information.
  rpc DenomTrace(QueryDenomTraceRequest) returns (QueryDenomTraceResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/denom_traces/{hash}";
  }

  // DenomTraces queries all denomination traces.
  rpc DenomTraces(QueryDenomTracesRequest) returns (QueryDenomTracesResponse) {
    option (google.api.http).get = "/ibc/apps/transfer/v1/denom_traces";
  }

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

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

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

// QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC
// method.
message QueryDenomTraceResponse {
  // denom_trace returns the requested denomination trace information.
  DenomTrace denom_trace = 1;
}

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

// QueryConnectionsResponse is the response type for the Query/DenomTraces RPC
// method.
message QueryDenomTracesResponse {
  // denom_traces returns all denominations trace information.
  repeated DenomTrace denom_traces = 1 [(gogoproto.castrepeated) = "Traces", (gogoproto.nullable) = false];
  // pagination defines the pagination in the response.
  cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

// 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;
}

// 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;
}
