forked from cerc-io/plugeth
Couple of minor issues fixed
* CALLVALUE pushed incorrect value to the stack * Set execution model to closure
This commit is contained in:
parent
7ca7938d8e
commit
3d177be73e
@ -94,11 +94,15 @@ func (self *State) GetStateObject(addr []byte) *StateObject {
|
||||
}
|
||||
|
||||
stateObject = NewStateObjectFromBytes(addr, []byte(data))
|
||||
self.stateObjects[string(addr)] = stateObject
|
||||
self.SetStateObject(stateObject)
|
||||
|
||||
return stateObject
|
||||
}
|
||||
|
||||
func (self *State) SetStateObject(object *StateObject) {
|
||||
self.stateObjects[string(object.address)] = object
|
||||
}
|
||||
|
||||
// Retrieve a state object or create a new state object if nil
|
||||
func (self *State) GetOrNewStateObject(addr []byte) *StateObject {
|
||||
stateObject := self.GetStateObject(addr)
|
||||
|
@ -23,6 +23,7 @@ type Closure struct {
|
||||
object *ethstate.StateObject
|
||||
Code []byte
|
||||
message *ethstate.Message
|
||||
exe *Execution
|
||||
|
||||
Gas, UsedGas, Price *big.Int
|
||||
|
||||
|
@ -16,7 +16,6 @@ type Environment interface {
|
||||
Coinbase() []byte
|
||||
Time() int64
|
||||
Difficulty() *big.Int
|
||||
Value() *big.Int
|
||||
BlockHash() []byte
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,7 @@ func (self *Execution) Exec(codeAddr []byte, caller ClosureRef) (ret []byte, err
|
||||
|
||||
// Create a new callable closure
|
||||
c := NewClosure(msg, caller, stateObject, code, self.gas, self.price)
|
||||
c.exe = self
|
||||
// Executer the closure and get the return value (if any)
|
||||
ret, _, err = c.Call(self.vm, self.input)
|
||||
|
||||
|
@ -392,7 +392,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
stack.Push(ethutil.BigD(caller))
|
||||
|
||||
case CALLVALUE:
|
||||
value := self.env.Value()
|
||||
value := closure.exe.value
|
||||
|
||||
stack.Push(value)
|
||||
|
||||
|
@ -482,7 +482,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
|
||||
self.Printf(" => %x", caller)
|
||||
case CALLVALUE:
|
||||
value := self.env.Value()
|
||||
value := closure.exe.value
|
||||
|
||||
stack.Push(value)
|
||||
|
||||
@ -674,7 +674,10 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
val, loc := stack.Popn()
|
||||
closure.SetStorage(loc, ethutil.NewValue(val))
|
||||
|
||||
closure.message.AddStorageChange(loc.Bytes())
|
||||
// Debug sessions are allowed to run without message
|
||||
if closure.message != nil {
|
||||
closure.message.AddStorageChange(loc.Bytes())
|
||||
}
|
||||
|
||||
self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
|
||||
case JUMP:
|
||||
|
Loading…
Reference in New Issue
Block a user