-
Notifications
You must be signed in to change notification settings - Fork 0
/
querier.go
139 lines (104 loc) · 3.53 KB
/
querier.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package keeper
import (
"github.com/ayher/project-anatha/config"
"github.com/ayher/project-anatha/utils"
abci "github.com/tendermint/tendermint/abci/types"
"strings"
"github.com/ayher/anatha/codec"
sdk "github.com/ayher/anatha/types"
sdkerrors "github.com/ayher/anatha/types/errors"
"github.com/ayher/project-anatha/x/treasury/internal/types"
)
const (
QueryParameters = "parameters"
QueryTreasury = "treasury"
QueryOperators = "operators"
QueryDisbursements = "disbursements"
QueryPrice = "price"
QueryDisbursementEscrow = "disbursement-escrow"
)
// NewQuerier creates a new querier for treasury clients.
func NewQuerier(k Keeper) sdk.Querier {
return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) {
switch path[0] {
case QueryParameters:
return queryParams(ctx, k)
case QueryTreasury:
return queryTreasury(ctx, k)
case QueryOperators:
return queryOperators(ctx, k)
case QueryDisbursements:
return queryDisbursements(ctx, k)
case QueryPrice:
return queryPrice(ctx, path[1:], req, k)
case QueryDisbursementEscrow:
return queryDisbursementEscrow(ctx, path[1:], req, k)
default:
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown treasury query endpoint")
}
}
}
func queryParams(ctx sdk.Context, k Keeper) ([]byte, error) {
params := k.GetParams(ctx)
res, err := codec.MarshalJSONIndent(types.ModuleCdc, params)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}
func queryTreasury(ctx sdk.Context, k Keeper) ([]byte, error) {
params := k.GetTreasury(ctx)
res, err := codec.MarshalJSONIndent(types.ModuleCdc, params)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}
func queryOperators(ctx sdk.Context, k Keeper) ([]byte, error) {
operators := k.GetOperators(ctx)
res, err := codec.MarshalJSONIndent(types.ModuleCdc, operators)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}
func queryDisbursements(ctx sdk.Context, k Keeper) ([]byte, error) {
disbursements := k.GetDisbursements(ctx)
res, err := codec.MarshalJSONIndent(types.ModuleCdc, disbursements)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}
func queryPrice(ctx sdk.Context, path []string, req abci.RequestQuery, k Keeper) ([]byte, error) {
coins, err := utils.ParseAndConvertCoins(path[0])
if err != nil {
return nil, err
}
var result sdk.Coins
if coins.AmountOf(config.DefaultStableDenom).IsPositive() {
result, _, _ = k.CalculatePinAmountExtended(ctx, coins)
} else if coins.AmountOf(config.DefaultDenom).IsPositive() {
result = k.CalculateDinAmountExtended(ctx, coins)
} else {
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "Invalid denomination. Expected usd or anatha.")
}
res, err := codec.MarshalJSONIndent(types.ModuleCdc, result)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}
func queryDisbursementEscrow(ctx sdk.Context, path []string, req abci.RequestQuery, k Keeper) ([]byte, error) {
reference := strings.ToLower(path[0])
found, amount := k.GetDisbursementReferenceAmount(ctx, reference)
if ! found {
return nil, types.ErrInvalidReference
}
coins := sdk.NewCoins(sdk.NewCoin(config.DefaultDenom, amount))
res, err := codec.MarshalJSONIndent(types.ModuleCdc, coins)
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
return res, nil
}