From c9abe72280553297f37ee93c91e1e38117d27359 Mon Sep 17 00:00:00 2001 From: Timothy Chen Date: Fri, 30 Aug 2019 06:59:41 -0700 Subject: [PATCH] Merge PR #4968: Improve error reporting in genutil CLI --- x/genutil/client/cli/collect.go | 7 ++++--- x/genutil/client/cli/gentx.go | 34 +++++++++++++++++---------------- x/genutil/client/cli/init.go | 7 ++++--- x/genutil/client/cli/migrate.go | 8 +++++--- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/x/genutil/client/cli/collect.go b/x/genutil/client/cli/collect.go index 35cc3581b9..fe1c864eca 100644 --- a/x/genutil/client/cli/collect.go +++ b/x/genutil/client/cli/collect.go @@ -4,6 +4,7 @@ import ( "encoding/json" "path/filepath" + "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/tendermint/tendermint/libs/cli" @@ -31,12 +32,12 @@ func CollectGenTxsCmd(ctx *server.Context, cdc *codec.Codec, name := viper.GetString(client.FlagName) nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(config) if err != nil { - return err + return errors.Wrap(err, "failed to initialize node validator files") } genDoc, err := tmtypes.GenesisDocFromFile(config.GenesisFile()) if err != nil { - return err + return errors.Wrap(err, "failed to read genesis doc from file") } genTxsDir := viper.GetString(flagGenTxDir) @@ -49,7 +50,7 @@ func CollectGenTxsCmd(ctx *server.Context, cdc *codec.Codec, appMessage, err := genutil.GenAppStateFromConfig(cdc, config, initCfg, *genDoc, genAccIterator) if err != nil { - return err + return errors.Wrap(err, "failed to get genesis app state from config") } toPrint.AppMessage = appMessage diff --git a/x/genutil/client/cli/gentx.go b/x/genutil/client/cli/gentx.go index 568542259b..bed11b88e1 100644 --- a/x/genutil/client/cli/gentx.go +++ b/x/genutil/client/cli/gentx.go @@ -9,6 +9,8 @@ import ( "os" "path/filepath" + "github.com/pkg/errors" + "github.com/spf13/cobra" flag "github.com/spf13/pflag" "github.com/spf13/viper" @@ -63,7 +65,7 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm config.SetRoot(viper.GetString(client.FlagHome)) nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(ctx.Config) if err != nil { - return err + return errors.Wrap(err, "failed to initialize node validator files") } // Read --nodeID, if empty take it from priv_validator.json @@ -74,33 +76,33 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm if valPubKeyString := viper.GetString(flagPubKey); valPubKeyString != "" { valPubKey, err = sdk.GetConsPubKeyBech32(valPubKeyString) if err != nil { - return err + return errors.Wrap(err, "failed to get consensus node public key") } } genDoc, err := tmtypes.GenesisDocFromFile(config.GenesisFile()) if err != nil { - return err + return errors.Wrapf(err, "failed to read genesis doc file %s", config.GenesisFile()) } var genesisState map[string]json.RawMessage if err = cdc.UnmarshalJSON(genDoc.AppState, &genesisState); err != nil { - return err + return errors.Wrap(err, "failed to unmarshal genesis state") } if err = mbm.ValidateGenesis(genesisState); err != nil { - return err + return errors.Wrap(err, "failed to validate genesis state") } kb, err := client.NewKeyBaseFromDir(viper.GetString(flagClientHome)) if err != nil { - return err + return errors.Wrap(err, "failed to initialize keybase") } name := viper.GetString(client.FlagName) key, err := kb.Get(name) if err != nil { - return err + return errors.Wrap(err, "failed to read from keybase") } // Set flags for creating gentx @@ -111,12 +113,12 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm amount := viper.GetString(flagAmount) coins, err := sdk.ParseCoins(amount) if err != nil { - return err + return errors.Wrap(err, "failed to parse coins") } err = genutil.ValidateAccountInGenesis(genesisState, genAccIterator, key.GetAddress(), coins, cdc) if err != nil { - return err + return errors.Wrap(err, "failed to validate account in genesis") } txBldr := auth.NewTxBuilderFromCLI().WithTxEncoder(utils.GetTxEncoder(cdc)) @@ -132,12 +134,12 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm // create a 'create-validator' message txBldr, msg, err := smbh.BuildCreateValidatorMsg(cliCtx, txBldr) if err != nil { - return err + return errors.Wrap(err, "failed to build create-validator message") } info, err := txBldr.Keybase().Get(name) if err != nil { - return err + return errors.Wrap(err, "failed to read from tx builder keybase") } if info.GetType() == kbkeys.TypeOffline || info.GetType() == kbkeys.TypeMulti { @@ -150,19 +152,19 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm cliCtx = cliCtx.WithOutput(w) if err = utils.PrintUnsignedStdTx(txBldr, cliCtx, []sdk.Msg{msg}); err != nil { - return err + return errors.Wrap(err, "failed to print unsigned std tx") } // read the transaction stdTx, err := readUnsignedGenTxFile(cdc, w) if err != nil { - return err + return errors.Wrap(err, "failed to read unsigned gen tx file") } // sign the transaction and write it to the output file signedTx, err := utils.SignStdTx(txBldr, cliCtx, name, stdTx, false, true) if err != nil { - return err + return errors.Wrap(err, "failed to sign std tx") } // Fetch output file name @@ -170,12 +172,12 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm if outputDocument == "" { outputDocument, err = makeOutputFilepath(config.RootDir, nodeID) if err != nil { - return err + return errors.Wrap(err, "failed to create output file path") } } if err := writeSignedGenTx(cdc, outputDocument, signedTx); err != nil { - return err + return errors.Wrap(err, "failed to write signed gen tx") } fmt.Fprintf(os.Stderr, "Genesis transaction written to %q\n", outputDocument) diff --git a/x/genutil/client/cli/init.go b/x/genutil/client/cli/init.go index 028f80fc44..aed60d17f8 100644 --- a/x/genutil/client/cli/init.go +++ b/x/genutil/client/cli/init.go @@ -6,6 +6,7 @@ import ( "os" "path/filepath" + "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/viper" cfg "github.com/tendermint/tendermint/config" @@ -87,7 +88,7 @@ func InitCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, } appState, err := codec.MarshalJSONIndent(cdc, mbm.DefaultGenesis()) if err != nil { - return err + return errors.Wrap(err, "Failed to marshall default genesis state") } genDoc := &types.GenesisDoc{} @@ -98,7 +99,7 @@ func InitCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, } else { genDoc, err = types.GenesisDocFromFile(genFile) if err != nil { - return err + return errors.Wrap(err, "Failed to read genesis doc from file") } } @@ -106,7 +107,7 @@ func InitCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, genDoc.Validators = nil genDoc.AppState = appState if err = genutil.ExportGenesisFile(genDoc, genFile); err != nil { - return err + return errors.Wrap(err, "Failed to export gensis file") } toPrint := newPrintInfo(config.Moniker, chainID, nodeID, "", appState) diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go index 6879364297..e1d8309230 100644 --- a/x/genutil/client/cli/migrate.go +++ b/x/genutil/client/cli/migrate.go @@ -4,6 +4,8 @@ import ( "fmt" "time" + "github.com/pkg/errors" + "github.com/spf13/cobra" "github.com/tendermint/tendermint/types" @@ -40,7 +42,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 genDoc, err := types.GenesisDocFromFile(importGenesis) if err != nil { - return err + return errors.Wrapf(err, "failed to read genesis document from file %s", importGenesis) } var initialState extypes.AppMap @@ -59,7 +61,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 err := t.UnmarshalText([]byte(genesisTime)) if err != nil { - return err + return errors.Wrap(err, "failed to unmarshal genesis time") } genDoc.GenesisTime = t @@ -72,7 +74,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 out, err := cdc.MarshalJSONIndent(genDoc, "", " ") if err != nil { - return err + return errors.Wrap(err, "failed to marshal genesis doc") } fmt.Println(string(sdk.MustSortJSON(out)))