|
|
@ -325,21 +325,21 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro |
|
|
|
stack.Push(base) |
|
|
|
stack.Push(base) |
|
|
|
case LT: |
|
|
|
case LT: |
|
|
|
require(2) |
|
|
|
require(2) |
|
|
|
y, x := stack.Popn() |
|
|
|
x, y := stack.Popn() |
|
|
|
vm.Printf(" %v < %v", x, y) |
|
|
|
vm.Printf(" %v < %v", y, x) |
|
|
|
// x < y
|
|
|
|
// x < y
|
|
|
|
if x.Cmp(y) < 0 { |
|
|
|
if y.Cmp(x) < 0 { |
|
|
|
stack.Push(ethutil.BigTrue) |
|
|
|
stack.Push(ethutil.BigTrue) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
stack.Push(ethutil.BigFalse) |
|
|
|
stack.Push(ethutil.BigFalse) |
|
|
|
} |
|
|
|
} |
|
|
|
case GT: |
|
|
|
case GT: |
|
|
|
require(2) |
|
|
|
require(2) |
|
|
|
y, x := stack.Popn() |
|
|
|
x, y := stack.Popn() |
|
|
|
vm.Printf(" %v > %v", x, y) |
|
|
|
vm.Printf(" %v > %v", y, x) |
|
|
|
|
|
|
|
|
|
|
|
// x > y
|
|
|
|
// x > y
|
|
|
|
if x.Cmp(y) > 0 { |
|
|
|
if y.Cmp(x) > 0 { |
|
|
|
stack.Push(ethutil.BigTrue) |
|
|
|
stack.Push(ethutil.BigTrue) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
stack.Push(ethutil.BigFalse) |
|
|
|
stack.Push(ethutil.BigFalse) |
|
|
@ -520,7 +520,10 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro |
|
|
|
case MLOAD: |
|
|
|
case MLOAD: |
|
|
|
require(1) |
|
|
|
require(1) |
|
|
|
offset := stack.Pop() |
|
|
|
offset := stack.Pop() |
|
|
|
stack.Push(ethutil.BigD(mem.Get(offset.Int64(), 32))) |
|
|
|
val := ethutil.BigD(mem.Get(offset.Int64(), 32)) |
|
|
|
|
|
|
|
stack.Push(val) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vm.Printf(" => 0x%x", val.Bytes()) |
|
|
|
case MSTORE: // Store the value at stack top-1 in to memory at location stack top
|
|
|
|
case MSTORE: // Store the value at stack top-1 in to memory at location stack top
|
|
|
|
require(2) |
|
|
|
require(2) |
|
|
|
// Pop value of the stack
|
|
|
|
// Pop value of the stack
|
|
|
@ -541,15 +544,14 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro |
|
|
|
val := closure.GetMem(loc) |
|
|
|
val := closure.GetMem(loc) |
|
|
|
stack.Push(val.BigInt()) |
|
|
|
stack.Push(val.BigInt()) |
|
|
|
|
|
|
|
|
|
|
|
vm.Printf(" {} 0x%x", val) |
|
|
|
vm.Printf(" {0x%x} 0x%x", loc.Bytes(), val) |
|
|
|
case SSTORE: |
|
|
|
case SSTORE: |
|
|
|
require(2) |
|
|
|
require(2) |
|
|
|
val, loc := stack.Popn() |
|
|
|
val, loc := stack.Popn() |
|
|
|
|
|
|
|
|
|
|
|
// FIXME This should be handled in the Trie it self
|
|
|
|
//if val.Cmp(big.NewInt(0)) != 0 {
|
|
|
|
if val.Cmp(big.NewInt(0)) != 0 { |
|
|
|
closure.SetStorage(loc, ethutil.NewValue(val)) |
|
|
|
closure.SetStorage(loc, ethutil.NewValue(val)) |
|
|
|
//}
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Add the change to manifest
|
|
|
|
// Add the change to manifest
|
|
|
|
vm.state.manifest.AddStorageChange(closure.Object(), loc.Bytes(), val) |
|
|
|
vm.state.manifest.AddStorageChange(closure.Object(), loc.Bytes(), val) |
|
|
|