github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/bank/client/rest/tx.go (about) 1 package rest 2 3 import ( 4 "net/http" 5 6 "github.com/gorilla/mux" 7 8 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 9 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils" 12 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/internal/types" 14 ) 15 16 // RegisterRoutes - Central function to define routes that get registered by the main application 17 func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router) { 18 r.HandleFunc("/bank/accounts/{address}/transfers", SendRequestHandlerFn(cliCtx)).Methods("POST") 19 r.HandleFunc("/bank/balances/{address}", QueryBalancesRequestHandlerFn(cliCtx)).Methods("GET") 20 } 21 22 // SendReq defines the properties of a send request's body. 23 type SendReq struct { 24 BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` 25 Amount sdk.Coins `json:"amount" yaml:"amount"` 26 } 27 28 // SendRequestHandlerFn - http request handler to send coins to a address. 29 func SendRequestHandlerFn(cliCtx context.CLIContext) http.HandlerFunc { 30 return func(w http.ResponseWriter, r *http.Request) { 31 vars := mux.Vars(r) 32 bech32Addr := vars["address"] 33 34 toAddr, err := sdk.AccAddressFromBech32(bech32Addr) 35 if err != nil { 36 rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) 37 return 38 } 39 40 var req SendReq 41 if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) { 42 return 43 } 44 45 req.BaseReq = req.BaseReq.Sanitize() 46 if !req.BaseReq.ValidateBasic(w) { 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 msg := types.NewMsgSend(fromAddr, toAddr, req.Amount) 57 utils.WriteGenerateStdTxResponse(w, cliCtx, req.BaseReq, []sdk.Msg{msg}) 58 } 59 }