From 266d21209478bdb8c89e1ffb95d7f0de34635968 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 15 Oct 2014 00:41:00 +0200 Subject: Working on test suite --- tests/helper/common.go | 11 +++++++++ tests/helper/http.go | 24 ++++++++++++++++++ tests/helper/init.go | 15 ++++++++++++ tests/helper/trie.go | 31 ++++++++++++++++++++++++ tests/helper/vm.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 147 insertions(+) create mode 100644 tests/helper/common.go create mode 100644 tests/helper/http.go create mode 100644 tests/helper/init.go create mode 100644 tests/helper/trie.go create mode 100644 tests/helper/vm.go (limited to 'tests/helper') diff --git a/tests/helper/common.go b/tests/helper/common.go new file mode 100644 index 000000000..3d539ebb0 --- /dev/null +++ b/tests/helper/common.go @@ -0,0 +1,11 @@ +package helper + +import "github.com/ethereum/eth-go/ethutil" + +func FromHex(h string) []byte { + if ethutil.IsHex(h) { + h = h[2:] + } + + return ethutil.Hex2Bytes(h) +} diff --git a/tests/helper/http.go b/tests/helper/http.go new file mode 100644 index 000000000..b379695d0 --- /dev/null +++ b/tests/helper/http.go @@ -0,0 +1,24 @@ +package helper + +import ( + "encoding/json" + "io/ioutil" + "net/http" +) + +func CreateTests(uri string, value interface{}) error { + resp, err := http.Get(uri) + if err != nil { + panic(err) + } + defer resp.Body.Close() + + data, err := ioutil.ReadAll(resp.Body) + + err = json.Unmarshal(data, &value) + if err != nil { + return err + } + + return nil +} diff --git a/tests/helper/init.go b/tests/helper/init.go new file mode 100644 index 000000000..1f2ee208a --- /dev/null +++ b/tests/helper/init.go @@ -0,0 +1,15 @@ +package helper + +import ( + "log" + "os" + + "github.com/ethereum/eth-go/ethlog" + "github.com/ethereum/eth-go/ethutil" +) + +func init() { + ethlog.AddLogSystem(ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(4))) + + ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") +} diff --git a/tests/helper/trie.go b/tests/helper/trie.go new file mode 100644 index 000000000..af828685c --- /dev/null +++ b/tests/helper/trie.go @@ -0,0 +1,31 @@ +package helper + +import "github.com/ethereum/eth-go/ethtrie" + +type MemDatabase struct { + db map[string][]byte +} + +func NewMemDatabase() (*MemDatabase, error) { + db := &MemDatabase{db: make(map[string][]byte)} + return db, nil +} +func (db *MemDatabase) Put(key []byte, value []byte) { + db.db[string(key)] = value +} +func (db *MemDatabase) Get(key []byte) ([]byte, error) { + return db.db[string(key)], nil +} +func (db *MemDatabase) Delete(key []byte) error { + delete(db.db, string(key)) + return nil +} +func (db *MemDatabase) Print() {} +func (db *MemDatabase) Close() {} +func (db *MemDatabase) LastKnownTD() []byte { return nil } + +func NewTrie() *ethtrie.Trie { + db, _ := NewMemDatabase() + + return ethtrie.New(db, "") +} diff --git a/tests/helper/vm.go b/tests/helper/vm.go new file mode 100644 index 000000000..49a0bfeae --- /dev/null +++ b/tests/helper/vm.go @@ -0,0 +1,66 @@ +package helper + +import ( + "fmt" + "math/big" + + "github.com/ethereum/eth-go/ethstate" + "github.com/ethereum/eth-go/ethtrie" + "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/eth-go/ethvm" +) + +type Env struct { + state *ethstate.State + + origin []byte + parent []byte + coinbase []byte + + number *big.Int + time int64 + difficulty *big.Int +} + +func NewEnv(state *ethstate.State) *Env { + return &Env{ + state: state, + } +} + +func NewEnvFromMap(state *ethstate.State, envValues map[string]string, exeValues map[string]string) *Env { + env := NewEnv(state) + + env.origin = ethutil.Hex2Bytes(exeValues["caller"]) + env.parent = ethutil.Hex2Bytes(envValues["previousHash"]) + env.coinbase = ethutil.Hex2Bytes(envValues["currentCoinbase"]) + env.number = ethutil.Big(envValues["currentNumber"]) + env.time = ethutil.Big(envValues["currentTime"]).Int64() + + return env +} + +func (self *Env) Origin() []byte { return self.origin } +func (self *Env) BlockNumber() *big.Int { return self.number } +func (self *Env) PrevHash() []byte { return self.parent } +func (self *Env) Coinbase() []byte { return self.coinbase } +func (self *Env) Time() int64 { return self.time } +func (self *Env) Difficulty() *big.Int { return self.difficulty } +func (self *Env) BlockHash() []byte { return nil } + +// This is likely to fail if anything ever gets looked up in the state trie :-) +func (self *Env) State() *ethstate.State { return ethstate.New(ethtrie.New(nil, "")) } + +func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int) { + caller := state.NewStateObject(ethutil.Hex2Bytes(exec["caller"])) + callee := state.GetStateObject(ethutil.Hex2Bytes(exec["address"])) + closure := ethvm.NewClosure(nil, caller, callee, callee.Code, ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"])) + + vm := ethvm.New(NewEnvFromMap(state, env, exec), ethvm.DebugVmTy) + ret, _, e := closure.Call(vm, nil) + if e != nil { + fmt.Println(e) + } + + return ret, closure.Gas +} -- cgit v1.2.3 From 311c6f8a3fed5ac03ee4b442fd0f420072bc41b4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 15 Oct 2014 17:12:26 +0200 Subject: Fixed remote Arithmetic tests --- tests/helper/http.go | 11 ++++++----- tests/helper/init.go | 5 ++++- tests/helper/vm.go | 8 ++------ 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/http.go b/tests/helper/http.go index b379695d0..3c570d106 100644 --- a/tests/helper/http.go +++ b/tests/helper/http.go @@ -4,12 +4,15 @@ import ( "encoding/json" "io/ioutil" "net/http" + "testing" ) -func CreateTests(uri string, value interface{}) error { +func CreateTests(t *testing.T, uri string, value interface{}) { resp, err := http.Get(uri) if err != nil { - panic(err) + t.Error(err) + + return } defer resp.Body.Close() @@ -17,8 +20,6 @@ func CreateTests(uri string, value interface{}) error { err = json.Unmarshal(data, &value) if err != nil { - return err + t.Error(err) } - - return nil } diff --git a/tests/helper/init.go b/tests/helper/init.go index 1f2ee208a..5f95dfc2f 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -8,8 +8,11 @@ import ( "github.com/ethereum/eth-go/ethutil" ) +var Logger ethlog.LogSystem + func init() { - ethlog.AddLogSystem(ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(4))) + Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(4)) + ethlog.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") } diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 49a0bfeae..44eb8fda1 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -1,7 +1,6 @@ package helper import ( - "fmt" "math/big" "github.com/ethereum/eth-go/ethstate" @@ -51,16 +50,13 @@ func (self *Env) BlockHash() []byte { return nil } // This is likely to fail if anything ever gets looked up in the state trie :-) func (self *Env) State() *ethstate.State { return ethstate.New(ethtrie.New(nil, "")) } -func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int) { +func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { caller := state.NewStateObject(ethutil.Hex2Bytes(exec["caller"])) callee := state.GetStateObject(ethutil.Hex2Bytes(exec["address"])) closure := ethvm.NewClosure(nil, caller, callee, callee.Code, ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"])) vm := ethvm.New(NewEnvFromMap(state, env, exec), ethvm.DebugVmTy) ret, _, e := closure.Call(vm, nil) - if e != nil { - fmt.Println(e) - } - return ret, closure.Gas + return ret, closure.Gas, e } -- cgit v1.2.3 From 65cdb3436e599cfff0fd91045d4c81c26a5f61c1 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 16 Oct 2014 13:40:46 +0200 Subject: Updated tests --- tests/helper/vm.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 44eb8fda1..4a0d2f8b1 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -4,7 +4,6 @@ import ( "math/big" "github.com/ethereum/eth-go/ethstate" - "github.com/ethereum/eth-go/ethtrie" "github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethvm" ) @@ -39,19 +38,17 @@ func NewEnvFromMap(state *ethstate.State, envValues map[string]string, exeValues return env } -func (self *Env) Origin() []byte { return self.origin } -func (self *Env) BlockNumber() *big.Int { return self.number } -func (self *Env) PrevHash() []byte { return self.parent } -func (self *Env) Coinbase() []byte { return self.coinbase } -func (self *Env) Time() int64 { return self.time } -func (self *Env) Difficulty() *big.Int { return self.difficulty } -func (self *Env) BlockHash() []byte { return nil } - -// This is likely to fail if anything ever gets looked up in the state trie :-) -func (self *Env) State() *ethstate.State { return ethstate.New(ethtrie.New(nil, "")) } +func (self *Env) Origin() []byte { return self.origin } +func (self *Env) BlockNumber() *big.Int { return self.number } +func (self *Env) PrevHash() []byte { return self.parent } +func (self *Env) Coinbase() []byte { return self.coinbase } +func (self *Env) Time() int64 { return self.time } +func (self *Env) Difficulty() *big.Int { return self.difficulty } +func (self *Env) BlockHash() []byte { return nil } +func (self *Env) State() *ethstate.State { return self.state } func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { - caller := state.NewStateObject(ethutil.Hex2Bytes(exec["caller"])) + caller := state.GetOrNewStateObject(ethutil.Hex2Bytes(exec["caller"])) callee := state.GetStateObject(ethutil.Hex2Bytes(exec["address"])) closure := ethvm.NewClosure(nil, caller, callee, callee.Code, ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"])) -- cgit v1.2.3 From 93fcabd25189b447cc5c52523134cca2fa1d794e Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 16 Oct 2014 18:27:05 +0200 Subject: Fixed most of the tests --- tests/helper/init.go | 3 ++- tests/helper/vm.go | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/init.go b/tests/helper/init.go index 5f95dfc2f..7c34913fc 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -9,9 +9,10 @@ import ( ) var Logger ethlog.LogSystem +var Log = ethlog.NewLogger("TEST") func init() { - Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(4)) + Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(0)) ethlog.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 4a0d2f8b1..da06b2cc2 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -18,6 +18,7 @@ type Env struct { number *big.Int time int64 difficulty *big.Int + gasLimit *big.Int } func NewEnv(state *ethstate.State) *Env { @@ -33,7 +34,9 @@ func NewEnvFromMap(state *ethstate.State, envValues map[string]string, exeValues env.parent = ethutil.Hex2Bytes(envValues["previousHash"]) env.coinbase = ethutil.Hex2Bytes(envValues["currentCoinbase"]) env.number = ethutil.Big(envValues["currentNumber"]) - env.time = ethutil.Big(envValues["currentTime"]).Int64() + env.time = ethutil.Big(envValues["currentTimestamp"]).Int64() + env.difficulty = ethutil.Big(envValues["currentDifficulty"]) + env.gasLimit = ethutil.Big(envValues["currentGasLimit"]) return env } @@ -46,14 +49,17 @@ func (self *Env) Time() int64 { return self.time } func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *ethstate.State { return self.state } +func (self *Env) GasLimit() *big.Int { return self.gasLimit } func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { - caller := state.GetOrNewStateObject(ethutil.Hex2Bytes(exec["caller"])) - callee := state.GetStateObject(ethutil.Hex2Bytes(exec["address"])) - closure := ethvm.NewClosure(nil, caller, callee, callee.Code, ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"])) + address := FromHex(exec["address"]) + caller := state.GetOrNewStateObject(FromHex(exec["caller"])) + caller.Balance = ethutil.Big(exec["value"]) vm := ethvm.New(NewEnvFromMap(state, env, exec), ethvm.DebugVmTy) - ret, _, e := closure.Call(vm, nil) - return ret, closure.Gas, e + execution := ethvm.NewExecution(vm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) + ret, err := execution.Exec(address, caller) + + return ret, execution.Gas, err } -- cgit v1.2.3 From d7736a7bbbf3d832dd108253fa5dea1de2cb9363 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 17 Oct 2014 17:11:34 +0200 Subject: Quick dirty peer update --- tests/helper/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/init.go b/tests/helper/init.go index 7c34913fc..a84a7749f 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -12,7 +12,7 @@ var Logger ethlog.LogSystem var Log = ethlog.NewLogger("TEST") func init() { - Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(0)) + Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(3)) ethlog.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") -- cgit v1.2.3 From cbd785cfe8801c240bbaaa6f21ebf3ab7045e4a3 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 16 Oct 2014 10:47:12 +0200 Subject: ethvm, tests/*: use log level constants --- tests/helper/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/init.go b/tests/helper/init.go index a84a7749f..3de5c50eb 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -12,7 +12,7 @@ var Logger ethlog.LogSystem var Log = ethlog.NewLogger("TEST") func init() { - Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(3)) + Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.InfoLevel) ethlog.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") -- cgit v1.2.3 From 3ea0e904ad4e6473685c319dcf4bcb81b35213db Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 18 Oct 2014 13:33:02 +0200 Subject: Reflect changed to eth/vm --- tests/helper/vm.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index da06b2cc2..a3d54de23 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -5,7 +5,7 @@ import ( "github.com/ethereum/eth-go/ethstate" "github.com/ethereum/eth-go/ethutil" - "github.com/ethereum/eth-go/ethvm" + "github.com/ethereum/eth-go/vm" ) type Env struct { @@ -56,9 +56,9 @@ func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int caller := state.GetOrNewStateObject(FromHex(exec["caller"])) caller.Balance = ethutil.Big(exec["value"]) - vm := ethvm.New(NewEnvFromMap(state, env, exec), ethvm.DebugVmTy) + evm := vm.New(NewEnvFromMap(state, env, exec), vm.DebugVmTy) - execution := ethvm.NewExecution(vm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) + execution := vm.NewExecution(evm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) ret, err := execution.Exec(address, caller) return ret, execution.Gas, err -- cgit v1.2.3 From 3bc64b6b6edf380aaa145e612988a4aa640e0d23 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 18 Oct 2014 23:20:25 +0200 Subject: Readers --- tests/helper/http.go | 25 ------------------------- tests/helper/readers.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 25 deletions(-) delete mode 100644 tests/helper/http.go create mode 100644 tests/helper/readers.go (limited to 'tests/helper') diff --git a/tests/helper/http.go b/tests/helper/http.go deleted file mode 100644 index 3c570d106..000000000 --- a/tests/helper/http.go +++ /dev/null @@ -1,25 +0,0 @@ -package helper - -import ( - "encoding/json" - "io/ioutil" - "net/http" - "testing" -) - -func CreateTests(t *testing.T, uri string, value interface{}) { - resp, err := http.Get(uri) - if err != nil { - t.Error(err) - - return - } - defer resp.Body.Close() - - data, err := ioutil.ReadAll(resp.Body) - - err = json.Unmarshal(data, &value) - if err != nil { - t.Error(err) - } -} diff --git a/tests/helper/readers.go b/tests/helper/readers.go new file mode 100644 index 000000000..03313aeda --- /dev/null +++ b/tests/helper/readers.go @@ -0,0 +1,42 @@ +package helper + +import ( + "encoding/json" + "io" + "io/ioutil" + "net/http" + "os" + "testing" +) + +func readJSON(t *testing.T, reader io.Reader, value interface{}) { + data, err := ioutil.ReadAll(reader) + err = json.Unmarshal(data, &value) + if err != nil { + t.Error(err) + } +} + +func CreateHttpTests(t *testing.T, uri string, value interface{}) { + resp, err := http.Get(uri) + if err != nil { + t.Error(err) + + return + } + defer resp.Body.Close() + + readJSON(t, resp.Body, value) +} + +func CreateFileTests(t *testing.T, fn string, value interface{}) { + file, err := os.Open(fn) + if err != nil { + t.Error(err) + + return + } + defer file.Close() + + readJSON(t, file, value) +} -- cgit v1.2.3 From b5beb1aac11af92bfe0f3ed7560b9eb08495ed09 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 22 Oct 2014 15:22:21 +0200 Subject: added a transfer method to vm env --- tests/helper/vm.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index a3d54de23..06c3d4eca 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -50,11 +50,14 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *ethstate.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } +func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { + return nil +} func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { address := FromHex(exec["address"]) caller := state.GetOrNewStateObject(FromHex(exec["caller"])) - caller.Balance = ethutil.Big(exec["value"]) + caller.SetBalance(ethutil.Big(exec["value"])) evm := vm.New(NewEnvFromMap(state, env, exec), vm.DebugVmTy) -- cgit v1.2.3 From 29b8a0bc5ffa7a674a06a211e1c8bdd1b6ed07b1 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 23 Oct 2014 01:01:26 +0200 Subject: Updated the VM & VM tests * Stack Error shouldn't revert to previous state * Updated VM Test tool * Added Transfer method to VM Env --- tests/helper/vm.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 06c3d4eca..f70ce48a6 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -51,17 +51,16 @@ func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *ethstate.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { - return nil + return vm.Transfer(from, to, amount) } func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { address := FromHex(exec["address"]) caller := state.GetOrNewStateObject(FromHex(exec["caller"])) - caller.SetBalance(ethutil.Big(exec["value"])) evm := vm.New(NewEnvFromMap(state, env, exec), vm.DebugVmTy) - execution := vm.NewExecution(evm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) + execution.SkipTransfer = true ret, err := execution.Exec(address, caller) return ret, execution.Gas, err -- cgit v1.2.3 From 272d58662c885ab1cef8930e96fb832ae5377d96 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 27 Oct 2014 11:44:16 +0100 Subject: Implemented LOG. Closes #159 --- tests/helper/vm.go | 1 + 1 file changed, 1 insertion(+) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 5660caf64..c56c5bae7 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -50,6 +50,7 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *ethstate.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } +func (self *Env) AddLog(vm.Log) {} func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -- cgit v1.2.3 From f3473312ba90b37b9a4100592a8c4d5d5bf245b7 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 31 Oct 2014 18:40:32 +0100 Subject: all: fix rename breakage --- tests/helper/init.go | 10 +++++----- tests/helper/trie.go | 6 +++--- tests/helper/vm.go | 30 +++++++++++++++--------------- 3 files changed, 23 insertions(+), 23 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/init.go b/tests/helper/init.go index 896ed5fe0..df98b9e42 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -4,16 +4,16 @@ import ( "log" "os" - "github.com/ethereum/go-ethereum/ethlog" "github.com/ethereum/go-ethereum/ethutil" + logpkg "github.com/ethereum/go-ethereum/logger" ) -var Logger ethlog.LogSystem -var Log = ethlog.NewLogger("TEST") +var Logger logpkg.LogSystem +var Log = logpkg.NewLogger("TEST") func init() { - Logger = ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.InfoLevel) - ethlog.AddLogSystem(Logger) + Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.InfoLevel) + logpkg.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") } diff --git a/tests/helper/trie.go b/tests/helper/trie.go index 119bac713..32432cc7a 100644 --- a/tests/helper/trie.go +++ b/tests/helper/trie.go @@ -1,6 +1,6 @@ package helper -import "github.com/ethereum/go-ethereum/ethtrie" +import "github.com/ethereum/go-ethereum/trie" type MemDatabase struct { db map[string][]byte @@ -24,8 +24,8 @@ func (db *MemDatabase) Print() {} func (db *MemDatabase) Close() {} func (db *MemDatabase) LastKnownTD() []byte { return nil } -func NewTrie() *ethtrie.Trie { +func NewTrie() *trie.Trie { db, _ := NewMemDatabase() - return ethtrie.New(db, "") + return trie.New(db, "") } diff --git a/tests/helper/vm.go b/tests/helper/vm.go index c56c5bae7..4827dfdee 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -3,13 +3,13 @@ package helper import ( "math/big" - "github.com/ethereum/go-ethereum/ethstate" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) type Env struct { - state *ethstate.State + state *state.State origin []byte parent []byte @@ -21,13 +21,13 @@ type Env struct { gasLimit *big.Int } -func NewEnv(state *ethstate.State) *Env { +func NewEnv(state *state.State) *Env { return &Env{ state: state, } } -func NewEnvFromMap(state *ethstate.State, envValues map[string]string, exeValues map[string]string) *Env { +func NewEnvFromMap(state *state.State, envValues map[string]string, exeValues map[string]string) *Env { env := NewEnv(state) env.origin = ethutil.Hex2Bytes(exeValues["caller"]) @@ -41,21 +41,21 @@ func NewEnvFromMap(state *ethstate.State, envValues map[string]string, exeValues return env } -func (self *Env) Origin() []byte { return self.origin } -func (self *Env) BlockNumber() *big.Int { return self.number } -func (self *Env) PrevHash() []byte { return self.parent } -func (self *Env) Coinbase() []byte { return self.coinbase } -func (self *Env) Time() int64 { return self.time } -func (self *Env) Difficulty() *big.Int { return self.difficulty } -func (self *Env) BlockHash() []byte { return nil } -func (self *Env) State() *ethstate.State { return self.state } -func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(vm.Log) {} +func (self *Env) Origin() []byte { return self.origin } +func (self *Env) BlockNumber() *big.Int { return self.number } +func (self *Env) PrevHash() []byte { return self.parent } +func (self *Env) Coinbase() []byte { return self.coinbase } +func (self *Env) Time() int64 { return self.time } +func (self *Env) Difficulty() *big.Int { return self.difficulty } +func (self *Env) BlockHash() []byte { return nil } +func (self *Env) State() *state.State { return self.state } +func (self *Env) GasLimit() *big.Int { return self.gasLimit } +func (self *Env) AddLog(vm.Log) {} func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -func RunVm(state *ethstate.State, env, exec map[string]string) ([]byte, *big.Int, error) { +func RunVm(state *state.State, env, exec map[string]string) ([]byte, *big.Int, error) { address := FromHex(exec["address"]) caller := state.GetOrNewStateObject(FromHex(exec["caller"])) -- cgit v1.2.3 From 394e0f60c20206c7f7c4c76551d11a2b14b23a4d Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 31 Oct 2014 18:56:25 +0100 Subject: chain, tests/helper, vm: make tests compile They were broken by df5603de0a34e80a1, when vm.Log became ethstate.Log. --- tests/helper/vm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 4827dfdee..db71fe17e 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -50,7 +50,7 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *state.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(vm.Log) {} +func (self *Env) AddLog(state.Log) {} func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -- cgit v1.2.3 From 64b6172089618645d42babf22fb6c7b8af282239 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 4 Nov 2014 16:43:02 +0100 Subject: added db --- tests/helper/init.go | 1 + 1 file changed, 1 insertion(+) (limited to 'tests/helper') diff --git a/tests/helper/init.go b/tests/helper/init.go index df98b9e42..578314e20 100644 --- a/tests/helper/init.go +++ b/tests/helper/init.go @@ -16,4 +16,5 @@ func init() { logpkg.AddLogSystem(Logger) ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") + ethutil.Config.Db, _ = NewMemDatabase() } -- cgit v1.2.3 From 9bb1ac7564ff0588f33a1eb43e76f40664d9e527 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 11 Nov 2014 23:14:22 +0100 Subject: Fixes for the log method --- tests/helper/vm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index db71fe17e..270fe5470 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -50,7 +50,7 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *state.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(state.Log) {} +func (self *Env) AddLog(*state.Log) {} func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -- cgit v1.2.3 From 2df8ad6307d741d0a6d2f746d53f97c7b27ad796 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 2 Dec 2014 00:03:53 +0100 Subject: Added state tests --- tests/helper/vm.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 270fe5470..b4ad93193 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -3,6 +3,7 @@ package helper import ( "math/big" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" @@ -66,3 +67,17 @@ func RunVm(state *state.State, env, exec map[string]string) ([]byte, *big.Int, e return ret, execution.Gas, err } + +func RunState(state *state.State, env, tx map[string]string) ([]byte, *big.Int, error) { + address := FromHex(tx["to"]) + keyPair, _ := crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) + caller := state.GetOrNewStateObject(keyPair.Address()) + + vmenv := NewEnvFromMap(state, env, tx) + vmenv.origin = caller.Address() + evm := vm.New(vmenv, vm.DebugVmTy) + execution := vm.NewExecution(evm, address, FromHex(tx["data"]), ethutil.Big(tx["gasLimit"]), ethutil.Big(tx["gasPrice"]), ethutil.Big(tx["value"])) + ret, err := execution.Exec(address, caller) + + return ret, execution.Gas, err +} -- cgit v1.2.3 From 3d9a4e7084c33cb28a2265c0dd232a0ea3871c92 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 3 Dec 2014 12:21:12 +0100 Subject: Fixed mem error in vm. Fixed logs tests --- tests/helper/vm.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index b4ad93193..8e6645fc3 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -20,6 +20,8 @@ type Env struct { time int64 difficulty *big.Int gasLimit *big.Int + + logs state.Logs } func NewEnv(state *state.State) *Env { @@ -51,24 +53,27 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *state.State { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(*state.Log) {} +func (self *Env) AddLog(log *state.Log) { + self.logs = append(self.logs, log) +} func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -func RunVm(state *state.State, env, exec map[string]string) ([]byte, *big.Int, error) { +func RunVm(state *state.State, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) { address := FromHex(exec["address"]) caller := state.GetOrNewStateObject(FromHex(exec["caller"])) - evm := vm.New(NewEnvFromMap(state, env, exec), vm.DebugVmTy) + vmenv := NewEnvFromMap(state, env, exec) + evm := vm.New(vmenv, vm.DebugVmTy) execution := vm.NewExecution(evm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) execution.SkipTransfer = true ret, err := execution.Exec(address, caller) - return ret, execution.Gas, err + return ret, vmenv.logs, execution.Gas, err } -func RunState(state *state.State, env, tx map[string]string) ([]byte, *big.Int, error) { +func RunState(state *state.State, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { address := FromHex(tx["to"]) keyPair, _ := crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) caller := state.GetOrNewStateObject(keyPair.Address()) @@ -79,5 +84,5 @@ func RunState(state *state.State, env, tx map[string]string) ([]byte, *big.Int, execution := vm.NewExecution(evm, address, FromHex(tx["data"]), ethutil.Big(tx["gasLimit"]), ethutil.Big(tx["gasPrice"]), ethutil.Big(tx["value"])) ret, err := execution.Exec(address, caller) - return ret, execution.Gas, err + return ret, vmenv.logs, execution.Gas, err } -- cgit v1.2.3 From 99853ac3ce57807deb4822dd324186e1d2ee0821 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 3 Dec 2014 17:06:54 +0100 Subject: Moved execution from vm to chain. This moves call and create to the specified environments. Vms are no longer re-used. Vm uses environment's Call(Code) and Create in order to execute new contracts or transfer value between accounts. State transition now uses the same mechanism described above. --- tests/helper/vm.go | 70 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 14 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 8e6645fc3..6ee50a5ae 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -3,6 +3,7 @@ package helper import ( "math/big" + "github.com/ethereum/go-ethereum/chain" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" @@ -10,7 +11,10 @@ import ( ) type Env struct { - state *state.State + depth int + state *state.State + skipTransfer bool + Gas *big.Int origin []byte parent []byte @@ -56,33 +60,71 @@ func (self *Env) GasLimit() *big.Int { return self.gasLimit } func (self *Env) AddLog(log *state.Log) { self.logs = append(self.logs, log) } +func (self *Env) Depth() int { return self.depth } +func (self *Env) SetDepth(i int) { self.depth = i } func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } +func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *chain.Execution { + evm := vm.New(self, vm.DebugVmTy) + exec := chain.NewExecution(evm, addr, data, gas, price, value) + exec.SkipTransfer = self.skipTransfer + + return exec +} + +func (self *Env) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + ret, err := exe.Call(addr, caller) + self.Gas = exe.Gas + + return ret, err +} +func (self *Env) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(caller.Address(), data, gas, price, value) + return exe.Call(addr, caller) +} + +func (self *Env) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(caller) +} + func RunVm(state *state.State, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) { - address := FromHex(exec["address"]) - caller := state.GetOrNewStateObject(FromHex(exec["caller"])) + var ( + to = FromHex(exec["address"]) + from = FromHex(exec["caller"]) + data = FromHex(exec["data"]) + gas = ethutil.Big(exec["gas"]) + price = ethutil.Big(exec["gasPrice"]) + value = ethutil.Big(exec["value"]) + ) + + caller := state.GetOrNewStateObject(from) vmenv := NewEnvFromMap(state, env, exec) - evm := vm.New(vmenv, vm.DebugVmTy) - execution := vm.NewExecution(evm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) - execution.SkipTransfer = true - ret, err := execution.Exec(address, caller) + vmenv.skipTransfer = true + ret, err := vmenv.Call(caller, to, data, gas, price, value) - return ret, vmenv.logs, execution.Gas, err + return ret, vmenv.logs, vmenv.Gas, err } func RunState(state *state.State, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { - address := FromHex(tx["to"]) - keyPair, _ := crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) + var ( + keyPair, _ = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) + to = FromHex(tx["to"]) + data = FromHex(tx["data"]) + gas = ethutil.Big(tx["gasLimit"]) + price = ethutil.Big(tx["gasPrice"]) + value = ethutil.Big(tx["value"]) + ) + caller := state.GetOrNewStateObject(keyPair.Address()) vmenv := NewEnvFromMap(state, env, tx) vmenv.origin = caller.Address() - evm := vm.New(vmenv, vm.DebugVmTy) - execution := vm.NewExecution(evm, address, FromHex(tx["data"]), ethutil.Big(tx["gasLimit"]), ethutil.Big(tx["gasPrice"]), ethutil.Big(tx["value"])) - ret, err := execution.Exec(address, caller) + ret, err := vmenv.Call(caller, to, data, gas, price, value) - return ret, vmenv.logs, execution.Gas, err + return ret, vmenv.logs, vmenv.Gas, err } -- cgit v1.2.3 From 83663ed4b01480c628ce2c849e4e881ac04b5120 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 10:53:49 +0100 Subject: Renames for chain, updated VM, moved methods * Renamed a couple more chain => core * Updated VM `pc` to be uint64 rather than big int * XEth interface cleanup --- tests/helper/vm.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 6ee50a5ae..e0d5adb15 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -3,7 +3,7 @@ package helper import ( "math/big" - "github.com/ethereum/go-ethereum/chain" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" @@ -66,9 +66,9 @@ func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *chain.Execution { +func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { evm := vm.New(self, vm.DebugVmTy) - exec := chain.NewExecution(evm, addr, data, gas, price, value) + exec := core.NewExecution(evm, addr, data, gas, price, value) exec.SkipTransfer = self.skipTransfer return exec -- cgit v1.2.3 From f298ffdbb8ec2b14f254e880a65f22f4d7c66305 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 11:40:20 +0100 Subject: Renamed State => StateDB --- tests/helper/vm.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index e0d5adb15..f32f98694 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -12,7 +12,7 @@ import ( type Env struct { depth int - state *state.State + state *state.StateDB skipTransfer bool Gas *big.Int @@ -28,13 +28,13 @@ type Env struct { logs state.Logs } -func NewEnv(state *state.State) *Env { +func NewEnv(state *state.StateDB) *Env { return &Env{ state: state, } } -func NewEnvFromMap(state *state.State, envValues map[string]string, exeValues map[string]string) *Env { +func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env { env := NewEnv(state) env.origin = ethutil.Hex2Bytes(exeValues["caller"]) @@ -55,7 +55,7 @@ func (self *Env) Coinbase() []byte { return self.coinbase } func (self *Env) Time() int64 { return self.time } func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } -func (self *Env) State() *state.State { return self.state } +func (self *Env) State() *state.StateDB { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } func (self *Env) AddLog(log *state.Log) { self.logs = append(self.logs, log) @@ -91,7 +91,7 @@ func (self *Env) Create(caller vm.ClosureRef, addr, data []byte, gas, price, val return exe.Create(caller) } -func RunVm(state *state.State, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) { +func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) { var ( to = FromHex(exec["address"]) from = FromHex(exec["caller"]) @@ -110,7 +110,7 @@ func RunVm(state *state.State, env, exec map[string]string) ([]byte, state.Logs, return ret, vmenv.logs, vmenv.Gas, err } -func RunState(state *state.State, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { +func RunState(state *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { var ( keyPair, _ = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) to = FromHex(tx["to"]) -- cgit v1.2.3 From 3043b233ea4df9b630638d75f3589b94653ccfa9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 12:35:23 +0100 Subject: Log is now interface --- tests/helper/vm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index f32f98694..0c77e87fb 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -57,7 +57,7 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } func (self *Env) State() *state.StateDB { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(log *state.Log) { +func (self *Env) AddLog(log state.Log) { self.logs = append(self.logs, log) } func (self *Env) Depth() int { return self.depth } -- cgit v1.2.3 From 198cc69357a0f25ae486a041786e1239c6f5ab0f Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 21:58:26 +0100 Subject: Gas corrections and vm fixes --- tests/helper/vm.go | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 0c77e87fb..11bcedc49 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -44,6 +44,7 @@ func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues env.time = ethutil.Big(envValues["currentTimestamp"]).Int64() env.difficulty = ethutil.Big(envValues["currentDifficulty"]) env.gasLimit = ethutil.Big(envValues["currentGasLimit"]) + env.Gas = new(big.Int) return env } @@ -110,7 +111,7 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Log return ret, vmenv.logs, vmenv.Gas, err } -func RunState(state *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { +func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { var ( keyPair, _ = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) to = FromHex(tx["to"]) @@ -118,13 +119,39 @@ func RunState(state *state.StateDB, env, tx map[string]string) ([]byte, state.Lo gas = ethutil.Big(tx["gasLimit"]) price = ethutil.Big(tx["gasPrice"]) value = ethutil.Big(tx["value"]) + caddr = FromHex(env["currentCoinbase"]) ) - caller := state.GetOrNewStateObject(keyPair.Address()) + coinbase := statedb.GetOrNewStateObject(caddr) + coinbase.SetGasPool(ethutil.Big(env["currentGasLimit"])) - vmenv := NewEnvFromMap(state, env, tx) - vmenv.origin = caller.Address() - ret, err := vmenv.Call(caller, to, data, gas, price, value) + message := NewMessage(keyPair.Address(), to, data, value, gas, price) + Log.DebugDetailf("message{ to: %x, from %x, value: %v, gas: %v, price: %v }\n", message.to[:4], message.from[:4], message.value, message.gas, message.price) + st := core.NewStateTransition(coinbase, message, statedb, nil) + vmenv := NewEnvFromMap(statedb, env, tx) + vmenv.origin = keyPair.Address() + st.Env = vmenv + ret, err := st.TransitionState() + statedb.Update(vmenv.Gas) return ret, vmenv.logs, vmenv.Gas, err } + +type Message struct { + from, to []byte + value, gas, price *big.Int + data []byte +} + +func NewMessage(from, to, data []byte, value, gas, price *big.Int) Message { + return Message{from, to, value, gas, price, data} +} + +func (self Message) Hash() []byte { return nil } +func (self Message) From() []byte { return self.from } +func (self Message) To() []byte { return self.to } +func (self Message) GasPrice() *big.Int { return self.price } +func (self Message) Gas() *big.Int { return self.gas } +func (self Message) Value() *big.Int { return self.value } +func (self Message) Nonce() uint64 { return 0 } +func (self Message) Data() []byte { return self.data } -- cgit v1.2.3 From 59ef6e36931c980ba15babfb3680514635faebf6 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 00:18:52 +0100 Subject: Cleaned up objects --- tests/helper/vm.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'tests/helper') diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 11bcedc49..e174e0892 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -68,8 +68,7 @@ func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { - evm := vm.New(self, vm.DebugVmTy) - exec := core.NewExecution(evm, addr, data, gas, price, value) + exec := core.NewExecution(self, addr, data, gas, price, value) exec.SkipTransfer = self.skipTransfer return exec -- cgit v1.2.3