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

     1  package rest
     2  
     3  import (
     4  	"bytes"
     5  	"net/http"
     6  
     7  	"github.com/gorilla/mux"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    10  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    13  	"github.com/fibonacci-chain/fbc/x/slashing/internal/types"
    14  )
    15  
    16  func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router) {
    17  	r.HandleFunc(
    18  		"/slashing/validators/{validatorAddr}/unjail",
    19  		unjailRequestHandlerFn(cliCtx),
    20  	).Methods("POST")
    21  }
    22  
    23  // Unjail TX body
    24  type UnjailReq struct {
    25  	BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
    26  }
    27  
    28  func unjailRequestHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
    29  	return func(w http.ResponseWriter, r *http.Request) {
    30  		vars := mux.Vars(r)
    31  
    32  		bech32validator := vars["validatorAddr"]
    33  
    34  		var req UnjailReq
    35  		if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) {
    36  			return
    37  		}
    38  
    39  		req.BaseReq = req.BaseReq.Sanitize()
    40  		if !req.BaseReq.ValidateBasic(w) {
    41  			return
    42  		}
    43  
    44  		valAddr, err := sdk.ValAddressFromBech32(bech32validator)
    45  		if err != nil {
    46  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
    47  			return
    48  		}
    49  
    50  		fromAddr, err := sdk.AccAddressFromBech32(req.BaseReq.From)
    51  		if err != nil {
    52  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    53  			return
    54  		}
    55  
    56  		if !bytes.Equal(fromAddr, valAddr) {
    57  			rest.WriteErrorResponse(w, http.StatusUnauthorized, "must use own validator address")
    58  			return
    59  		}
    60  
    61  		msg := types.NewMsgUnjail(valAddr)
    62  		err = msg.ValidateBasic()
    63  		if err != nil {
    64  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    65  			return
    66  		}
    67  
    68  		utils.WriteGenerateStdTxResponse(w, cliCtx, req.BaseReq, []sdk.Msg{msg})
    69  	}
    70  }