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: ¶ms, 81 }, nil 82 }