github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 5 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 6 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 7 comm "github.com/fibonacci-chain/fbc/x/common" 8 9 "github.com/fibonacci-chain/fbc/x/distribution/types" 10 ) 11 12 // NewQuerier creates a querier for distribution REST endpoints 13 func NewQuerier(k Keeper) sdk.Querier { 14 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { 15 switch path[0] { 16 case types.QueryParams: 17 return queryParams(ctx, path[1:], req, k) 18 19 case types.QueryValidatorCommission: 20 return queryValidatorCommission(ctx, path[1:], req, k) 21 22 case types.QueryWithdrawAddr: 23 return queryDelegatorWithdrawAddress(ctx, path[1:], req, k) 24 25 case types.QueryCommunityPool: 26 return queryCommunityPool(ctx, path[1:], req, k) 27 28 case types.QueryDelegatorValidators: 29 return queryDelegatorValidators(ctx, path[1:], req, k) 30 31 case types.QueryDelegationRewards: 32 return queryDelegationRewards(ctx, path[1:], req, k) 33 34 case types.QueryDelegatorTotalRewards: 35 return queryDelegatorTotalRewards(ctx, path[1:], req, k) 36 37 case types.QueryValidatorOutstandingRewards: 38 return queryValidatorOutstandingRewards(ctx, path[1:], req, k) 39 40 default: 41 return nil, types.ErrUnknownDistributionQueryType() 42 } 43 } 44 } 45 46 func queryParams(ctx sdk.Context, path []string, req abci.RequestQuery, k Keeper) ([]byte, error) { 47 switch path[0] { 48 case types.ParamCommunityTax: 49 bz, err := codec.MarshalJSONIndent(k.cdc, k.GetCommunityTax(ctx)) 50 if err != nil { 51 return nil, comm.ErrMarshalJSONFailed(err.Error()) 52 } 53 return bz, nil 54 case types.ParamWithdrawAddrEnabled: 55 bz, err := codec.MarshalJSONIndent(k.cdc, k.GetWithdrawAddrEnabled(ctx)) 56 if err != nil { 57 return nil, comm.ErrMarshalJSONFailed(err.Error()) 58 } 59 return bz, nil 60 case types.ParamDistributionType: 61 bz, err := codec.MarshalJSONIndent(k.cdc, k.GetDistributionType(ctx)) 62 if err != nil { 63 return nil, comm.ErrMarshalJSONFailed(err.Error()) 64 } 65 return bz, nil 66 case types.ParamWithdrawRewardEnabled: 67 bz, err := codec.MarshalJSONIndent(k.cdc, k.GetWithdrawRewardEnabled(ctx)) 68 if err != nil { 69 return nil, comm.ErrMarshalJSONFailed(err.Error()) 70 } 71 return bz, nil 72 case types.ParamRewardTruncatePrecision: 73 bz, err := codec.MarshalJSONIndent(k.cdc, k.GetRewardTruncatePrecision(ctx)) 74 if err != nil { 75 return nil, comm.ErrMarshalJSONFailed(err.Error()) 76 } 77 return bz, nil 78 default: 79 return nil, types.ErrUnknownDistributionParamType() 80 } 81 } 82 83 func queryValidatorCommission(ctx sdk.Context, _ []string, req abci.RequestQuery, k Keeper) ([]byte, error) { 84 var params types.QueryValidatorCommissionParams 85 err := k.cdc.UnmarshalJSON(req.Data, ¶ms) 86 if err != nil { 87 return nil, comm.ErrUnMarshalJSONFailed(err.Error()) 88 } 89 90 commission := k.GetValidatorAccumulatedCommission(ctx, params.ValidatorAddress) 91 if commission == nil { //TODO 92 commission = types.ValidatorAccumulatedCommission{} 93 } 94 95 bz, err := codec.MarshalJSONIndent(k.cdc, commission) 96 if err != nil { 97 return nil, comm.ErrMarshalJSONFailed(err.Error()) 98 } 99 100 return bz, nil 101 } 102 103 func queryDelegatorWithdrawAddress(ctx sdk.Context, _ []string, req abci.RequestQuery, k Keeper) ([]byte, error) { 104 var params types.QueryDelegatorWithdrawAddrParams 105 err := k.cdc.UnmarshalJSON(req.Data, ¶ms) 106 if err != nil { 107 return nil, comm.ErrUnMarshalJSONFailed(err.Error()) 108 } 109 110 // cache-wrap context as to not persist state changes during querying 111 ctx, _ = ctx.CacheContext() 112 withdrawAddr := k.GetDelegatorWithdrawAddr(ctx, params.DelegatorAddress) 113 114 bz, err := codec.MarshalJSONIndent(k.cdc, withdrawAddr) 115 if err != nil { 116 return nil, comm.ErrMarshalJSONFailed(err.Error()) 117 } 118 119 return bz, nil 120 } 121 122 func queryCommunityPool(ctx sdk.Context, _ []string, req abci.RequestQuery, k Keeper) ([]byte, error) { 123 pool := k.GetFeePoolCommunityCoins(ctx) 124 if pool == nil { 125 pool = sdk.SysCoins{} 126 } 127 128 bz, err := k.cdc.MarshalJSON(pool) 129 if err != nil { 130 return nil, comm.ErrMarshalJSONFailed(err.Error()) 131 } 132 133 return bz, nil 134 }