/
grpc_query.go
61 lines (48 loc) · 1.67 KB
/
grpc_query.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package keeper
import (
"context"
"strings"
sdk "github.com/cosmos/cosmos-sdk/types"
transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/dymensionxyz/dymension-rdk/x/denommetadata/types"
)
var _ types.QueryServer = Querier{}
// Querier defines a wrapper around the x/FeeShare keeper providing gRPC method
// handlers.
type Querier struct {
Keeper
}
func NewQuerier(k Keeper) Querier {
return Querier{Keeper: k}
}
// Params returns denommetadata module params
func (q Querier) Params(
c context.Context,
_ *types.QueryParamsRequest,
) (*types.QueryParamsResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
params := q.GetParams(ctx)
return &types.QueryParamsResponse{Params: params}, nil
}
// IBCDenomByDenomTrace returns IBC denom base on denom trace
func (q Querier) IBCDenomByDenomTrace(
_ context.Context,
req *types.QueryGetIBCDenomByDenomTraceRequest,
) (*types.QueryIBCDenomByDenomTraceResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "empty request")
}
traces := strings.Split(req.DenomTrace, "/")
if len(traces) < 3 {
return nil, status.Error(codes.InvalidArgument, "input denom traces invalid, need to have at least 3 elements")
}
if len(traces)%2 == 0 {
return nil, status.Error(codes.InvalidArgument, "denom traces must follow this format [port-id-1]/[channel-id-1]/.../[port-id-n]/[channel-id-n]/[denom]")
}
denomTrace := transfertypes.ParseDenomTrace(req.DenomTrace)
voucherDenom := denomTrace.IBCDenom()
ibcDenomResponse := &types.QueryIBCDenomByDenomTraceResponse{IbcDenom: voucherDenom}
return ibcDenomResponse, nil
}