package rest import ( "fmt" "net/http" "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/slashing" ) func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec) { r.HandleFunc( "/slashing/validators/{validatorPubKey}/signing_info", signingInfoHandlerFn(cliCtx, slashing.StoreKey, cdc), ).Methods("GET") r.HandleFunc( "/slashing/parameters", queryParamsHandlerFn(cdc, cliCtx), ).Methods("GET") } // http request handler to query signing info // nolint: unparam func signingInfoHandlerFn(cliCtx context.CLIContext, storeName string, cdc *codec.Codec) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) pk, err := sdk.GetConsPubKeyBech32(vars["validatorPubKey"]) if err != nil { rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } key := slashing.GetValidatorSigningInfoKey(sdk.ConsAddress(pk.Address())) res, err := cliCtx.QueryStore(key, storeName) if err != nil { rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } if len(res) == 0 { w.WriteHeader(http.StatusNoContent) return } var signingInfo slashing.ValidatorSigningInfo err = cdc.UnmarshalBinaryLengthPrefixed(res, &signingInfo) if err != nil { rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } rest.PostProcessResponse(w, cdc, signingInfo, cliCtx.Indent) } } func queryParamsHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { route := fmt.Sprintf("custom/%s/parameters", slashing.QuerierRoute) res, err := cliCtx.QueryWithData(route, nil) if err != nil { rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } rest.PostProcessResponse(w, cdc, res, cliCtx.Indent) } }