84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
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-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
|
|
}
|