forked from terra-money/classic-core
/
querier.go
125 lines (110 loc) · 4.03 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
package treasury
import (
"terra/types/assets"
"terra/types/util"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"
)
// query endpoints supported by the governance Querier
const (
QueryTaxRate = "tax-rate"
QueryTaxCap = "tax-cap"
QueryMiningRewardWeight = "mining-reward-weight"
QueryBalance = "balance"
QueryActiveClaims = "active-claims"
QueryRewards = "rewards"
QueryParams = "params"
QueryIssuance = "issuance"
defaultPage = 1
defaultLimit = 30 // should be consistent with tendermint/tendermint/rpc/core/pipe.go:19
)
// NewQuerier is the module level router for state queries
func NewQuerier(keeper Keeper) sdk.Querier {
return func(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
switch path[0] {
case QueryTaxRate:
return queryTaxRate(ctx, req, keeper)
case QueryTaxCap:
return queryTaxCap(ctx, path[1:], req, keeper)
case QueryMiningRewardWeight:
return queryMiningRewardWeight(ctx, req, keeper)
case QueryBalance:
return queryTreasuryBalance(ctx, req, keeper)
case QueryActiveClaims:
return queryActiveClaims(ctx, req, keeper)
case QueryIssuance:
return queryIssunace(ctx, path[1:], req, keeper)
case QueryParams:
return queryParams(ctx, req, keeper)
default:
return nil, sdk.ErrUnknownRequest("unknown oracle query endpoint")
}
}
}
// nolint: unparam
func queryTaxRate(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
taxRate := keeper.GetTaxRate(ctx)
bz, err := codec.MarshalJSONIndent(keeper.cdc, taxRate)
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
// nolint: unparam
func queryTaxCap(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
denom := path[0]
taxCap := keeper.GetTaxCap(ctx, denom)
bz, err := codec.MarshalJSONIndent(keeper.cdc, taxCap)
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
// nolint: unparam
func queryIssunace(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
denom := path[0]
issuance := keeper.GetIssuance(ctx, denom, util.GetEpoch(ctx))
bz, err := codec.MarshalJSONIndent(keeper.cdc, issuance)
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
// nolint: unparam
func queryMiningRewardWeight(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
rewardWeight := keeper.GetRewardWeight(ctx)
bz, err := codec.MarshalJSONIndent(keeper.cdc, rewardWeight)
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
// nolint: unparam
func queryTreasuryBalance(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
pool := keeper.dk.GetFeePool(ctx).CommunityPool
bz, err := codec.MarshalJSONIndent(keeper.cdc, pool.AmountOf(assets.LunaDenom))
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
func queryActiveClaims(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
claims := []Claim{}
keeper.iterateClaims(ctx, func(claim Claim) (stop bool) {
claims = append(claims, claim)
return false
})
bz, err := codec.MarshalJSONIndent(keeper.cdc, claims)
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}
func queryParams(ctx sdk.Context, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) {
bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetParams(ctx))
if err != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error()))
}
return bz, nil
}