aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/state_test_util.go22
-rw-r--r--tests/util.go34
-rw-r--r--tests/vm_test_util.go18
3 files changed, 26 insertions, 48 deletions
diff --git a/tests/state_test_util.go b/tests/state_test_util.go
index 67e4bf832..3c4b42a18 100644
--- a/tests/state_test_util.go
+++ b/tests/state_test_util.go
@@ -95,14 +95,7 @@ func BenchStateTest(ruleSet RuleSet, p string, conf bconf, b *testing.B) error {
func benchStateTest(ruleSet RuleSet, test VmTest, env map[string]string, b *testing.B) {
b.StopTimer()
db, _ := ethdb.NewMemDatabase()
- statedb, _ := state.New(common.Hash{}, db)
- for addr, account := range test.Pre {
- obj := StateObjectFromAccount(db, addr, account, statedb.MarkStateObjectDirty)
- statedb.SetStateObject(obj)
- for a, v := range account.Storage {
- obj.SetState(common.HexToHash(a), common.HexToHash(v))
- }
- }
+ statedb := makePreState(db, test.Pre)
b.StartTimer()
RunState(ruleSet, statedb, env, test.Exec)
@@ -134,14 +127,7 @@ func runStateTests(ruleSet RuleSet, tests map[string]VmTest, skipTests []string)
func runStateTest(ruleSet RuleSet, test VmTest) error {
db, _ := ethdb.NewMemDatabase()
- statedb, _ := state.New(common.Hash{}, db)
- for addr, account := range test.Pre {
- obj := StateObjectFromAccount(db, addr, account, statedb.MarkStateObjectDirty)
- statedb.SetStateObject(obj)
- for a, v := range account.Storage {
- obj.SetState(common.HexToHash(a), common.HexToHash(v))
- }
- }
+ statedb := makePreState(db, test.Pre)
// XXX Yeah, yeah...
env := make(map[string]string)
@@ -227,7 +213,7 @@ func RunState(ruleSet RuleSet, statedb *state.StateDB, env, tx map[string]string
}
// Set pre compiled contracts
vm.Precompiled = vm.PrecompiledContracts()
- snapshot := statedb.Copy()
+ snapshot := statedb.Snapshot()
gaspool := new(core.GasPool).AddGas(common.Big(env["currentGasLimit"]))
key, _ := hex.DecodeString(tx["secretKey"])
@@ -237,7 +223,7 @@ func RunState(ruleSet RuleSet, statedb *state.StateDB, env, tx map[string]string
vmenv.origin = addr
ret, _, err := core.ApplyMessage(vmenv, message, gaspool)
if core.IsNonceErr(err) || core.IsInvalidTxErr(err) || core.IsGasLimitErr(err) {
- statedb.Set(snapshot)
+ statedb.RevertToSnapshot(snapshot)
}
statedb.Commit()
diff --git a/tests/util.go b/tests/util.go
index ffbcb9d56..8a9d09213 100644
--- a/tests/util.go
+++ b/tests/util.go
@@ -103,19 +103,25 @@ func (self Log) Topics() [][]byte {
return t
}
-func StateObjectFromAccount(db ethdb.Database, addr string, account Account, onDirty func(common.Address)) *state.StateObject {
+func makePreState(db ethdb.Database, accounts map[string]Account) *state.StateDB {
+ statedb, _ := state.New(common.Hash{}, db)
+ for addr, account := range accounts {
+ insertAccount(statedb, addr, account)
+ }
+ return statedb
+}
+
+func insertAccount(state *state.StateDB, saddr string, account Account) {
if common.IsHex(account.Code) {
account.Code = account.Code[2:]
}
- code := common.Hex2Bytes(account.Code)
- codeHash := crypto.Keccak256Hash(code)
- obj := state.NewObject(common.HexToAddress(addr), state.Account{
- Balance: common.Big(account.Balance),
- CodeHash: codeHash[:],
- Nonce: common.Big(account.Nonce).Uint64(),
- }, onDirty)
- obj.SetCode(codeHash, code)
- return obj
+ addr := common.HexToAddress(saddr)
+ state.SetCode(addr, common.Hex2Bytes(account.Code))
+ state.SetNonce(addr, common.Big(account.Nonce).Uint64())
+ state.SetBalance(addr, common.Big(account.Balance))
+ for a, v := range account.Storage {
+ state.SetState(addr, common.HexToHash(a), common.HexToHash(v))
+ }
}
type VmEnv struct {
@@ -229,11 +235,11 @@ func (self *Env) CanTransfer(from common.Address, balance *big.Int) bool {
return self.state.GetBalance(from).Cmp(balance) >= 0
}
-func (self *Env) MakeSnapshot() vm.Database {
- return self.state.Copy()
+func (self *Env) SnapshotDatabase() int {
+ return self.state.Snapshot()
}
-func (self *Env) SetSnapshot(copy vm.Database) {
- self.state.Set(copy.(*state.StateDB))
+func (self *Env) RevertToSnapshot(snapshot int) {
+ self.state.RevertToSnapshot(snapshot)
}
func (self *Env) Transfer(from, to vm.Account, amount *big.Int) {
diff --git a/tests/vm_test_util.go b/tests/vm_test_util.go
index 4ad72d91c..c269f21e0 100644
--- a/tests/vm_test_util.go
+++ b/tests/vm_test_util.go
@@ -101,14 +101,7 @@ func BenchVmTest(p string, conf bconf, b *testing.B) error {
func benchVmTest(test VmTest, env map[string]string, b *testing.B) {
b.StopTimer()
db, _ := ethdb.NewMemDatabase()
- statedb, _ := state.New(common.Hash{}, db)
- for addr, account := range test.Pre {
- obj := StateObjectFromAccount(db, addr, account, statedb.MarkStateObjectDirty)
- statedb.SetStateObject(obj)
- for a, v := range account.Storage {
- obj.SetState(common.HexToHash(a), common.HexToHash(v))
- }
- }
+ statedb := makePreState(db, test.Pre)
b.StartTimer()
RunVm(statedb, env, test.Exec)
@@ -152,14 +145,7 @@ func runVmTests(tests map[string]VmTest, skipTests []string) error {
func runVmTest(test VmTest) error {
db, _ := ethdb.NewMemDatabase()
- statedb, _ := state.New(common.Hash{}, db)
- for addr, account := range test.Pre {
- obj := StateObjectFromAccount(db, addr, account, statedb.MarkStateObjectDirty)
- statedb.SetStateObject(obj)
- for a, v := range account.Storage {
- obj.SetState(common.HexToHash(a), common.HexToHash(v))
- }
- }
+ statedb := makePreState(db, test.Pre)
// XXX Yeah, yeah...
env := make(map[string]string)