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 }