From e9f16278cf707b44d90ea71d2cd8a9d265820524 Mon Sep 17 00:00:00 2001 From: Delweng Zheng Date: Fri, 28 Sep 2018 16:37:40 +0800 Subject: [PATCH] eth: return after ApplyMessage The `statedb` is parent's, so it should be ApplyMessage, then with `statedb.Finalise` to get a new one. --- eth/api_tracer.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eth/api_tracer.go b/eth/api_tracer.go index 80552ada8c..cc169f6121 100644 --- a/eth/api_tracer.go +++ b/eth/api_tracer.go @@ -653,9 +653,6 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree // Assemble the transaction call message and return if the requested offset msg, _ := tx.AsMessage(signer) context := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - if idx == txIndex { - return msg, context, statedb, nil - } // Not yet the searched for transaction, execute on top of the current state vmenv := vm.NewEVM(context, statedb, api.config, vm.Config{}) if _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { @@ -663,6 +660,9 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree } // Ensure any modifications are committed to the state statedb.Finalise(true) + if idx == txIndex { + return msg, context, statedb, nil + } } return nil, vm.Context{}, nil, fmt.Errorf("tx index %d out of range for block %x", txIndex, blockHash) }