github.com/okex/exchain@v1.8.0/libs/ibc-go/modules/apps/transfer/keeper/grpc_query.go (about)

     1  package keeper
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/okex/exchain/libs/cosmos-sdk/store/prefix"
     8  	sdk "github.com/okex/exchain/libs/cosmos-sdk/types"
     9  	sdkerrors "github.com/okex/exchain/libs/cosmos-sdk/types/errors"
    10  	"github.com/okex/exchain/libs/cosmos-sdk/types/query"
    11  	"github.com/okex/exchain/libs/ibc-go/modules/apps/transfer/types"
    12  	"google.golang.org/grpc/codes"
    13  	"google.golang.org/grpc/status"
    14  )
    15  
    16  var _ types.QueryServer = Keeper{}
    17  
    18  // DenomTrace implements the Query/DenomTrace gRPC method
    19  func (q Keeper) DenomTrace(c context.Context, req *types.QueryDenomTraceRequest) (*types.QueryDenomTraceResponse, error) {
    20  	if req == nil {
    21  		return nil, status.Error(codes.InvalidArgument, "empty request")
    22  	}
    23  
    24  	hash, err := types.ParseHexHash(req.Hash)
    25  	if err != nil {
    26  		return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid denom trace hash %s, %s", req.Hash, err))
    27  	}
    28  
    29  	ctx := sdk.UnwrapSDKContext(c)
    30  	denomTrace, found := q.GetDenomTrace(ctx, hash)
    31  	if !found {
    32  		return nil, status.Error(
    33  			codes.NotFound,
    34  			sdkerrors.Wrap(types.ErrTraceNotFound, req.Hash).Error(),
    35  		)
    36  	}
    37  
    38  	return &types.QueryDenomTraceResponse{
    39  		DenomTrace: &denomTrace,
    40  	}, nil
    41  }
    42  
    43  // DenomTraces implements the Query/DenomTraces gRPC method
    44  func (q Keeper) DenomTraces(c context.Context, req *types.QueryDenomTracesRequest) (*types.QueryDenomTracesResponse, error) {
    45  	if req == nil {
    46  		return nil, status.Error(codes.InvalidArgument, "empty request")
    47  	}
    48  
    49  	ctx := sdk.UnwrapSDKContext(c)
    50  
    51  	traces := types.Traces{}
    52  	store := prefix.NewStore(ctx.KVStore(q.storeKey), types.DenomTraceKey)
    53  
    54  	pageRes, err := query.Paginate(store, req.Pagination, func(_, value []byte) error {
    55  		result, err := q.UnmarshalDenomTrace(value)
    56  		if err != nil {
    57  			return err
    58  		}
    59  
    60  		traces = append(traces, result)
    61  		return nil
    62  	})
    63  
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	return &types.QueryDenomTracesResponse{
    69  		DenomTraces: traces.Sort(),
    70  		Pagination:  pageRes,
    71  	}, nil
    72  }
    73  
    74  // Params implements the Query/Params gRPC method
    75  func (q Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {
    76  	ctx := sdk.UnwrapSDKContext(c)
    77  	params := q.GetParams(ctx)
    78  
    79  	return &types.QueryParamsResponse{
    80  		Params: &params,
    81  	}, nil
    82  }