github.com/cosmos/cosmos-sdk@v0.50.10/x/genutil/client/cli/collect.go (about)

     1  package cli
     2  
     3  import (
     4  	"encoding/json"
     5  	"path/filepath"
     6  
     7  	"github.com/spf13/cobra"
     8  
     9  	"cosmossdk.io/errors"
    10  
    11  	"github.com/cosmos/cosmos-sdk/client"
    12  	"github.com/cosmos/cosmos-sdk/client/flags"
    13  	"github.com/cosmos/cosmos-sdk/runtime"
    14  	"github.com/cosmos/cosmos-sdk/server"
    15  	"github.com/cosmos/cosmos-sdk/x/genutil"
    16  	"github.com/cosmos/cosmos-sdk/x/genutil/types"
    17  )
    18  
    19  const flagGenTxDir = "gentx-dir"
    20  
    21  // CollectGenTxsCmd - return the cobra command to collect genesis transactions
    22  func CollectGenTxsCmd(genBalIterator types.GenesisBalancesIterator, defaultNodeHome string, validator types.MessageValidator, valAddrCodec runtime.ValidatorAddressCodec) *cobra.Command {
    23  	cmd := &cobra.Command{
    24  		Use:   "collect-gentxs",
    25  		Short: "Collect genesis txs and output a genesis.json file",
    26  		RunE: func(cmd *cobra.Command, _ []string) error {
    27  			serverCtx := server.GetServerContextFromCmd(cmd)
    28  			config := serverCtx.Config
    29  
    30  			clientCtx := client.GetClientContextFromCmd(cmd)
    31  			cdc := clientCtx.Codec
    32  
    33  			config.SetRoot(clientCtx.HomeDir)
    34  
    35  			nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(config)
    36  			if err != nil {
    37  				return errors.Wrap(err, "failed to initialize node validator files")
    38  			}
    39  
    40  			appGenesis, err := types.AppGenesisFromFile(config.GenesisFile())
    41  			if err != nil {
    42  				return errors.Wrap(err, "failed to read genesis doc from file")
    43  			}
    44  
    45  			genTxDir, _ := cmd.Flags().GetString(flagGenTxDir)
    46  			genTxsDir := genTxDir
    47  			if genTxsDir == "" {
    48  				genTxsDir = filepath.Join(config.RootDir, "config", "gentx")
    49  			}
    50  
    51  			toPrint := newPrintInfo(config.Moniker, appGenesis.ChainID, nodeID, genTxsDir, json.RawMessage(""))
    52  			initCfg := types.NewInitConfig(appGenesis.ChainID, genTxsDir, nodeID, valPubKey)
    53  
    54  			appMessage, err := genutil.GenAppStateFromConfig(cdc, clientCtx.TxConfig, config, initCfg, appGenesis, genBalIterator, validator, valAddrCodec)
    55  			if err != nil {
    56  				return errors.Wrap(err, "failed to get genesis app state from config")
    57  			}
    58  
    59  			toPrint.AppMessage = appMessage
    60  
    61  			return displayInfo(toPrint)
    62  		},
    63  	}
    64  
    65  	cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
    66  	cmd.Flags().String(flagGenTxDir, "", "override default \"gentx\" directory from which collect and execute genesis transactions; default [--home]/config/gentx/")
    67  
    68  	return cmd
    69  }