package keeper import ( "context" "fmt" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" ) var _ types.QueryServer = Keeper{} // DenomTrace implements the Query/DenomTrace gRPC method func (q Keeper) DenomTrace(c context.Context, req *types.QueryDenomTraceRequest) (*types.QueryDenomTraceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } hash, err := types.ParseHexHash(req.Hash) if err != nil { return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid denom trace hash %s, %s", req.Hash, err)) } ctx := sdk.UnwrapSDKContext(c) denomTrace, found := q.GetDenomTrace(ctx, hash) if !found { return nil, status.Error( codes.NotFound, sdkerrors.Wrap(types.ErrTraceNotFound, req.Hash).Error(), ) } return &types.QueryDenomTraceResponse{ DenomTrace: &denomTrace, }, nil } // DenomTraces implements the Query/DenomTraces gRPC method func (q Keeper) DenomTraces(c context.Context, req *types.QueryDenomTracesRequest) (*types.QueryDenomTracesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(c) traces := types.Traces{} store := prefix.NewStore(ctx.KVStore(q.storeKey), types.DenomTraceKey) pageRes, err := query.Paginate(store, req.Pagination, func(_, value []byte) error { result, err := q.UnmarshalDenomTrace(value) if err != nil { return err } traces = append(traces, result) return nil }) if err != nil { return nil, err } return &types.QueryDenomTracesResponse{ DenomTraces: traces.Sort(), Pagination: pageRes, }, nil } // Params implements the Query/Params gRPC method func (q Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { ctx := sdk.UnwrapSDKContext(c) params := q.GetParams(ctx) return &types.QueryParamsResponse{ Params: ¶ms, }, nil }