From 4d66cf49bc669fcfdf27b5fa08449c89d4cc3a31 Mon Sep 17 00:00:00 2001 From: maskpp Date: Sat, 26 Apr 2025 00:08:02 +0800 Subject: [PATCH] if the txhash is set and is not the first tx then vmConf.Tracer call will trigger panic --- eth/tracers/api.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 61efaf0f89..2c36e1942b 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/tracers/logger" @@ -788,7 +789,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block // Prepare the transaction for un-traced execution var ( msg, _ = core.TransactionToMessage(tx, signer, block.BaseFee()) - vmConf vm.Config + tracer *tracing.Hooks dump *os.File writer *bufio.Writer err error @@ -808,23 +809,20 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block // Swap out the noop logger to the standard tracer writer = bufio.NewWriter(dump) - vmConf = vm.Config{ - Tracer: logger.NewJSONLogger(&logConfig, writer), - EnablePreimageRecording: true, - } + tracer = logger.NewJSONLogger(&logConfig, writer) } // Execute the transaction and flush any traces to disk statedb.SetTxContext(tx.Hash(), i) - if vmConf.Tracer.OnTxStart != nil { - vmConf.Tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) + if tracer != nil && tracer.OnTxStart != nil { + tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) } vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)) - if vmConf.Tracer.OnTxEnd != nil { + if tracer != nil && tracer.OnTxEnd != nil { var receipt *types.Receipt if err == nil { receipt = &types.Receipt{GasUsed: vmRet.UsedGas} } - vmConf.Tracer.OnTxEnd(receipt, err) + tracer.OnTxEnd(receipt, err) } if writer != nil { writer.Flush()