Added message to closure && added change addresses

This commit is contained in:
obscuren
2014-08-15 16:19:10 +02:00
parent 2b9f71c6ca
commit 7d95e8624a
8 changed files with 125 additions and 50 deletions
+6 -5
View File
@@ -18,9 +18,10 @@ type ClosureRef interface {
// Basic inline closure object which implement the 'closure' interface
type Closure struct {
caller ClosureRef
object *ethstate.StateObject
Code []byte
caller ClosureRef
object *ethstate.StateObject
Code []byte
message *ethstate.Message
Gas, UsedGas, Price *big.Int
@@ -28,8 +29,8 @@ type Closure struct {
}
// Create a new closure for the given data items
func NewClosure(caller ClosureRef, object *ethstate.StateObject, code []byte, gas, price *big.Int) *Closure {
c := &Closure{caller: caller, object: object, Code: code, Args: nil}
func NewClosure(msg *ethstate.Message, caller ClosureRef, object *ethstate.StateObject, code []byte, gas, price *big.Int) *Closure {
c := &Closure{message: msg, caller: caller, object: object, Code: code, Args: nil}
// Gas should be a pointer so it can safely be reduced through the run
// This pointer will be off the state transition
+3 -4
View File
@@ -645,8 +645,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
val, loc := stack.Popn()
closure.SetStorage(loc, ethutil.NewValue(val))
// Add the change to manifest
self.env.State().Manifest().AddStorageChange(closure.Object(), loc.Bytes(), val)
closure.message.AddStorageChange(loc.Bytes())
self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
case JUMP:
@@ -719,7 +718,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
closure.UseGas(closure.Gas)
// Create the closure
c := NewClosure(closure, contract, initCode, gas, closure.Price)
c := NewClosure(msg, closure, contract, initCode, gas, closure.Price)
// Call the closure and set the return value as
// main script.
contract.Code, _, err = c.Call(self, nil)
@@ -783,7 +782,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
stateObject.AddAmount(value)
// Create a new callable closure
c := NewClosure(closure, stateObject, stateObject.Code, gas, closure.Price)
c := NewClosure(msg, closure, stateObject, stateObject.Code, gas, closure.Price)
// Executer the closure and get the return value (if any)
ret, _, err := c.Call(self, args)
if err != nil {