github.com/Finschia/finschia-sdk@v0.48.1/x/genutil/client/cli/collect.go (about)

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