func runBlockTest(test *BlockTest) error { ks := crypto.NewKeyStorePassphrase(filepath.Join(common.DefaultDataDir(), "keystore"), crypto.StandardScryptN, crypto.StandardScryptP) am := accounts.NewManager(ks) db, _ := ethdb.NewMemDatabase() cfg := &exp.Config{ DataDir: common.DefaultDataDir(), Verbosity: 5, Etherbase: common.Address{}, AccountManager: am, NewDB: func(path string) (ethdb.Database, error) { return db, nil }, } cfg.GenesisBlock = test.Genesis // import pre accounts & construct test genesis block & state root _, err := test.InsertPreState(db, am) if err != nil { return fmt.Errorf("InsertPreState: %v", err) } expanse, err := exp.New(cfg) if err != nil { return err } err = expanse.Start() if err != nil { return err } cm := expanse.BlockChain() //vm.Debug = true validBlocks, err := test.TryBlocksInsert(cm) if err != nil { return err } lastblockhash := common.HexToHash(test.lastblockhash) cmlast := cm.LastBlockHash() if lastblockhash != cmlast { return fmt.Errorf("lastblockhash validation mismatch: want: %x, have: %x", lastblockhash, cmlast) } newDB, err := cm.State() if err != nil { return err } if err = test.ValidatePostState(newDB); err != nil { return fmt.Errorf("post state validation failed: %v", err) } return test.ValidateImportedHeaders(cm, validBlocks) }
// MakeChain creates an account manager from set command line flags. func MakeAccountManager(ctx *cli.Context) *accounts.Manager { dataDir := MustDataDir(ctx) if ctx.GlobalBool(TestNetFlag.Name) { dataDir += "/testnet" } scryptN := crypto.StandardScryptN scryptP := crypto.StandardScryptP if ctx.GlobalBool(LightKDFFlag.Name) { scryptN = crypto.LightScryptN scryptP = crypto.LightScryptP } ks := crypto.NewKeyStorePassphrase(filepath.Join(dataDir, "keystore"), scryptN, scryptP) return accounts.NewManager(ks) }
func testEth(t *testing.T) (expanse *exp.Expanse, err error) { tmp, err := ioutil.TempDir("", "natspec-test") if err != nil { t.Fatal(err) } db, _ := ethdb.NewMemDatabase() addr := common.HexToAddress(testAddress) core.WriteGenesisBlockForTesting(db, core.GenesisAccount{addr, common.String2Big(testBalance)}) ks := crypto.NewKeyStorePassphrase(filepath.Join(tmp, "keystore"), crypto.LightScryptN, crypto.LightScryptP) am := accounts.NewManager(ks) keyb, err := crypto.HexToECDSA(testKey) if err != nil { t.Fatal(err) } key := crypto.NewKeyFromECDSA(keyb) err = ks.StoreKey(key, "") if err != nil { t.Fatal(err) } err = am.Unlock(key.Address, "") if err != nil { t.Fatal(err) } // only use minimalistic stack with no networking return exp.New(&exp.Config{ DataDir: tmp, AccountManager: am, Etherbase: common.HexToAddress(testAddress), MaxPeers: 0, PowTest: true, NewDB: func(path string) (ethdb.Database, error) { return db, nil }, GpoMinGasPrice: common.Big1, GpobaseCorrectionFactor: 1, GpoMaxGasPrice: common.Big1, }) }
func testEth(t *testing.T) (expanse *exp.Expanse, err error) { os.RemoveAll("/tmp/exp-natspec/") err = os.MkdirAll("/tmp/exp-natspec/keystore", os.ModePerm) if err != nil { panic(err) } // create a testAddress ks := crypto.NewKeyStorePassphrase("/tmp/exp-natspec/keystore") am := accounts.NewManager(ks) testAccount, err := am.NewAccount("password") if err != nil { panic(err) } testAddress := strings.TrimPrefix(testAccount.Address.Hex(), "0x") db, _ := ethdb.NewMemDatabase() // set up mock genesis with balance on the testAddress core.WriteGenesisBlockForTesting(db, common.HexToAddress(testAddress), common.String2Big(testBalance)) // only use minimalistic stack with no networking expanse, err = exp.New(&exp.Config{ DataDir: "/tmp/exp-natspec", AccountManager: am, MaxPeers: 0, PowTest: true, Etherbase: common.HexToAddress(testAddress), NewDB: func(path string) (common.Database, error) { return db, nil }, }) if err != nil { panic(err) } return }
// MakeChain creates an account manager from set command line flags. func MakeAccountManager(ctx *cli.Context) *accounts.Manager { dataDir := ctx.GlobalString(DataDirFlag.Name) ks := crypto.NewKeyStorePassphrase(filepath.Join(dataDir, "keystore")) return accounts.NewManager(ks) }