good morning!!!!

Skip to content
Snippets Groups Projects
Commit 12671c82 authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Moved VM to execution

parent 59ef6e36
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,7 @@ import (
)
type Execution struct {
vm vm.VirtualMachine
env vm.Environment
address, input []byte
Gas, price, value *big.Int
object *state.StateObject
......@@ -17,9 +17,7 @@ type Execution struct {
}
func NewExecution(env vm.Environment, address, input []byte, gas, gasPrice, value *big.Int) *Execution {
evm := vm.New(env, vm.DebugVmTy)
return &Execution{vm: evm, address: address, input: input, Gas: gas, price: gasPrice, value: value}
return &Execution{env: env, address: address, input: input, Gas: gas, price: gasPrice, value: value}
}
func (self *Execution) Addr() []byte {
......@@ -28,16 +26,18 @@ func (self *Execution) Addr() []byte {
func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, error) {
// Retrieve the executing code
code := self.vm.Env().State().GetCode(codeAddr)
code := self.env.State().GetCode(codeAddr)
return self.exec(code, codeAddr, caller)
}
func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret []byte, err error) {
env := self.vm.Env()
env := self.env
evm := vm.New(env, vm.DebugVmTy)
chainlogger.Debugf("pre state %x\n", env.State().Root())
if self.vm.Env().Depth() == vm.MaxCallDepth {
if env.Depth() == vm.MaxCallDepth {
// Consume all gas (by not returning it) and return a depth error
return nil, vm.DepthError{}
}
......@@ -56,21 +56,21 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
snapshot := env.State().Copy()
defer func() {
if /*vm.IsDepthErr(err) ||*/ vm.IsOOGErr(err) {
if vm.IsOOGErr(err) {
env.State().Set(snapshot)
}
chainlogger.Debugf("post state %x\n", env.State().Root())
}()
self.object = to
ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input)
ret, err = evm.Run(to, caller, code, self.value, self.Gas, self.price, self.input)
return
}
func (self *Execution) Create(caller vm.ClosureRef) (ret []byte, err error, account *state.StateObject) {
ret, err = self.exec(self.input, nil, caller)
account = self.vm.Env().State().GetStateObject(self.address)
account = self.env.State().GetStateObject(self.address)
return
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment