diff options
author | obscuren <geffobscura@gmail.com> | 2014-06-21 02:11:40 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-06-21 02:11:40 +0800 |
commit | 7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50 (patch) | |
tree | 11a2b586b466fd6a43eac6c9c9166ca7930fb62a /ethchain | |
parent | 0251fae5ccf6984c558d59cd2b36ef89116c061e (diff) | |
download | go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar.gz go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar.bz2 go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar.lz go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar.xz go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.tar.zst go-tangerine-7fb5e993e3a1cc2251bba7af1c85ed1d024b4b50.zip |
Moved 0 check to state object for now
Diffstat (limited to 'ethchain')
-rw-r--r-- | ethchain/state_object.go | 7 | ||||
-rw-r--r-- | ethchain/vm.go | 26 |
2 files changed, 21 insertions, 12 deletions
diff --git a/ethchain/state_object.go b/ethchain/state_object.go index 5b64c3b37..17391963f 100644 --- a/ethchain/state_object.go +++ b/ethchain/state_object.go @@ -90,6 +90,13 @@ func (c *StateObject) SetAddr(addr []byte, value interface{}) { func (c *StateObject) SetStorage(num *big.Int, val *ethutil.Value) { 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) c.SetAddr(addr, val) } diff --git a/ethchain/vm.go b/ethchain/vm.go index b9e8353fb..bacd05ba5 100644 --- a/ethchain/vm.go +++ b/ethchain/vm.go @@ -325,21 +325,21 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro stack.Push(base) case LT: require(2) - y, x := stack.Popn() - vm.Printf(" %v < %v", x, y) + x, y := stack.Popn() + vm.Printf(" %v < %v", y, x) // x < y - if x.Cmp(y) < 0 { + if y.Cmp(x) < 0 { stack.Push(ethutil.BigTrue) } else { stack.Push(ethutil.BigFalse) } case GT: require(2) - y, x := stack.Popn() - vm.Printf(" %v > %v", x, y) + x, y := stack.Popn() + vm.Printf(" %v > %v", y, x) // x > y - if x.Cmp(y) > 0 { + if y.Cmp(x) > 0 { stack.Push(ethutil.BigTrue) } else { stack.Push(ethutil.BigFalse) @@ -520,7 +520,10 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro case MLOAD: require(1) 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 require(2) // 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) stack.Push(val.BigInt()) - vm.Printf(" {} 0x%x", val) + vm.Printf(" {0x%x} 0x%x", loc.Bytes(), val) case SSTORE: require(2) val, loc := stack.Popn() - // FIXME This should be handled in the Trie it self - if val.Cmp(big.NewInt(0)) != 0 { - closure.SetStorage(loc, ethutil.NewValue(val)) - } + //if val.Cmp(big.NewInt(0)) != 0 { + closure.SetStorage(loc, ethutil.NewValue(val)) + //} // Add the change to manifest vm.state.manifest.AddStorageChange(closure.Object(), loc.Bytes(), val) |