package rest import ( "net/http" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/utils" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/bank/client" "github.com/gorilla/mux" ) // RegisterRoutes - Central function to define routes that get registered by the main application func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec, kb keys.Keybase) { r.HandleFunc("/bank/accounts/{address}/transfers", SendRequestHandlerFn(cdc, kb, cliCtx)).Methods("POST") r.HandleFunc("/tx/broadcast", BroadcastTxRequestHandlerFn(cdc, cliCtx)).Methods("POST") } type sendReq struct { BaseReq utils.BaseReq `json:"base_req"` Amount sdk.Coins `json:"amount"` } var msgCdc = codec.New() func init() { bank.RegisterCodec(msgCdc) } // SendRequestHandlerFn - http request handler to send coins to a address. func SendRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) bech32Addr := vars["address"] to, err := sdk.AccAddressFromBech32(bech32Addr) if err != nil { utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } var req sendReq err = utils.ReadRESTReq(w, r, cdc, &req) if err != nil { return } baseReq := req.BaseReq.Sanitize() if !baseReq.ValidateBasic(w) { return } info, err := kb.Get(baseReq.Name) if err != nil { utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } msg := client.CreateMsg(sdk.AccAddress(info.GetPubKey().Address()), to, req.Amount) utils.CompleteAndBroadcastTxREST(w, r, cliCtx, baseReq, []sdk.Msg{msg}, cdc) } }