// NOTE: this is totally unsafe. // it's only suitable for testnets. func cliResetPriv(cmd *cobra.Command, args []string) { // Get PrivValidator pvFile := config.GetString("priv_validator_file") if _, err := os.Stat(pvFile); err != nil { Exit(err) } pV := types.LoadPrivValidator(pvFile) pV.LastHeight, pV.LastRound, pV.LastStep = 0, 0, 0 pV.Save() fmt.Println("Reset PrivValidator", pvFile) }
func testCoreRandom(N int) error { chainID := "test_chainID" genBytes, privVals, err := coreRandom(N, chainID) if err != nil { return err } if len(privVals) != N { return fmt.Errorf("len(privVals) != N") } // make sure each validator is in the genesis and all genesi are the same for i, v := range privVals { dirFlag := DirFlag if N > 1 { dirFlag = path.Join(DirFlag, fmt.Sprintf("%s_%d", chainID, i)) } b, err := ioutil.ReadFile(path.Join(dirFlag, "genesis.json")) if err != nil { return err } if !bytes.Equal(b, genBytes) { return fmt.Errorf("written genesis.json different from returned by coreRandom") } db := dbm.NewMemDB() gDoc, _ := sm.MakeGenesisStateFromFile(db, path.Join(dirFlag, "genesis.json")) if len(gDoc.Validators) != N { return fmt.Errorf("Expected %d validators. Got %d", N, len(gDoc.Validators)) } privVal := types.LoadPrivValidator(path.Join(dirFlag, "priv_validator.json")) if !bytes.Equal(privVal.Address, v.Address) { return fmt.Errorf("priv_validator file contents different than result of coreRandom") } var found bool for _, val := range gDoc.Validators { if bytes.Equal(val.UnbondTo[0].Address, privVal.Address) { found = true } } if !found { return fmt.Errorf("failed to find validator %d:%X in genesis.json", i, v.Address) } } return nil }