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, &params)
    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, &params)
    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  }