diff options
author | obscuren <geffobscura@gmail.com> | 2014-10-22 21:22:21 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-10-22 21:22:21 +0800 |
commit | b5beb1aac11af92bfe0f3ed7560b9eb08495ed09 (patch) | |
tree | 3f3fba73bca00f8c0a6c9f8bc29bca8ba36e991d /vm/execution.go | |
parent | 27cb0750c1deaed040876abdab1386a6687d7999 (diff) | |
download | go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.gz go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.bz2 go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.lz go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.xz go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.zst go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.zip |
added a transfer method to vm env
Diffstat (limited to 'vm/execution.go')
-rw-r--r-- | vm/execution.go | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/vm/execution.go b/vm/execution.go index 6bed43026..4c4bd1e3c 100644 --- a/vm/execution.go +++ b/vm/execution.go @@ -48,17 +48,17 @@ func (self *Execution) exec(code, caddr []byte, caller ClosureRef) (ret []byte, Value: self.value, }) - object := caller.Object() - if object.Balance.Cmp(self.value) < 0 { + from, to := caller.Object(), env.State().GetOrNewStateObject(self.address) + err = env.Transfer(from, to, self.value) + if err != nil { caller.ReturnGas(self.Gas, self.price) - err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, object.Balance) + err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance) } else { - stateObject := env.State().GetOrNewStateObject(self.address) - self.object = stateObject + self.object = to - caller.Object().SubAmount(self.value) - stateObject.AddAmount(self.value) + //caller.Object().SubAmount(self.value) + //stateObject.AddAmount(self.value) // Pre-compiled contracts (address.go) 1, 2 & 3. naddr := ethutil.BigD(caddr).Uint64() @@ -69,7 +69,7 @@ func (self *Execution) exec(code, caddr []byte, caller ClosureRef) (ret []byte, } } else { // Create a new callable closure - c := NewClosure(msg, caller, stateObject, code, self.Gas, self.price) + c := NewClosure(msg, caller, to, code, self.Gas, self.price) c.exe = self if self.vm.Depth() == MaxCallDepth { |