github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/evidence/internal/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 "encoding/hex" 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/libs/cosmos-sdk/x/evidence/exported" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/evidence/internal/types" 12 13 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 14 ) 15 16 func NewQuerier(k Keeper) sdk.Querier { 17 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { 18 var ( 19 res []byte 20 err error 21 ) 22 23 switch path[0] { 24 case types.QueryParameters: 25 res, err = queryParams(ctx, k) 26 27 case types.QueryEvidence: 28 res, err = queryEvidence(ctx, req, k) 29 30 case types.QueryAllEvidence: 31 res, err = queryAllEvidence(ctx, req, k) 32 33 default: 34 err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) 35 } 36 37 return res, err 38 } 39 } 40 41 func queryParams(ctx sdk.Context, k Keeper) ([]byte, error) { 42 params := k.GetParams(ctx) 43 44 res, err := codec.MarshalJSONIndent(k.cdc, params) 45 if err != nil { 46 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 47 } 48 49 return res, nil 50 } 51 52 func queryEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 53 var params types.QueryEvidenceParams 54 55 err := k.cdc.UnmarshalJSON(req.Data, ¶ms) 56 if err != nil { 57 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 58 } 59 60 hash, err := hex.DecodeString(params.EvidenceHash) 61 if err != nil { 62 return nil, sdkerrors.Wrap(err, "failed to decode evidence hash string query") 63 } 64 65 evidence, ok := k.GetEvidence(ctx, hash) 66 if !ok { 67 return nil, sdkerrors.Wrap(types.ErrNoEvidenceExists, params.EvidenceHash) 68 } 69 70 res, err := codec.MarshalJSONIndent(k.cdc, evidence) 71 if err != nil { 72 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 73 } 74 75 return res, nil 76 } 77 78 func queryAllEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 79 var params types.QueryAllEvidenceParams 80 81 err := k.cdc.UnmarshalJSON(req.Data, ¶ms) 82 if err != nil { 83 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 84 } 85 86 evidence := k.GetAllEvidence(ctx) 87 88 start, end := client.Paginate(len(evidence), params.Page, params.Limit, 100) 89 if start < 0 || end < 0 { 90 evidence = []exported.Evidence{} 91 } else { 92 evidence = evidence[start:end] 93 } 94 95 res, err := codec.MarshalJSONIndent(k.cdc, evidence) 96 if err != nil { 97 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 98 } 99 100 return res, nil 101 }