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

     1  package rest
     2  
     3  import (
     4  	"net/http"
     5  
     6  	clientCtx "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
     8  	"github.com/fibonacci-chain/fbc/x/wasm/client/utils"
     9  	"github.com/fibonacci-chain/fbc/x/wasm/types"
    10  	"github.com/gorilla/mux"
    11  )
    12  
    13  func registerNewTxRoutes(cliCtx clientCtx.CLIContext, r *mux.Router) {
    14  	r.HandleFunc("/wasm/contract/{contractAddr}/admin", setContractAdminHandlerFn(cliCtx)).Methods("PUT")
    15  	r.HandleFunc("/wasm/contract/{contractAddr}/code", migrateContractHandlerFn(cliCtx)).Methods("PUT")
    16  }
    17  
    18  type migrateContractReq struct {
    19  	BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
    20  	Admin   string       `json:"admin,omitempty" yaml:"admin"`
    21  	CodeID  uint64       `json:"code_id" yaml:"code_id"`
    22  	Msg     []byte       `json:"msg,omitempty" yaml:"msg"`
    23  }
    24  
    25  type updateContractAdministrateReq struct {
    26  	BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
    27  	Admin   string       `json:"admin,omitempty" yaml:"admin"`
    28  }
    29  
    30  func setContractAdminHandlerFn(cliCtx clientCtx.CLIContext) http.HandlerFunc {
    31  	return func(w http.ResponseWriter, r *http.Request) {
    32  		var req updateContractAdministrateReq
    33  		if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) {
    34  			return
    35  		}
    36  		vars := mux.Vars(r)
    37  		contractAddr := vars["contractAddr"]
    38  
    39  		req.BaseReq = req.BaseReq.Sanitize()
    40  		if !req.BaseReq.ValidateBasic(w) {
    41  			return
    42  		}
    43  
    44  		msg := &types.MsgUpdateAdmin{
    45  			Sender:   req.BaseReq.From,
    46  			NewAdmin: req.Admin,
    47  			Contract: contractAddr,
    48  		}
    49  		if err := msg.ValidateBasic(); err != nil {
    50  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    51  			return
    52  		}
    53  
    54  		utils.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, msg)
    55  	}
    56  }
    57  
    58  func migrateContractHandlerFn(cliCtx clientCtx.CLIContext) http.HandlerFunc {
    59  	return func(w http.ResponseWriter, r *http.Request) {
    60  		var req migrateContractReq
    61  		if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) {
    62  			return
    63  		}
    64  		vars := mux.Vars(r)
    65  		contractAddr := vars["contractAddr"]
    66  
    67  		req.BaseReq = req.BaseReq.Sanitize()
    68  		if !req.BaseReq.ValidateBasic(w) {
    69  			return
    70  		}
    71  
    72  		msg := &types.MsgMigrateContract{
    73  			Sender:   req.BaseReq.From,
    74  			Contract: contractAddr,
    75  			CodeID:   req.CodeID,
    76  			Msg:      req.Msg,
    77  		}
    78  		if err := msg.ValidateBasic(); err != nil {
    79  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    80  			return
    81  		}
    82  
    83  		utils.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, msg)
    84  	}
    85  }