diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 2886fcd0cb..e3fa5c8620 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -611,12 +611,21 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac TxIndex: i, TxHash: tx.Hash(), } - res, err := api.traceTx(ctx, tx, msg, txctx, blockCtx, statedb, config) - if err != nil { - results[i] = &txTraceResult{TxHash: tx.Hash(), Error: err.Error()} - } else { + + func() { + defer func() { + if r := recover(); r != nil { + results[i] = &txTraceResult{TxHash: tx.Hash(), Error: fmt.Sprintf("panic: %v", r)} + } + }() + + res, err := api.traceTx(ctx, tx, msg, txctx, blockCtx, statedb, config) + if err != nil { + results[i] = &txTraceResult{TxHash: tx.Hash(), Error: err.Error()} + return + } results[i] = &txTraceResult{TxHash: tx.Hash(), Result: res} - } + }() } return results, nil }