aboutsummaryrefslogtreecommitdiffstats
path: root/vm/vm.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2015-03-10 06:25:46 +0800
committerFelix Lange <fjl@twurst.com>2015-03-10 06:25:46 +0800
commit9bf513e99305af733110cf23a0b47c8e73359010 (patch)
treef9d36e1ae1f2f7c3eb803c7499a4e85a5cdcd5bd /vm/vm.go
parentcd51860bf024d949a09b3863c88a278a386227a7 (diff)
parent676a0de58d3d7c508b0eeeff192d2095a46f7382 (diff)
downloadgo-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar.gz
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar.bz2
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar.lz
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar.xz
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.tar.zst
go-tangerine-9bf513e99305af733110cf23a0b47c8e73359010.zip
Merge ethereum/poc-9 into accounts-integration
Conflicts: cmd/utils/cmd.go cmd/utils/flags.go core/manager.go eth/backend.go rpc/http/server.go xeth/xeth.go
Diffstat (limited to 'vm/vm.go')
-rw-r--r--vm/vm.go16
1 files changed, 13 insertions, 3 deletions
diff --git a/vm/vm.go b/vm/vm.go
index 165bb0329..3647d7a5e 100644
--- a/vm/vm.go
+++ b/vm/vm.go
@@ -30,8 +30,8 @@ type Vm struct {
func New(env Environment) *Vm {
lt := LogTyPretty
- // lt = LogTyDiff
- return &Vm{debug: true, env: env, logTy: lt, Recoverable: true}
+
+ return &Vm{debug: Debug, env: env, logTy: lt, Recoverable: true}
}
func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.Int, callData []byte) (ret []byte, err error) {
@@ -405,7 +405,12 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
case BALANCE:
addr := stack.Pop().Bytes()
- balance := statedb.GetBalance(addr)
+ var balance *big.Int
+ if statedb.GetStateObject(addr) != nil {
+ balance = statedb.GetBalance(addr)
+ } else {
+ balance = base
+ }
stack.Push(balance)
@@ -731,6 +736,7 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
self.Printf(" => (%x) %v", receiver.Address()[:4], balance)
receiver.AddBalance(balance)
+
statedb.Delete(context.Address())
fallthrough
@@ -900,6 +906,10 @@ func (self *Vm) calculateGasAndSize(context *Context, caller ContextRef, op OpCo
g = GasStorageMod
}
gas.Set(g)
+ case SUICIDE:
+ if !statedb.IsDeleted(context.Address()) {
+ statedb.Refund(self.env.Origin(), RefundSuicide)
+ }
case MLOAD:
newMemSize = calcMemSize(stack.Peek(), u256(32))
case MSTORE8: