package cli import ( "io/ioutil" "os" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/spf13/cobra" amino "github.com/tendermint/go-amino" ) // GetSignCommand returns the sign command func GetBroadcastCommand(codec *amino.Codec) *cobra.Command { cmd := &cobra.Command{ Use: "broadcast ", Short: "Broadcast transactions generated offline", Long: `Broadcast transactions created with the --generate-only flag and signed with the sign command. Read a transaction from and broadcast it to a node. If you supply a dash (-) argument in place of an input filename, the command reads from standard input.`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) (err error) { cliCtx := context.NewCLIContext().WithCodec(codec) stdTx, err := readAndUnmarshalStdTx(cliCtx.Codec, args[0]) if err != nil { return } txBytes, err := cliCtx.Codec.MarshalBinary(stdTx) if err != nil { return } _, err = cliCtx.BroadcastTx(txBytes) return err }, } return cmd } func readAndUnmarshalStdTx(cdc *amino.Codec, filename string) (stdTx auth.StdTx, err error) { var bytes []byte if filename == "-" { bytes, err = ioutil.ReadAll(os.Stdin) } else { bytes, err = ioutil.ReadFile(filename) } if err != nil { return } if err = cdc.UnmarshalJSON(bytes, &stdTx); err != nil { return } return }