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