Suicide is deferred to update

This commit is contained in:
obscuren 2014-07-02 00:06:21 +02:00
parent fd1d0bbde7
commit 1954ef47e6
2 changed files with 12 additions and 8 deletions

View File

@ -150,7 +150,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
case SSTORE: case SSTORE:
var mult *big.Int var mult *big.Int
y, x := stack.Peekn() y, x := stack.Peekn()
val := closure.GetMem(x) val := closure.GetStorage(x)
if val.IsEmpty() && len(y.Bytes()) > 0 { if val.IsEmpty() && len(y.Bytes()) > 0 {
mult = ethutil.Big2 mult = ethutil.Big2
} else if !val.IsEmpty() && len(y.Bytes()) == 0 { } else if !val.IsEmpty() && len(y.Bytes()) == 0 {
@ -567,7 +567,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
case SLOAD: case SLOAD:
require(1) require(1)
loc := stack.Pop() loc := stack.Pop()
val := closure.GetMem(loc) val := closure.GetStorage(loc)
stack.Push(val.BigInt()) stack.Push(val.BigInt())
@ -713,10 +713,14 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
receiver := vm.state.GetAccount(stack.Pop().Bytes()) receiver := vm.state.GetAccount(stack.Pop().Bytes())
receiver.AddAmount(closure.object.Amount) receiver.AddAmount(closure.object.Amount)
closure.object.MarkForDeletion()
/*
trie := closure.object.state.trie trie := closure.object.state.trie
trie.NewIterator().Each(func(key string, v *ethutil.Value) { trie.NewIterator().Each(func(key string, v *ethutil.Value) {
trie.Delete(key) trie.Delete(key)
}) })
*/
fallthrough fallthrough
case STOP: // Stop the closure case STOP: // Stop the closure

View File

@ -129,7 +129,7 @@ func FormatData(data string) []byte {
} }
func RightPadBytes(slice []byte, l int) []byte { func RightPadBytes(slice []byte, l int) []byte {
if l <= len(slice) { if l < len(slice) {
return slice return slice
} }
@ -140,7 +140,7 @@ func RightPadBytes(slice []byte, l int) []byte {
} }
func LeftPadBytes(slice []byte, l int) []byte { func LeftPadBytes(slice []byte, l int) []byte {
if l <= len(slice) { if l < len(slice) {
return slice return slice
} }