forked from cerc-io/plugeth
Moved 0 check to state object for now
This commit is contained in:
parent
0251fae5cc
commit
7fb5e993e3
@ -90,6 +90,13 @@ func (c *StateObject) SetAddr(addr []byte, value interface{}) {
|
|||||||
|
|
||||||
func (c *StateObject) SetStorage(num *big.Int, val *ethutil.Value) {
|
func (c *StateObject) SetStorage(num *big.Int, val *ethutil.Value) {
|
||||||
addr := ethutil.BigToBytes(num, 256)
|
addr := ethutil.BigToBytes(num, 256)
|
||||||
|
|
||||||
|
// FIXME This should be handled in the Trie it self
|
||||||
|
if val.BigInt().Cmp(ethutil.Big0) == 0 {
|
||||||
|
c.state.trie.Delete(string(addr))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
//fmt.Printf("sstore %x => %v\n", addr, val)
|
//fmt.Printf("sstore %x => %v\n", addr, val)
|
||||||
c.SetAddr(addr, val)
|
c.SetAddr(addr, val)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user