|
|
|
@ -184,7 +184,8 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { |
|
|
|
|
var mult *big.Int |
|
|
|
|
y, x := stack.Peekn() |
|
|
|
|
val := closure.GetStorage(x) |
|
|
|
|
if val.IsEmpty() && len(y.Bytes()) > 0 { |
|
|
|
|
//if val.IsEmpty() && len(y.Bytes()) > 0 {
|
|
|
|
|
if val.BigInt().Cmp(ethutil.Big0) == 0 && len(y.Bytes()) > 0 { |
|
|
|
|
mult = ethutil.Big2 |
|
|
|
|
} else if !val.IsEmpty() && len(y.Bytes()) == 0 { |
|
|
|
|
mult = ethutil.Big0 |
|
|
|
@ -482,7 +483,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { |
|
|
|
|
case ORIGIN: |
|
|
|
|
stack.Push(ethutil.BigD(vm.vars.Origin)) |
|
|
|
|
|
|
|
|
|
vm.Printf(" => %v", vm.vars.Origin) |
|
|
|
|
vm.Printf(" => %x", vm.vars.Origin) |
|
|
|
|
case CALLER: |
|
|
|
|
caller := closure.caller.Address() |
|
|
|
|
stack.Push(ethutil.BigD(caller)) |
|
|
|
@ -550,10 +551,10 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
code := closure.Script[cOff : cOff+l] |
|
|
|
|
fmt.Println("len:", l, "code off:", cOff, "mem off:", mOff) |
|
|
|
|
//fmt.Println("len:", l, "code off:", cOff, "mem off:", mOff)
|
|
|
|
|
|
|
|
|
|
mem.Set(mOff, l, code) |
|
|
|
|
fmt.Println(Code(mem.Get(mOff, l))) |
|
|
|
|
//fmt.Println(Code(mem.Get(mOff, l)))
|
|
|
|
|
case GASPRICE: |
|
|
|
|
stack.Push(closure.Price) |
|
|
|
|
|
|
|
|
@ -743,6 +744,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { |
|
|
|
|
|
|
|
|
|
if closure.object.Amount.Cmp(value) < 0 { |
|
|
|
|
vmlogger.Debugf("Insufficient funds to transfer value. Req %v, has %v", value, closure.object.Amount) |
|
|
|
|
|
|
|
|
|
closure.ReturnGas(gas, nil, nil) |
|
|
|
|
|
|
|
|
|
stack.Push(ethutil.BigFalse) |
|
|
|
|