|
|
|
@ -632,7 +632,6 @@ func (api *API) traceBlockParallel(ctx context.Context, block *types.Block, stat |
|
|
|
|
var ( |
|
|
|
|
txs = block.Transactions() |
|
|
|
|
blockHash = block.Hash() |
|
|
|
|
blockCtx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) |
|
|
|
|
signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time()) |
|
|
|
|
results = make([]*txTraceResult, len(txs)) |
|
|
|
|
pend sync.WaitGroup |
|
|
|
@ -655,6 +654,11 @@ func (api *API) traceBlockParallel(ctx context.Context, block *types.Block, stat |
|
|
|
|
TxIndex: task.index, |
|
|
|
|
TxHash: txs[task.index].Hash(), |
|
|
|
|
} |
|
|
|
|
// Reconstruct the block context for each transaction
|
|
|
|
|
// as the GetHash function of BlockContext is not safe for
|
|
|
|
|
// concurrent use.
|
|
|
|
|
// See: https://github.com/ethereum/go-ethereum/issues/29114
|
|
|
|
|
blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) |
|
|
|
|
res, err := api.traceTx(ctx, msg, txctx, blockCtx, task.statedb, config) |
|
|
|
|
if err != nil { |
|
|
|
|
results[task.index] = &txTraceResult{TxHash: txs[task.index].Hash(), Error: err.Error()} |
|
|
|
@ -667,6 +671,7 @@ func (api *API) traceBlockParallel(ctx context.Context, block *types.Block, stat |
|
|
|
|
|
|
|
|
|
// Feed the transactions into the tracers and return
|
|
|
|
|
var failed error |
|
|
|
|
blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) |
|
|
|
|
txloop: |
|
|
|
|
for i, tx := range txs { |
|
|
|
|
// Send the trace task over for execution
|
|
|
|
|