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