From b759f84cf97c9d858ad17a34f4636761d594a354 Mon Sep 17 00:00:00 2001 From: jsvisa Date: Mon, 19 Aug 2024 15:30:26 +0000 Subject: [PATCH] check given tracer Signed-off-by: jsvisa --- eth/tracers/live/filter_api.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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) }