From affa1fb3f310f58e1d429f0555a0b0b5d085d9e8 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Thu, 6 Dec 2018 11:03:58 +0000 Subject: [PATCH] Reintroduce collect-gentxs's --gentx-dir flag It went lost in last genesis workflow refactoring. Also address structs initializations as per #2835. --- client/flags.go | 1 + cmd/gaia/cli_test/cli_test.go | 31 ++++++++++++++++++++++ cmd/gaia/init/collect.go | 48 ++++++++++++++++++++++++++--------- cmd/gaia/init/gentx.go | 11 +++++--- cmd/gaia/init/init.go | 8 ++---- cmd/gaia/init/testnet.go | 8 +----- x/stake/client/cli/flags.go | 2 -- 7 files changed, 79 insertions(+), 30 deletions(-) diff --git a/client/flags.go b/client/flags.go index 6a3ccff060..cf7be359e4 100644 --- a/client/flags.go +++ b/client/flags.go @@ -43,6 +43,7 @@ const ( FlagSSLHosts = "ssl-hosts" FlagSSLCertFile = "ssl-certfile" FlagSSLKeyFile = "ssl-keyfile" + FlagOutputDocument = "output-document" // inspired by wget -O ) // LineBreak can be included in a command list to provide a blank line diff --git a/cmd/gaia/cli_test/cli_test.go b/cmd/gaia/cli_test/cli_test.go index f7d3b2d831..845edc757b 100644 --- a/cmd/gaia/cli_test/cli_test.go +++ b/cmd/gaia/cli_test/cli_test.go @@ -645,6 +645,37 @@ trust_node = true cleanupDirs(gaiadHome, gaiacliHome) } +func TestGaiadCollectGentxs(t *testing.T) { + t.Parallel() + // Initialise temporary directories + gaiadHome, gaiacliHome := getTestingHomeDirs(t.Name()) + gentxDir, err := ioutil.TempDir("", "") + gentxDoc := filepath.Join(gentxDir, "gentx.json") + require.NoError(t, err) + + tests.ExecuteT(t, fmt.Sprintf("gaiad --home=%s unsafe-reset-all", gaiadHome), "") + os.RemoveAll(filepath.Join(gaiadHome, "config", "gentx")) + executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s foo", gaiacliHome), app.DefaultKeyPass) + executeWrite(t, fmt.Sprintf("gaiacli keys delete --home=%s bar", gaiacliHome), app.DefaultKeyPass) + executeWriteCheckErr(t, fmt.Sprintf("gaiacli keys add --home=%s foo", gaiacliHome), app.DefaultKeyPass) + executeWriteCheckErr(t, fmt.Sprintf("gaiacli keys add --home=%s bar", gaiacliHome), app.DefaultKeyPass) + executeWriteCheckErr(t, fmt.Sprintf("gaiacli config --home=%s output json", gaiacliHome)) + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --home=%s", gaiacliHome)) + + // Run init + _ = executeInit(t, fmt.Sprintf("gaiad init -o --moniker=foo --home=%s", gaiadHome)) + // Add account to genesis.json + executeWriteCheckErr(t, fmt.Sprintf( + "gaiad add-genesis-account %s 150%s,1000fooToken --home=%s", fooAddr, stakeTypes.DefaultBondDenom, gaiadHome)) + executeWrite(t, fmt.Sprintf("cat %s%sconfig%sgenesis.json", gaiadHome, string(os.PathSeparator), string(os.PathSeparator))) + // Write gentx file + executeWriteCheckErr(t, fmt.Sprintf( + "gaiad gentx --name=foo --home=%s --home-client=%s --output-document=%s", gaiadHome, gaiacliHome, gentxDoc), app.DefaultKeyPass) + // Collect gentxs from a custom directory + executeWriteCheckErr(t, fmt.Sprintf("gaiad collect-gentxs --home=%s --gentx-dir=%s", gaiadHome, gentxDir), app.DefaultKeyPass) + cleanupDirs(gaiadHome, gaiacliHome, gentxDir) +} + //___________________________________________________________________________________ // helper methods diff --git a/cmd/gaia/init/collect.go b/cmd/gaia/init/collect.go index da97e46263..e630d494cc 100644 --- a/cmd/gaia/init/collect.go +++ b/cmd/gaia/init/collect.go @@ -18,6 +18,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" ) +const ( + flagGenTxDir = "gentx-dir" +) + type initConfig struct { ChainID string GenTxsDir string @@ -35,7 +39,6 @@ func CollectGenTxsCmd(ctx *server.Context, cdc *codec.Codec) *cobra.Command { config := ctx.Config config.SetRoot(viper.GetString(cli.HomeFlag)) name := viper.GetString(client.FlagName) - nodeID, valPubKey, err := InitializeNodeValidatorFiles(config) if err != nil { return err @@ -46,19 +49,13 @@ func CollectGenTxsCmd(ctx *server.Context, cdc *codec.Codec) *cobra.Command { return err } - toPrint := printInfo{ - Moniker: config.Moniker, - ChainID: genDoc.ChainID, - NodeID: nodeID, + genTxsDir := viper.GetString(flagGenTxDir) + if genTxsDir == "" { + genTxsDir = filepath.Join(config.RootDir, "config", "gentx") } - initCfg := initConfig{ - ChainID: genDoc.ChainID, - GenTxsDir: filepath.Join(config.RootDir, "config", "gentx"), - Name: name, - NodeID: nodeID, - ValPubKey: valPubKey, - } + toPrint := newPrintInfo(config.Moniker, genDoc.ChainID, nodeID, genTxsDir, json.RawMessage("")) + initCfg := newInitConfig(genDoc.ChainID, genTxsDir, name, nodeID, valPubKey) appMessage, err := genAppStateFromConfig(cdc, config, initCfg, genDoc) if err != nil { @@ -73,6 +70,9 @@ func CollectGenTxsCmd(ctx *server.Context, cdc *codec.Codec) *cobra.Command { } cmd.Flags().String(cli.HomeFlag, app.DefaultNodeHome, "node's home directory") + cmd.Flags().String(flagGenTxDir, "", + "override default \"gentx\" directory from which collect and execute "+ + "genesis transactions; default [--home]/config/gentx/") return cmd } @@ -117,3 +117,27 @@ func genAppStateFromConfig( err = ExportGenesisFile(genFile, initCfg.ChainID, nil, appState) return } + +func newInitConfig(chainID, genTxsDir, name, nodeID string, + valPubKey crypto.PubKey) initConfig { + + return initConfig{ + ChainID: chainID, + GenTxsDir: genTxsDir, + Name: name, + NodeID: nodeID, + ValPubKey: valPubKey, + } +} + +func newPrintInfo(moniker, chainID, nodeID, genTxsDir string, + appMessage json.RawMessage) printInfo { + + return printInfo{ + Moniker: moniker, + ChainID: chainID, + NodeID: nodeID, + GenTxsDir: genTxsDir, + AppMessage: appMessage, + } +} diff --git a/cmd/gaia/init/gentx.go b/cmd/gaia/init/gentx.go index c8a7c05d2e..9f985762a7 100644 --- a/cmd/gaia/init/gentx.go +++ b/cmd/gaia/init/gentx.go @@ -137,9 +137,12 @@ following delegation and commission default parameters: } // Fetch output file name - outputDocument, err := makeOutputFilepath(config.RootDir, nodeID) - if err != nil { - return err + outputDocument := viper.GetString(client.FlagOutputDocument) + if outputDocument == "" { + outputDocument, err = makeOutputFilepath(config.RootDir, nodeID) + if err != nil { + return err + } } if err := writeSignedGenTx(cdc, outputDocument, signedTx); err != nil { @@ -154,6 +157,8 @@ following delegation and commission default parameters: cmd.Flags().String(tmcli.HomeFlag, app.DefaultNodeHome, "node's home directory") cmd.Flags().String(flagClientHome, app.DefaultCLIHome, "client's home directory") cmd.Flags().String(client.FlagName, "", "name of private key with which to sign the gentx") + cmd.Flags().String(client.FlagOutputDocument, "", + "write the genesis transaction JSON document to the given file instead of the default location") cmd.Flags().AddFlagSet(cli.FsCommissionCreate) cmd.Flags().AddFlagSet(cli.FsAmount) cmd.Flags().AddFlagSet(cli.FsPk) diff --git a/cmd/gaia/init/init.go b/cmd/gaia/init/init.go index 7690d53364..922cfbafa5 100644 --- a/cmd/gaia/init/init.go +++ b/cmd/gaia/init/init.go @@ -28,6 +28,7 @@ type printInfo struct { Moniker string `json:"moniker"` ChainID string `json:"chain_id"` NodeID string `json:"node_id"` + GenTxsDir string `json:"gentxs_dir"` AppMessage json.RawMessage `json:"app_message"` } @@ -77,12 +78,7 @@ func InitCmd(ctx *server.Context, cdc *codec.Codec) *cobra.Command { return err } - toPrint := printInfo{ - ChainID: chainID, - Moniker: config.Moniker, - NodeID: nodeID, - AppMessage: appState, - } + toPrint := newPrintInfo(config.Moniker, chainID, nodeID, "", appState) cfg.WriteConfigFile(filepath.Join(config.RootDir, "config", "config.toml"), config) diff --git a/cmd/gaia/init/testnet.go b/cmd/gaia/init/testnet.go index cfa3e6396a..10b0b8265f 100644 --- a/cmd/gaia/init/testnet.go +++ b/cmd/gaia/init/testnet.go @@ -279,13 +279,7 @@ func collectGenFiles( config.SetRoot(nodeDir) nodeID, valPubKey := nodeIDs[i], valPubKeys[i] - initCfg := initConfig{ - ChainID: chainID, - GenTxsDir: gentxsDir, - Name: moniker, - NodeID: nodeID, - ValPubKey: valPubKey, - } + initCfg := newInitConfig(chainID, gentxsDir, moniker, nodeID, valPubKey) genDoc, err := loadGenesisDoc(cdc, config.GenesisFile()) if err != nil { diff --git a/x/stake/client/cli/flags.go b/x/stake/client/cli/flags.go index d571bef9eb..97a62ebd99 100644 --- a/x/stake/client/cli/flags.go +++ b/x/stake/client/cli/flags.go @@ -29,8 +29,6 @@ const ( FlagGenesisFormat = "genesis-format" FlagNodeID = "node-id" FlagIP = "ip" - - FlagOutputDocument = "output-document" // inspired by wget -O ) // common flagsets to add to various functions