func main() { fmt.Println("Usage:") fmt.Println("BlockExtractor level/bolt [ChainID-To-Extract]") fmt.Println("Leave out the last one to export basic chains (A, D, EC, F)") if len(os.Args) < 1 { fmt.Println("\nNot enough arguments passed") os.Exit(1) } if len(os.Args) > 2 { fmt.Println("\nToo many arguments passed") os.Exit(1) } levelBolt := os.Args[1] if levelBolt != level && levelBolt != bolt { fmt.Println("\nFirst argument should be `level` or `bolt`") os.Exit(1) } chainID := "" if len(os.Args) == 3 { chainID = os.Args[2] } state := new(state.State) state.Cfg = util.ReadConfig("") if levelBolt == level { err := state.InitLevelDB() if err != nil { panic(err) } } if levelBolt == bolt { err := state.InitBoltDB() if err != nil { panic(err) } } dbo := state.GetDB() if chainID != "" { err := ExportEChain(chainID, dbo) if err != nil { panic(err) } } else { err := ExportDChain(dbo) if err != nil { panic(err) } err = ExportECChain(dbo) if err != nil { panic(err) } err = ExportAChain(dbo) if err != nil { panic(err) } err = ExportFctChain(dbo) if err != nil { panic(err) } err = ExportDirBlockInfo(dbo) if err != nil { panic(err) } } }
func main() { log.Print("//////////////////////// Copyright 2015 Factom Foundation") log.Print("//////////////////////// Use of this source code is governed by the MIT") log.Print("//////////////////////// license that can be found in the LICENSE file.") log.Printf("Go compiler version: %s\n", runtime.Version()) log.Printf("Using build: %s\n", Build) if !isCompilerVersionOK() { for i := 0; i < 30; i++ { fmt.Println("!!! !!! !!! ERROR: unsupported compiler version !!! !!! !!!") } time.Sleep(3 * time.Second) os.Exit(1) } cfgFilename := "" state := new(state.State) state.Init(cfgFilename) runtime.GOMAXPROCS(runtime.NumCPU()) if err := limits.SetLimits(); err != nil { os.Exit(1) } btcd.AddInterruptHandler(func() { log.Printf("Gracefully shutting down the database...") state.GetDB().(interfaces.IDatabase).Close() }) log.Print("Starting server") server, _ := btcd.NewServer(state) btcd.AddInterruptHandler(func() { log.Printf("Gracefully shutting down the server...") server.Stop() server.WaitForShutdown() }) server.Start() state.SetServer(server) //factomForkInit(server) go NetworkProcessor(state) go Timer(state) go Validator(state) go Leader(state) go Follower(state) go wsapi.Start(state) shutdownChannel := make(chan struct{}) go func() { server.WaitForShutdown() log.Printf("Server shutdown complete") shutdownChannel <- struct{}{} }() // Wait for shutdown signal from either a graceful server stop or from // the interrupt handler. <-shutdownChannel log.Printf("Shutdown complete") }