@@ -9,17 +9,15 @@ import (
9
9
)
10
10
11
11
type Execution struct {
12
- vm vm.VirtualMachine
12
+ env vm.Environment
13
13
address , input []byte
14
14
Gas , price , value * big.Int
15
15
object * state.StateObject
16
16
SkipTransfer bool
17
17
}
18
18
19
19
func NewExecution (env vm.Environment , address , input []byte , gas , gasPrice , value * big.Int ) * Execution {
20
- evm := vm .New (env , vm .DebugVmTy )
21
-
22
- return & Execution {vm : evm , address : address , input : input , Gas : gas , price : gasPrice , value : value }
20
+ return & Execution {env : env , address : address , input : input , Gas : gas , price : gasPrice , value : value }
23
21
}
24
22
25
23
func (self * Execution ) Addr () []byte {
@@ -28,16 +26,18 @@ func (self *Execution) Addr() []byte {
28
26
29
27
func (self * Execution ) Call (codeAddr []byte , caller vm.ClosureRef ) ([]byte , error ) {
30
28
// Retrieve the executing code
31
- code := self .vm . Env () .State ().GetCode (codeAddr )
29
+ code := self .env .State ().GetCode (codeAddr )
32
30
33
31
return self .exec (code , codeAddr , caller )
34
32
}
35
33
36
34
func (self * Execution ) exec (code , contextAddr []byte , caller vm.ClosureRef ) (ret []byte , err error ) {
37
- env := self .vm .Env ()
35
+ env := self .env
36
+ evm := vm .New (env , vm .DebugVmTy )
37
+
38
38
chainlogger .Debugf ("pre state %x\n " , env .State ().Root ())
39
39
40
- if self . vm . Env () .Depth () == vm .MaxCallDepth {
40
+ if env .Depth () == vm .MaxCallDepth {
41
41
// Consume all gas (by not returning it) and return a depth error
42
42
return nil , vm.DepthError {}
43
43
}
@@ -56,21 +56,21 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
56
56
57
57
snapshot := env .State ().Copy ()
58
58
defer func () {
59
- if /*vm.IsDepthErr(err) ||*/ vm .IsOOGErr (err ) {
59
+ if vm .IsOOGErr (err ) {
60
60
env .State ().Set (snapshot )
61
61
}
62
62
chainlogger .Debugf ("post state %x\n " , env .State ().Root ())
63
63
}()
64
64
65
65
self .object = to
66
- ret , err = self . vm .Run (to , caller , code , self .value , self .Gas , self .price , self .input )
66
+ ret , err = evm .Run (to , caller , code , self .value , self .Gas , self .price , self .input )
67
67
68
68
return
69
69
}
70
70
71
71
func (self * Execution ) Create (caller vm.ClosureRef ) (ret []byte , err error , account * state.StateObject ) {
72
72
ret , err = self .exec (self .input , nil , caller )
73
- account = self .vm . Env () .State ().GetStateObject (self .address )
73
+ account = self .env .State ().GetStateObject (self .address )
74
74
75
75
return
76
76
}
0 commit comments