github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/slashing/internal/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 5 6 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 10 "github.com/fibonacci-chain/fbc/x/slashing/internal/types" 11 ) 12 13 // NewQuerier creates a new querier for slashing clients. 14 func NewQuerier(k Keeper) sdk.Querier { 15 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { 16 switch path[0] { 17 case types.QueryParameters: 18 return queryParams(ctx, k) 19 20 case types.QuerySigningInfo: 21 return querySigningInfo(ctx, req, k) 22 23 case types.QuerySigningInfos: 24 return querySigningInfos(ctx, req, k) 25 26 default: 27 return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) 28 } 29 } 30 } 31 32 func queryParams(ctx sdk.Context, k Keeper) ([]byte, error) { 33 params := k.GetParams(ctx) 34 35 res, err := codec.MarshalJSONIndent(types.ModuleCdc, params) 36 if err != nil { 37 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 38 } 39 40 return res, nil 41 } 42 43 func querySigningInfo(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 44 var params types.QuerySigningInfoParams 45 46 err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms) 47 if err != nil { 48 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 49 } 50 51 signingInfo, found := k.GetValidatorSigningInfo(ctx, params.ConsAddress) 52 if !found { 53 return nil, sdkerrors.Wrap(types.ErrNoSigningInfoFound, params.ConsAddress.String()) 54 } 55 56 res, err := codec.MarshalJSONIndent(types.ModuleCdc, signingInfo) 57 if err != nil { 58 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 59 } 60 61 return res, nil 62 } 63 64 func querySigningInfos(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 65 var params types.QuerySigningInfosParams 66 67 err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms) 68 if err != nil { 69 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 70 } 71 72 var signingInfos []types.ValidatorSigningInfo 73 74 k.IterateValidatorSigningInfos(ctx, func(consAddr sdk.ConsAddress, info types.ValidatorSigningInfo) (stop bool) { 75 signingInfos = append(signingInfos, info) 76 return false 77 }) 78 79 start, end := client.Paginate(len(signingInfos), params.Page, params.Limit, int(k.sk.MaxValidators(ctx))) 80 if start < 0 || end < 0 { 81 signingInfos = []types.ValidatorSigningInfo{} 82 } else { 83 signingInfos = signingInfos[start:end] 84 } 85 86 res, err := codec.MarshalJSONIndent(types.ModuleCdc, signingInfos) 87 if err != nil { 88 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 89 } 90 91 return res, nil 92 }