func run(ctx *cli.Context) { utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name)) if ctx.GlobalBool(utils.OlympicFlag.Name) { utils.InitOlympic() } cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) cfg.ExtraData = makeDefaultExtra() expanse, err := exp.New(cfg) if err != nil { utils.Fatalf("%v", err) } startEth(ctx, expanse) // this blocks the thread expanse.WaitForShutdown() }
func blockRecovery(ctx *cli.Context) { if len(ctx.Args()) < 1 { glog.Fatal("recover requires block number or hash") } arg := ctx.Args().First() cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) blockDb, err := ethdb.NewLDBDatabase(filepath.Join(cfg.DataDir, "blockchain"), cfg.DatabaseCache) if err != nil { glog.Fatalln("could not open db:", err) } var block *types.Block if arg[0] == '#' { block = core.GetBlock(blockDb, core.GetCanonicalHash(blockDb, common.String2Big(arg[1:]).Uint64())) } else { block = core.GetBlock(blockDb, common.HexToHash(arg)) } if block == nil { glog.Fatalln("block not found. Recovery failed") } if err = core.WriteHeadBlockHash(blockDb, block.Hash()); err != nil { glog.Fatalln("block write err", err) } glog.Infof("Recovery succesful. New HEAD %x\n", block.Hash()) }
func console(ctx *cli.Context) { cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) cfg.ExtraData = makeExtra(ctx) expanse, err := exp.New(cfg) if err != nil { utils.Fatalf("%v", err) } client := comms.NewInProcClient(codec.JSON) startEth(ctx, expanse) repl := newJSRE( expanse, ctx.GlobalString(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), client, true, nil, ) if ctx.GlobalString(utils.ExecFlag.Name) != "" { repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) } else { repl.welcome() repl.interactive() } expanse.Stop() expanse.WaitForShutdown() }
func execJSFiles(ctx *cli.Context) { utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name)) cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) expanse, err := exp.New(cfg) if err != nil { utils.Fatalf("%v", err) } client := comms.NewInProcClient(codec.JSON) startEth(ctx, expanse) repl := newJSRE( expanse, ctx.GlobalString(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), client, false, nil, ) for _, file := range ctx.Args() { repl.exec(file) } expanse.Stop() expanse.WaitForShutdown() }
func runOneBlockTest(ctx *cli.Context, test *tests.BlockTest) (*exp.Expanse, error) { cfg := utils.MakeEthConfig(ClientIdentifier, Version, ctx) db, _ := ethdb.NewMemDatabase() cfg.NewDB = func(path string) (ethdb.Database, error) { return db, nil } cfg.MaxPeers = 0 // disable network cfg.Shh = false // disable whisper cfg.NAT = nil // disable port mapping expanse, err := exp.New(cfg) if err != nil { return nil, err } // import the genesis block expanse.ResetWithGenesisBlock(test.Genesis) // import pre accounts _, err = test.InsertPreState(db, cfg.AccountManager) if err != nil { return expanse, fmt.Errorf("InsertPreState: %v", err) } cm := expanse.BlockChain() validBlocks, err := test.TryBlocksInsert(cm) if err != nil { return expanse, fmt.Errorf("Block Test load error: %v", err) } newDB, err := cm.State() if err != nil { return expanse, fmt.Errorf("Block Test get state error: %v", err) } if err := test.ValidatePostState(newDB); err != nil { return expanse, fmt.Errorf("post state validation failed: %v", err) } return expanse, test.ValidateImportedHeaders(cm, validBlocks) }
func run(ctx *cli.Context) { cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) cfg.ExtraData = makeExtra(ctx) expanse, err := exp.New(cfg) if err != nil { utils.Fatalf("%v", err) } startEth(ctx, expanse) // this blocks the thread expanse.WaitForShutdown() }