package cli import ( "fmt" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client/context" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/bank/client" ) const ( flagTo = "to" flagAmount = "amount" ) // SendTxCommand will create a send tx and sign it with the given key func SendTxCmd(cdc *wire.Codec) *cobra.Command { cmd := &cobra.Command{ Use: "send", Short: "Create and sign a send tx", RunE: func(cmd *cobra.Command, args []string) error { ctx := context.NewCoreContextFromViper().WithDecoder(authcmd.GetAccountDecoder(cdc)) // get the from/to address from, err := ctx.GetFromAddress() if err != nil { return err } toStr := viper.GetString(flagTo) to, err := sdk.GetAccAddressBech32Cosmos(toStr) if err != nil { return err } // parse coins amount := viper.GetString(flagAmount) coins, err := sdk.ParseCoins(amount) if err != nil { return err } // build and sign the transaction, then broadcast to Tendermint msg := client.BuildMsg(from, to, coins) res, err := ctx.EnsureSignBuildBroadcast(ctx.FromAddressName, msg, cdc) if err != nil { return err } fmt.Printf("Committed at block %d. Hash: %s\n", res.Height, res.Hash.String()) return nil }, } cmd.Flags().String(flagTo, "", "Address to send coins") cmd.Flags().String(flagAmount, "", "Amount of coins to send") return cmd }