|
|
|
@ -603,6 +603,17 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
defer release() |
|
|
|
|
|
|
|
|
|
blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) |
|
|
|
|
if beaconRoot := block.BeaconRoot(); beaconRoot != nil { |
|
|
|
|
vmenv := vm.NewEVM(blockCtx, vm.TxContext{}, statedb, api.backend.ChainConfig(), vm.Config{}) |
|
|
|
|
core.ProcessBeaconBlockRoot(*beaconRoot, vmenv, statedb) |
|
|
|
|
} |
|
|
|
|
if api.backend.ChainConfig().IsPrague(block.Number(), block.Time()) { |
|
|
|
|
vmenv := vm.NewEVM(blockCtx, vm.TxContext{}, statedb, api.backend.ChainConfig(), vm.Config{}) |
|
|
|
|
core.ProcessParentBlockHash(block.ParentHash(), vmenv, statedb) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// JS tracers have high overhead. In this case run a parallel
|
|
|
|
|
// process that generates states in one thread and traces txes
|
|
|
|
|
// in separate worker threads.
|
|
|
|
@ -615,18 +626,9 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac |
|
|
|
|
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)) |
|
|
|
|
) |
|
|
|
|
if beaconRoot := block.BeaconRoot(); beaconRoot != nil { |
|
|
|
|
vmenv := vm.NewEVM(blockCtx, vm.TxContext{}, statedb, api.backend.ChainConfig(), vm.Config{}) |
|
|
|
|
core.ProcessBeaconBlockRoot(*beaconRoot, vmenv, statedb) |
|
|
|
|
} |
|
|
|
|
if api.backend.ChainConfig().IsPrague(block.Number(), block.Time()) { |
|
|
|
|
vmenv := vm.NewEVM(blockCtx, vm.TxContext{}, statedb, api.backend.ChainConfig(), vm.Config{}) |
|
|
|
|
core.ProcessParentBlockHash(block.ParentHash(), vmenv, statedb) |
|
|
|
|
} |
|
|
|
|
for i, tx := range txs { |
|
|
|
|
// Generate the next state snapshot fast without tracing
|
|
|
|
|
msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) |
|
|
|
|