aboutsummaryrefslogtreecommitdiffstats
path: root/tests/helper
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-01-02 17:30:27 +0800
committerobscuren <geffobscura@gmail.com>2015-01-02 17:30:27 +0800
commit0fb1bcd32192b8bf05a328b955a08da4cefe0180 (patch)
tree67460b927eb41b2876e8e6b7eb9dece494dbd088 /tests/helper
parent8da07e91e40c1d1bb43763b7e959ae92e5770af2 (diff)
parenta4dc12f12c7a06f5e28d5b1e760249875ef7a8c5 (diff)
downloadgo-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar.gz
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar.bz2
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar.lz
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar.xz
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.tar.zst
go-tangerine-0fb1bcd32192b8bf05a328b955a08da4cefe0180.zip
Merge branch 'poc8' into docbranch
Diffstat (limited to 'tests/helper')
-rw-r--r--tests/helper/trie.go6
-rw-r--r--tests/helper/vm.go40
2 files changed, 36 insertions, 10 deletions
diff --git a/tests/helper/trie.go b/tests/helper/trie.go
index 32432cc7a..3cfb0bbe5 100644
--- a/tests/helper/trie.go
+++ b/tests/helper/trie.go
@@ -1,6 +1,6 @@
package helper
-import "github.com/ethereum/go-ethereum/trie"
+import "github.com/ethereum/go-ethereum/ptrie"
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() *trie.Trie {
+func NewTrie() *ptrie.Trie {
db, _ := NewMemDatabase()
- return trie.New(db, "")
+ return ptrie.New(nil, db)
}
diff --git a/tests/helper/vm.go b/tests/helper/vm.go
index 0c77e87fb..e174e0892 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
}
@@ -67,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
@@ -110,7 +110,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 +118,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 }