From 6e0a4e116371c791a69f62ac51b0050656cb2fbc Mon Sep 17 00:00:00 2001 From: silence Date: Fri, 16 Aug 2019 10:52:03 +0800 Subject: [PATCH] Update instructions.go Make sure contract suicides successfully before add balance to other address. --- core/vm/instructions.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 7b6909c927..15e19062e6 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 }