diff --git a/cfg/configfunctions.go b/cfg/configfunctions.go index 6980a55..b21d3b8 100644 --- a/cfg/configfunctions.go +++ b/cfg/configfunctions.go @@ -252,18 +252,23 @@ func UpdateGenesisJson(nodeInfo p2p.NodeInfo, v *viper.Viper, defaultConfigDirec } } -func InitGenesis(chainName, defaultConfigPath string) (*cfg.Config, *viper.Viper) { +func InitGenesis(chainName, defaultConfigPath string) (*cfg.Config, *viper.Viper, error) { config := cfg.DefaultConfig() config.RootDir = filepath.Dir(filepath.Dir(defaultConfigPath)) - nodeinfo := p2p.DefaultNodeInfo{} - viper := WriteConfig(config, &defaultConfigPath, nodeinfo) - if err := InitTendermintFiles(config, true, chainName); err != nil { - fmt.Fprintf(os.Stderr, "Failed to init files: %v\n", err) - panic(err) + // Создаём директорию, если её нет + if err := os.MkdirAll(config.RootDir, 0o755); err != nil { + return nil, nil, fmt.Errorf("failed to create config directory %s: %w", config.RootDir, err) } - return config, viper + nodeinfo := p2p.DefaultNodeInfo{} + viper := WriteConfig(config, &defaultConfigPath, nodeinfo) + + if err := InitTendermintFiles(config, true, chainName); err != nil { + return nil, nil, fmt.Errorf("failed to init tendermint files: %w", err) + } + + return config, viper, nil } func InitJoiner(chainName, defaultConfigPath, path string) error { diff --git a/cli/init.go b/cli/init.go index 2bdab7b..03c6747 100644 --- a/cli/init.go +++ b/cli/init.go @@ -18,7 +18,11 @@ var initCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { switch args[0] { case "genesis": - config, viper := cfg.InitGenesis(chainName, defaultConfigPath) + config, viper, err := cfg.InitGenesis(chainName, defaultConfigPath) + if err != nil { + fmt.Fprintf(os.Stderr, "Error: %v", err) + panic(err) + } nodeinfo, err := blockchain.GetNodeInfo(config, dbPath) if err != nil { fmt.Fprintf(os.Stderr, "Error: %v", err) @@ -30,14 +34,14 @@ var initCmd = &cobra.Command{ case "join": if len(args) < 2 { fmt.Fprintln(os.Stderr, "Укажите путь к genesis.json") - os.Exit(1) + return } cfg.InitJoiner(chainName, defaultConfigPath, args[1]) fmt.Println("Joiner node initialized.") default: fmt.Fprintf(os.Stderr, "Неизвестный режим init: %s\n", args[0]) - os.Exit(1) + return } }, } diff --git a/cli/root.go b/cli/root.go index 007e214..303956c 100644 --- a/cli/root.go +++ b/cli/root.go @@ -44,7 +44,7 @@ var rootCmd = &cobra.Command{ По умолчанию файл конфигурации ищется по пути: %s `, err, defaultConfigPath) - os.Exit(1) + return } config, err := cfg.ReadConfig(defaultConfigPath) @@ -70,7 +70,7 @@ var rootCmd = &cobra.Command{ func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "ошибка: %v\n", err) - os.Exit(1) + return } } diff --git a/cli/testyggdrasil.go b/cli/testyggdrasil.go index df3405e..eca78be 100644 --- a/cli/testyggdrasil.go +++ b/cli/testyggdrasil.go @@ -26,7 +26,7 @@ var testYggdrasilCmd = &cobra.Command{ v, err := cfg.LoadViperConfig(defaultConfigPath) if err != nil { fmt.Fprintf(os.Stderr, "не удалось прочитать конфигурацию viper: %v", err) - os.Exit(1) + return err } config, err := cfg.ReadConfig(defaultConfigPath) if err != nil {