From 3c82b663476006f772c238d65a11b1fa48e2beeb Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Fri, 27 Dec 2019 16:23:18 +0100 Subject: [PATCH] Merge PR #5427: Remove code duplication in x/auth/client/cli --- CHANGELOG.md | 1 + client/flags/flags.go | 4 ++ x/auth/client/cli/decode.go | 98 ++++++++++--------------------------- 3 files changed, 32 insertions(+), 71 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef0b35e5206d..dac02cb50f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,7 @@ if the provided arguments are invalid. increased significantly due to modular `AnteHandler` support. Increase GasLimit accordingly. * (rest) [\#5336](https://github.com/cosmos/cosmos-sdk/issues/5336) `MsgEditValidator` uses `description` instead of `Description` as a JSON key. * (keys) [\#5097](https://github.com/cosmos/cosmos-sdk/pull/5097) Due to the keybase -> keyring transition, keys need to be migrated. See `keys migrate` command for more info. +* (x/auth) [\#5424](https://github.com/cosmos/cosmos-sdk/issues/5424) Drop `decode-tx` command from x/auth/client/cli, duplicate of the `decode` command. ### Features diff --git a/client/flags/flags.go b/client/flags/flags.go index 9451500bfc21..d609e26729f6 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -84,6 +84,8 @@ func GetCommands(cmds ...*cobra.Command) []*cobra.Command { viper.BindPFlag(FlagNode, c.Flags().Lookup(FlagNode)) c.MarkFlagRequired(FlagChainID) + + c.SetErr(c.ErrOrStderr()) } return cmds } @@ -119,6 +121,8 @@ func PostCommands(cmds ...*cobra.Command) []*cobra.Command { viper.BindPFlag(FlagKeyringBackend, c.Flags().Lookup(FlagKeyringBackend)) c.MarkFlagRequired(FlagChainID) + + c.SetErr(c.ErrOrStderr()) } return cmds } diff --git a/x/auth/client/cli/decode.go b/x/auth/client/cli/decode.go index b27bbaa1c4ee..c9253d8fb4a3 100644 --- a/x/auth/client/cli/decode.go +++ b/x/auth/client/cli/decode.go @@ -1,98 +1,54 @@ package cli import ( - "bytes" "encoding/base64" "encoding/hex" - "encoding/json" - "fmt" "github.com/spf13/cobra" + "github.com/spf13/viper" "github.com/tendermint/go-amino" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/version" - "github.com/cosmos/cosmos-sdk/x/auth/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) +const flagHex = "hex" + // GetDecodeCommand returns the decode command to take Amino-serialized bytes // and turn it into a JSONified transaction. func GetDecodeCommand(codec *amino.Codec) *cobra.Command { cmd := &cobra.Command{ Use: "decode [amino-byte-string]", - Short: "Decode an amino-encoded transaction string", + Short: "Decode an amino-encoded transaction string.", Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - cliCtx := context.NewCLIContext().WithCodec(codec) - - txBytes, err := base64.StdEncoding.DecodeString(args[0]) - if err != nil { - return err - } - - var stdTx authtypes.StdTx - err = cliCtx.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &stdTx) - if err != nil { - return err - } - - return cliCtx.PrintOutput(stdTx) - }, + RunE: runDecodeTxString(codec), } + cmd.Flags().BoolP(flagHex, "x", false, "Treat input as hexadecimal instead of base64") return flags.PostCommands(cmd)[0] } -// GetDecodeTxCmd - returns the command to decode a tx from hex or base64 -func GetDecodeTxCmd(cdc *codec.Codec) *cobra.Command { - return &cobra.Command{ - Use: "decode-tx [tx]", - Short: "Decode a tx from hex or base64", - Long: fmt.Sprintf(`Decode a tx from hex, base64. - -Example: - $ %s tx decode-tx TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz - `, version.ClientName), - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - - txString := args[0] - - // try hex, then base64 - txBytes, err := hex.DecodeString(txString) - if err != nil { - var err2 error - txBytes, err2 = base64.StdEncoding.DecodeString(txString) - if err2 != nil { - return fmt.Errorf(`expected hex or base64. Got errors: - hex: %v, - base64: %v - `, err, err2) - } - } - - var tx = types.StdTx{} - - err = cdc.UnmarshalBinaryLengthPrefixed(txBytes, &tx) - if err != nil { - return err - } - - bz, err := cdc.MarshalJSON(tx) - if err != nil { - return err - } - - buf := bytes.NewBuffer([]byte{}) - if err = json.Indent(buf, bz, "", " "); err != nil { - return err - } - - fmt.Println(buf.String()) - return nil - }, +func runDecodeTxString(codec *amino.Codec) func(cmd *cobra.Command, args []string) (err error) { + return func(cmd *cobra.Command, args []string) (err error) { + cliCtx := context.NewCLIContext().WithCodec(codec).WithOutput(cmd.OutOrStdout()) + var txBytes []byte + + if viper.GetBool(flagHex) { + txBytes, err = hex.DecodeString(args[0]) + } else { + txBytes, err = base64.StdEncoding.DecodeString(args[0]) + } + if err != nil { + return err + } + + var stdTx authtypes.StdTx + err = cliCtx.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &stdTx) + if err != nil { + return err + } + + return cliCtx.PrintOutput(stdTx) } }