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  }