From 715a328d3ddda8154729377fa263331929ffefec Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Sat, 3 Jan 2026 12:50:35 -0300 Subject: [PATCH 1/3] Fix reversed range --- eth/filters/api.go | 4 ---- eth/filters/filter.go | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/eth/filters/api.go b/eth/filters/api.go index 4ed7e5be0a..7dca61c206 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -471,10 +471,6 @@ func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*type if crit.ToBlock != nil { end = crit.ToBlock.Int64() } - // Block numbers below 0 are special cases. - if begin > 0 && end > 0 && begin > end { - return nil, errInvalidBlockRange - } if begin >= 0 && begin < int64(api.events.backend.HistoryPruningCutoff()) { return nil, &history.PrunedHistoryError{} } diff --git a/eth/filters/filter.go b/eth/filters/filter.go index 10afc84fe9..67b6ff34b3 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -143,6 +143,9 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { if err != nil { return nil, err } + if begin > end { + return nil, errInvalidBlockRange + } return f.rangeLogs(ctx, begin, end) } @@ -383,9 +386,6 @@ func (f *Filter) rangeLogs(ctx context.Context, firstBlock, lastBlock uint64) ([ }() } - if firstBlock > lastBlock { - return nil, nil - } mb := f.sys.backend.NewMatcherBackend() defer mb.Close() From 9d604b88d19efae06c4c6c5bfe4a9e3fbfd53d6c Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Sat, 3 Jan 2026 13:17:53 -0300 Subject: [PATCH 2/3] Fix tests --- eth/filters/filter_test.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index edec3e027f..49b3a5da7f 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -357,7 +357,12 @@ func testFilters(t *testing.T, history uint64, noHistory bool) { want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","blockTimestamp":"0x2706","logIndex":"0x0","removed":false}]`, }, { - f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil), + f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil), + err: "invalid block range params", + }, + { + f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.EarliestBlockNumber), nil, nil), + err: "invalid block range params", }, { f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), From e089c77aa3099890bf4b29332f9fed4a90fd091c Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Sun, 4 Jan 2026 10:27:34 -0300 Subject: [PATCH 3/3] Fix atomicity --- eth/filters/filter.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/eth/filters/filter.go b/eth/filters/filter.go index 67b6ff34b3..9a55c8158b 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -139,9 +139,14 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { if err != nil { return nil, err } - end, err := resolveSpecial(f.end) - if err != nil { - return nil, err + var end uint64 + if f.begin != f.end { + end, err = resolveSpecial(f.end) + if err != nil { + return nil, err + } + } else { + end = begin } if begin > end { return nil, errInvalidBlockRange