func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command {
cmd := &cobra.Command{
Use: "init [moniker]",
Short: "Initialize private validator, p2p, genesis, and application configuration files",
Long: `Initialize validators's and node's configuration files.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx := client.GetClientContextFromCmd(cmd)
cdc := clientCtx.Codec
serverCtx := server.GetServerContextFromCmd(cmd)
config := serverCtx.Config
config.SetRoot(clientCtx.HomeDir)
// Get or generate chain ID
chainID, _ := cmd.Flags().GetString(flags.FlagChainID)
switch {
case chainID != "":
case clientCtx.ChainID != "":
chainID = clientCtx.ChainID
default:
chainID = fmt.Sprintf("test-chain-%v", unsafe.Str(6))
}
// Initialize node validator files
nodeID, _, err := genutil.InitializeNodeValidatorFilesFromMnemonic(
config,
mnemonic,
)
if err != nil {
return err
}
config.Moniker = args[0]
genFile := config.GenesisFile()
// Generate default genesis state
appGenState := mbm.DefaultGenesis(cdc)
appState, err := json.MarshalIndent(appGenState, "", " ")
if err != nil {
return err
}
// Create genesis file
appGenesis := &types.AppGenesis{}
appGenesis.AppName = version.AppName
appGenesis.AppVersion = version.Version
appGenesis.ChainID = chainID
appGenesis.AppState = appState
appGenesis.InitialHeight = initHeight
appGenesis.Consensus = &types.ConsensusGenesis{
Validators: nil,
Params: cmttypes.DefaultConsensusParams(),
}
if err = genutil.ExportGenesisFile(appGenesis, genFile); err != nil {
return err
}
return displayInfo(toPrint)
},
}
cmd.Flags().String(flags.FlagHome, defaultNodeHome, "node's home directory")
cmd.Flags().BoolP(FlagOverwrite, "o", false, "overwrite the genesis.json file")
cmd.Flags().Bool(FlagRecover, false, "provide seed phrase to recover existing key")
cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id")
cmd.Flags().String(FlagDefaultBondDenom, "", "genesis file default denomination")
cmd.Flags().Int64(flags.FlagInitHeight, 1, "specify the initial block height")
return cmd
}