github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/client/rest/utils.go (about)

     1  package rest
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/fibonacci-chain/fbc/x/common"
     8  
     9  	"github.com/gorilla/mux"
    10  
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    12  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    13  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    14  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    15  	"github.com/fibonacci-chain/fbc/x/staking/types"
    16  )
    17  
    18  // contains checks if the a given query contains one of the tx types
    19  func contains(stringSlice []string, txType string) bool {
    20  	for _, word := range stringSlice {
    21  		if word == txType {
    22  			return true
    23  		}
    24  	}
    25  	return false
    26  }
    27  
    28  // queries staking txs
    29  func queryTxs(cliCtx context.CLIContext, action string, delegatorAddr string) (*sdk.SearchTxsResult, error) {
    30  	page := 1
    31  	limit := 100
    32  	events := []string{
    33  		fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeyAction, action),
    34  		fmt.Sprintf("%s.%s='%s'", sdk.EventTypeMessage, sdk.AttributeKeySender, delegatorAddr),
    35  	}
    36  
    37  	return utils.QueryTxsByEvents(cliCtx, events, page, limit)
    38  }
    39  
    40  func queryDelegator(cliCtx context.CLIContext, endpoint string) http.HandlerFunc {
    41  	return func(w http.ResponseWriter, r *http.Request) {
    42  		bech32DelAddr := mux.Vars(r)["delegatorAddr"]
    43  
    44  		delegatorAddr, err := sdk.AccAddressFromBech32(bech32DelAddr)
    45  		if err != nil {
    46  			common.HandleErrorMsg(w, cliCtx, types.CodeNoDelegatorExisted, err.Error())
    47  			return
    48  		}
    49  
    50  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
    51  		if !ok {
    52  			return
    53  		}
    54  
    55  		params := types.NewQueryDelegatorParams(delegatorAddr)
    56  
    57  		bz, err := cliCtx.Codec.MarshalJSON(params)
    58  		if err != nil {
    59  			common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err.Error())
    60  			return
    61  		}
    62  
    63  		res, height, err := cliCtx.QueryWithData(endpoint, bz)
    64  		if err != nil {
    65  			common.HandleErrorMsg(w, cliCtx, uint32(common.ErrorABCIQueryFails), err.Error())
    66  			return
    67  		}
    68  
    69  		cliCtx = cliCtx.WithHeight(height)
    70  		rest.PostProcessResponse(w, cliCtx, res)
    71  	}
    72  }
    73  
    74  func queryValidator(cliCtx context.CLIContext, endpoint string) http.HandlerFunc {
    75  	return func(w http.ResponseWriter, r *http.Request) {
    76  		bech32ValAddr := mux.Vars(r)["validatorAddr"]
    77  
    78  		validatorAddr, err := sdk.ValAddressFromBech32(bech32ValAddr)
    79  		if err != nil {
    80  			common.HandleErrorMsg(w, cliCtx, types.CodeBadValidatorAddr, "validator address is invalid")
    81  			return
    82  		}
    83  
    84  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
    85  		if !ok {
    86  			return
    87  		}
    88  
    89  		params := types.NewQueryValidatorParams(validatorAddr)
    90  
    91  		bz, err := cliCtx.Codec.MarshalJSON(params)
    92  		if err != nil {
    93  			common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err.Error())
    94  			return
    95  		}
    96  
    97  		res, height, err := cliCtx.QueryWithData(endpoint, bz)
    98  		if err != nil {
    99  			common.HandleErrorResponseV2(w, http.StatusInternalServerError, common.ErrorABCIQueryFails)
   100  			return
   101  		}
   102  
   103  		cliCtx = cliCtx.WithHeight(height)
   104  		rest.PostProcessResponse(w, cliCtx, res)
   105  	}
   106  }
   107  
   108  func queryBonds(ctx context.CLIContext, endpoint string) http.HandlerFunc {
   109  	return func(w http.ResponseWriter, r *http.Request) {
   110  		vars := mux.Vars(r)
   111  		bech32delegator := vars["delegatorAddr"]
   112  		bech32validator := vars["validatorAddr"]
   113  
   114  		var (
   115  			validatorAddr sdk.ValAddress
   116  			delegatorAddr sdk.AccAddress
   117  			err           error
   118  		)
   119  
   120  		if len(bech32delegator) != 0 {
   121  			delegatorAddr, err = sdk.AccAddressFromBech32(bech32delegator)
   122  			if rest.CheckBadRequestError(w, err) {
   123  				return
   124  			}
   125  		}
   126  
   127  		if len(bech32validator) != 0 {
   128  			validatorAddr, err = sdk.ValAddressFromBech32(bech32validator)
   129  			if rest.CheckBadRequestError(w, err) {
   130  				return
   131  			}
   132  		}
   133  
   134  		clientCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, ctx, r)
   135  		if !ok {
   136  			return
   137  		}
   138  
   139  		//QueryDelegatorValidatorRequest
   140  		params := types.QueryUnbondingDelegationRequest{DelegatorAddr: delegatorAddr.String(), ValidatorAddr: validatorAddr.String()}
   141  
   142  		bz, err := clientCtx.CodecProy.GetCdc().MarshalJSON(params)
   143  		if rest.CheckBadRequestError(w, err) {
   144  			return
   145  		}
   146  
   147  		res, height, err := clientCtx.QueryWithData(endpoint, bz)
   148  		if rest.CheckInternalServerError(w, err) {
   149  			return
   150  		}
   151  
   152  		clientCtx = clientCtx.WithHeight(height)
   153  		rest.PostProcessResponse(w, clientCtx, res)
   154  	}
   155  }
   156  
   157  func queryBondsInfo(cliCtx context.CLIContext, endpoint string) http.HandlerFunc {
   158  	return func(w http.ResponseWriter, r *http.Request) {
   159  		vars := mux.Vars(r)
   160  		bech32delegator := vars["delegatorAddr"]
   161  		bech32validator := vars["validatorAddr"]
   162  
   163  		delegatorAddr, err := sdk.AccAddressFromBech32(bech32delegator)
   164  		if err != nil {
   165  			common.HandleErrorMsg(w, cliCtx, types.CodeNoDelegatorExisted, err.Error())
   166  			return
   167  		}
   168  
   169  		validatorAddr, err := sdk.ValAddressFromBech32(bech32validator)
   170  		if err != nil {
   171  			common.HandleErrorMsg(w, cliCtx, types.CodeNoValidatorFound, err.Error())
   172  			return
   173  		}
   174  
   175  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
   176  		if !ok {
   177  			return
   178  		}
   179  
   180  		params := types.NewQueryBondsParams(delegatorAddr, validatorAddr)
   181  
   182  		bz, err := cliCtx.Codec.MarshalJSON(params)
   183  		if err != nil {
   184  			common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err.Error())
   185  			return
   186  		}
   187  
   188  		res, height, err := cliCtx.QueryWithData(endpoint, bz)
   189  		if err != nil {
   190  			sdkErr := common.ParseSDKError(err.Error())
   191  			common.HandleErrorMsg(w, cliCtx, sdkErr.Code, sdkErr.Message)
   192  			return
   193  		}
   194  
   195  		cliCtx = cliCtx.WithHeight(height)
   196  		rest.PostProcessResponse(w, cliCtx, res)
   197  	}
   198  }