@@ -109,7 +109,7 @@ func benchmarkFilters(b *testing.B, history uint64, noHistory bool) {
109109 backend .startFilterMaps (history , noHistory , filtermaps .DefaultParams )
110110 defer backend .stopFilterMaps ()
111111
112- filter := sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {addr1 , addr2 , addr3 , addr4 }, nil )
112+ filter := sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {addr1 , addr2 , addr3 , addr4 }, nil , 0 )
113113 for b .Loop () {
114114 filter .begin = 0
115115 logs , _ := filter .Logs (context .Background ())
@@ -317,70 +317,70 @@ func testFilters(t *testing.T, history uint64, noHistory bool) {
317317 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","blockTimestamp":"0x1e","logIndex":"0x0","removed":false}]` ,
318318 },
319319 {
320- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {contract }, [][]common.Hash {{hash1 , hash2 , hash3 , hash4 }}),
320+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {contract }, [][]common.Hash {{hash1 , hash2 , hash3 , hash4 }}, 0 ),
321321 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","blockTimestamp":"0x14","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","blockTimestamp":"0x1e","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","blockTimestamp":"0x2710","logIndex":"0x0","removed":false}]` ,
322322 },
323323 {
324- f : sys .NewRangeFilter (900 , 999 , []common.Address {contract }, [][]common.Hash {{hash3 }}),
324+ f : sys .NewRangeFilter (900 , 999 , []common.Address {contract }, [][]common.Hash {{hash3 }}, 0 ),
325325 },
326326 {
327- f : sys .NewRangeFilter (990 , int64 (rpc .LatestBlockNumber ), []common.Address {contract2 }, [][]common.Hash {{hash3 }}),
327+ f : sys .NewRangeFilter (990 , int64 (rpc .LatestBlockNumber ), []common.Address {contract2 }, [][]common.Hash {{hash3 }}, 0 ),
328328 want : `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","blockTimestamp":"0x2706","logIndex":"0x0","removed":false}]` ,
329329 },
330330 {
331- f : sys .NewRangeFilter (1 , 10 , []common.Address {contract }, [][]common.Hash {{hash2 }, {hash1 }}),
331+ f : sys .NewRangeFilter (1 , 10 , []common.Address {contract }, [][]common.Hash {{hash2 }, {hash1 }}, 0 ),
332332 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","blockTimestamp":"0x1e","logIndex":"0x0","removed":false}]` ,
333333 },
334334 {
335- f : sys .NewRangeFilter (1 , 10 , nil , [][]common.Hash {{hash1 , hash2 }}),
335+ f : sys .NewRangeFilter (1 , 10 , nil , [][]common.Hash {{hash1 , hash2 }}, 0 ),
336336 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","blockTimestamp":"0x14","logIndex":"0x0","removed":false},{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xdba3e2ea9a7d690b722d70ee605fd67ba4c00d1d3aecd5cf187a7b92ad8eb3df","transactionIndex":"0x1","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","blockTimestamp":"0x14","logIndex":"0x1","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","blockTimestamp":"0x1e","logIndex":"0x0","removed":false}]` ,
337337 },
338338 {
339- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}}),
339+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}}, 0 ),
340340 },
341341 {
342- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {common .BytesToAddress ([]byte ("failmenow" ))}, nil ),
342+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {common .BytesToAddress ([]byte ("failmenow" ))}, nil , 0 ),
343343 },
344344 {
345- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}, {hash1 }}),
345+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}, {hash1 }}, 0 ),
346346 },
347347 {
348- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
348+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
349349 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","blockTimestamp":"0x2710","logIndex":"0x0","removed":false}]` ,
350350 },
351351 {
352- f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
352+ f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
353353 want : `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","blockTimestamp":"0x2706","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","blockTimestamp":"0x2710","logIndex":"0x0","removed":false}]` ,
354354 },
355355 {
356- f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil ),
356+ f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil , 0 ),
357357 want : `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","blockTimestamp":"0x2706","logIndex":"0x0","removed":false}]` ,
358358 },
359359 {
360- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil ),
360+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil , 0 ),
361361 },
362362 {
363- f : sys .NewRangeFilter (int64 (rpc .SafeBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
363+ f : sys .NewRangeFilter (int64 (rpc .SafeBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
364364 err : "safe header not found" ,
365365 },
366366 {
367- f : sys .NewRangeFilter (int64 (rpc .SafeBlockNumber ), int64 (rpc .SafeBlockNumber ), nil , nil ),
367+ f : sys .NewRangeFilter (int64 (rpc .SafeBlockNumber ), int64 (rpc .SafeBlockNumber ), nil , nil , 0 ),
368368 err : "safe header not found" ,
369369 },
370370 {
371- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .SafeBlockNumber ), nil , nil ),
371+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .SafeBlockNumber ), nil , nil , 0 ),
372372 err : "safe header not found" ,
373373 },
374374 {
375- f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil ),
375+ f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil , 0 ),
376376 err : errPendingLogsUnsupported .Error (),
377377 },
378378 {
379- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil ),
379+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil , 0 ),
380380 err : errPendingLogsUnsupported .Error (),
381381 },
382382 {
383- f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
383+ f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
384384 err : errPendingLogsUnsupported .Error (),
385385 },
386386 } {
@@ -403,7 +403,7 @@ func testFilters(t *testing.T, history uint64, noHistory bool) {
403403 }
404404
405405 t .Run ("timeout" , func (t * testing.T ) {
406- f := sys .NewRangeFilter (0 , rpc .LatestBlockNumber .Int64 (), nil , nil )
406+ f := sys .NewRangeFilter (0 , rpc .LatestBlockNumber .Int64 (), nil , nil , 0 )
407407 ctx , cancel := context .WithDeadline (context .Background (), time .Now ().Add (- time .Hour ))
408408 defer cancel ()
409409 _ , err := f .Logs (ctx )
@@ -464,7 +464,7 @@ func TestRangeLogs(t *testing.T) {
464464 newFilter := func (begin , end int64 ) {
465465 testCase ++
466466 event = 0
467- filter = sys .NewRangeFilter (begin , end , addresses , nil )
467+ filter = sys .NewRangeFilter (begin , end , addresses , nil , 0 )
468468 filter .rangeLogsTestHook = make (chan rangeLogsTestEvent )
469469 go func (filter * Filter ) {
470470 filter .Logs (context .Background ())
@@ -601,3 +601,39 @@ func TestRangeLogs(t *testing.T) {
601601 expEvent (rangeLogsTestReorg , 400 , 901 )
602602 expEvent (rangeLogsTestDone , 0 , 0 )
603603}
604+
605+ func TestRangeLimit (t * testing.T ) {
606+ db := rawdb .NewMemoryDatabase ()
607+ backend , sys := newTestFilterSystem (db , Config {})
608+ defer db .Close ()
609+
610+ gspec := & core.Genesis {
611+ Config : params .TestChainConfig ,
612+ Alloc : types.GenesisAlloc {},
613+ BaseFee : big .NewInt (params .InitialBaseFee ),
614+ }
615+ _ , err := gspec .Commit (db , triedb .NewDatabase (db , nil ))
616+ if err != nil {
617+ t .Fatal (err )
618+ }
619+ chain , _ := core .GenerateChain (gspec .Config , gspec .ToBlock (), ethash .NewFaker (), db , 10 , func (i int , gen * core.BlockGen ) {})
620+ options := core .DefaultConfig ().WithStateScheme (rawdb .HashScheme )
621+ options .TxLookupLimit = 0
622+ bc , err := core .NewBlockChain (db , gspec , ethash .NewFaker (), options )
623+ if err != nil {
624+ t .Fatal (err )
625+ }
626+ _ , err = bc .InsertChain (chain )
627+ if err != nil {
628+ t .Fatal (err )
629+ }
630+ backend .startFilterMaps (0 , false , filtermaps .DefaultParams )
631+ defer backend .stopFilterMaps ()
632+
633+ // Set rangeLimit to 5, but request 10 blocks
634+ filter := sys .NewRangeFilter (0 , 9 , nil , nil , 5 )
635+ _ , err = filter .Logs (context .Background ())
636+ if err == nil || ! strings .Contains (err .Error (), "exceed maximum block range" ) {
637+ t .Fatalf ("expected range limit error, got %v" , err )
638+ }
639+ }
0 commit comments