github.com/number571/tendermint@v0.34.11-gost/cmd/tendermint/commands/reset_priv_validator.go (about) 1 package commands 2 3 import ( 4 "os" 5 6 "github.com/spf13/cobra" 7 8 "github.com/number571/tendermint/libs/log" 9 tmos "github.com/number571/tendermint/libs/os" 10 "github.com/number571/tendermint/privval" 11 "github.com/number571/tendermint/types" 12 13 "github.com/number571/tendermint/crypto/gost512" 14 ) 15 16 // ResetAllCmd removes the database of this Tendermint core 17 // instance. 18 var ResetAllCmd = &cobra.Command{ 19 Use: "unsafe-reset-all", 20 Aliases: []string{"unsafe_reset_all"}, 21 Short: "(unsafe) Remove all the data and WAL, reset this node's validator to genesis state", 22 RunE: resetAll, 23 PreRun: deprecateSnakeCase, 24 } 25 26 var keepAddrBook bool 27 28 func init() { 29 ResetAllCmd.Flags().BoolVar(&keepAddrBook, "keep-addr-book", false, "keep the address book intact") 30 ResetPrivValidatorCmd.Flags().StringVar(&keyType, "key", types.ABCIPubKeyTypeGost512, 31 "Key type to generate privval file with. Options: '"+gost512.KeyType+"', '"+gost512.KeyType+"'") 32 } 33 34 // ResetPrivValidatorCmd resets the private validator files. 35 var ResetPrivValidatorCmd = &cobra.Command{ 36 Use: "unsafe-reset-priv-validator", 37 Aliases: []string{"unsafe_reset_priv_validator"}, 38 Short: "(unsafe) Reset this node's validator to genesis state", 39 RunE: resetPrivValidator, 40 PreRun: deprecateSnakeCase, 41 } 42 43 // XXX: this is totally unsafe. 44 // it's only suitable for testnets. 45 func resetAll(cmd *cobra.Command, args []string) error { 46 return ResetAll(config.DBDir(), config.P2P.AddrBookFile(), config.PrivValidator.KeyFile(), 47 config.PrivValidator.StateFile(), logger) 48 } 49 50 // XXX: this is totally unsafe. 51 // it's only suitable for testnets. 52 func resetPrivValidator(cmd *cobra.Command, args []string) error { 53 return resetFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile(), logger) 54 } 55 56 // ResetAll removes address book files plus all data, and resets the privValdiator data. 57 // Exported so other CLI tools can use it. 58 func ResetAll(dbDir, addrBookFile, privValKeyFile, privValStateFile string, logger log.Logger) error { 59 if keepAddrBook { 60 logger.Info("The address book remains intact") 61 } else { 62 removeAddrBook(addrBookFile, logger) 63 } 64 if err := os.RemoveAll(dbDir); err == nil { 65 logger.Info("Removed all blockchain history", "dir", dbDir) 66 } else { 67 logger.Error("Error removing all blockchain history", "dir", dbDir, "err", err) 68 } 69 // recreate the dbDir since the privVal state needs to live there 70 if err := tmos.EnsureDir(dbDir, 0700); err != nil { 71 logger.Error("unable to recreate dbDir", "err", err) 72 } 73 return resetFilePV(privValKeyFile, privValStateFile, logger) 74 } 75 76 func resetFilePV(privValKeyFile, privValStateFile string, logger log.Logger) error { 77 if _, err := os.Stat(privValKeyFile); err == nil { 78 pv, err := privval.LoadFilePVEmptyState(privValKeyFile, privValStateFile) 79 if err != nil { 80 return err 81 } 82 pv.Reset() 83 logger.Info("Reset private validator file to genesis state", "keyFile", privValKeyFile, 84 "stateFile", privValStateFile) 85 } else { 86 pv, err := privval.GenFilePV(privValKeyFile, privValStateFile, keyType) 87 if err != nil { 88 return err 89 } 90 pv.Save() 91 logger.Info("Generated private validator file", "keyFile", privValKeyFile, 92 "stateFile", privValStateFile) 93 } 94 return nil 95 } 96 97 func removeAddrBook(addrBookFile string, logger log.Logger) { 98 if err := os.Remove(addrBookFile); err == nil { 99 logger.Info("Removed existing address book", "file", addrBookFile) 100 } else if !os.IsNotExist(err) { 101 logger.Info("Error removing address book", "file", addrBookFile, "err", err) 102 } 103 }