From bcafff9bcfb6e52fc4b6b33bc5564b6c9f21f7a7 Mon Sep 17 00:00:00 2001 From: "wangsai.silence" Date: Fri, 16 Aug 2019 14:21:42 +0800 Subject: [PATCH] Make sure contract suicides successfully before add balance to other address. --- core/vm/instructions.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 7b6909c927..5986ad2c11 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -878,9 +878,11 @@ func opStop(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory func opSuicide(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { balance := interpreter.evm.StateDB.GetBalance(contract.Address()) - interpreter.evm.StateDB.AddBalance(common.BigToAddress(stack.pop()), balance) - interpreter.evm.StateDB.Suicide(contract.Address()) + suicided := interpreter.evm.StateDB.Suicide(contract.Address()) + if suicided { + interpreter.evm.StateDB.AddBalance(common.BigToAddress(stack.pop()), balance) + } return nil, nil }