diff --git a/eth/tracers/live/filter_api.go b/eth/tracers/live/filter_api.go index d6e74a2a89..a0bc57b38c 100644 --- a/eth/tracers/live/filter_api.go +++ b/eth/tracers/live/filter_api.go @@ -2,6 +2,7 @@ package live import ( "context" + "errors" "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/rpc" @@ -20,16 +21,25 @@ var defaultTraceConfig = &traceConfig{ Tracer: "callTracer", } -func (api *filterAPI) Block(ctx context.Context, blockNr rpc.BlockNumber, cfg *traceConfig) ([]*traceResult, error) { - blknum := uint64(blockNr.Int64()) - if blockNr == rpc.LatestBlockNumber { - blknum = api.filter.latest.Load() - } +func (api *filterAPI) isSupportedTracer(tracer string) bool { + _, ok := api.filter.tracer.Tracers()[tracer] + return ok +} +func (api *filterAPI) Block(ctx context.Context, blockNr rpc.BlockNumber, cfg *traceConfig) ([]*traceResult, error) { tracer := defaultTraceConfig.Tracer if cfg != nil { tracer = cfg.Tracer } + if !api.isSupportedTracer(tracer) { + return nil, errors.New("tracer not found") + } + + blknum := uint64(blockNr.Int64()) + if blockNr == rpc.LatestBlockNumber { + blknum = api.filter.latest.Load() + } + return api.filter.readBlockTraces(ctx, tracer, blknum) }