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