@@ -84,7 +84,7 @@ func BenchmarkFilters(b *testing.B) {
8484 }
8585 b .ResetTimer ()
8686
87- filter := sys .NewRangeFilter (0 , - 1 , []common.Address {addr1 , addr2 , addr3 , addr4 }, nil )
87+ filter := sys .NewRangeFilter (0 , - 1 , []common.Address {addr1 , addr2 , addr3 , addr4 }, nil , 0 )
8888
8989 for i := 0 ; i < b .N ; i ++ {
9090 logs , _ := filter .Logs (context .Background ())
@@ -277,45 +277,45 @@ func TestFilters(t *testing.T) {
277277 f : sys .NewBlockFilter (chain [2 ].Hash (), []common.Address {contract }, nil ),
278278 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xac8b8343d69a5c46fef5af7158f42a389bc84093a88e97e184cc4263cf85dc54","transactionIndex":"0x0","blockHash":"0x6dca03904b22bf701dae59c7135dc3e0b578bd4c577d1c111d9d97776090ae09","logIndex":"0x0","removed":false}]` ,
279279 }, {
280- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {contract }, [][]common.Hash {{hash1 , hash2 , hash3 , hash4 }}),
280+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {contract }, [][]common.Hash {{hash1 , hash2 , hash3 , hash4 }}, 0 ),
281281 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x3ebf3c1ea6e0282cfe845f273b2cc7e97f02145e6d0577641cd1a82d532a19c1","transactionIndex":"0x0","blockHash":"0x0f4dea85fc816b6fd5eb4a0ba86eb00cc7d3397785336870bebd27f181a722da","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xac8b8343d69a5c46fef5af7158f42a389bc84093a88e97e184cc4263cf85dc54","transactionIndex":"0x0","blockHash":"0x6dca03904b22bf701dae59c7135dc3e0b578bd4c577d1c111d9d97776090ae09","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x21fd39694cbcc8cc5046b3b7d5200101edf9c85218da613a8851eb5e3d195241","transactionIndex":"0x0","blockHash":"0x8a956d79ca6468ff23c97615a4aa24a55bdaff78767ee28d3e2e02ecb407a0de","logIndex":"0x0","removed":false}]` ,
282282 }, {
283- f : sys .NewRangeFilter (900 , 999 , []common.Address {contract }, [][]common.Hash {{hash3 }}),
283+ f : sys .NewRangeFilter (900 , 999 , []common.Address {contract }, [][]common.Hash {{hash3 }}, 0 ),
284284 }, {
285- f : sys .NewRangeFilter (990 , int64 (rpc .LatestBlockNumber ), []common.Address {contract2 }, [][]common.Hash {{hash3 }}),
285+ f : sys .NewRangeFilter (990 , int64 (rpc .LatestBlockNumber ), []common.Address {contract2 }, [][]common.Hash {{hash3 }}, 0 ),
286286 want : `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x7c42465b2bd34fb8e87bab0001ab97c47b6d57c65f17efe43e81461fef2f05a4","transactionIndex":"0x0","blockHash":"0x5112c98f7517100552d30734c46356db10494c90bb3bd0af90ef9ace2e692ad2","logIndex":"0x0","removed":false}]` ,
287287 }, {
288- f : sys .NewRangeFilter (1 , 10 , []common.Address {contract }, [][]common.Hash {{hash2 }, {hash1 }}),
288+ f : sys .NewRangeFilter (1 , 10 , []common.Address {contract }, [][]common.Hash {{hash2 }, {hash1 }}, 0 ),
289289 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xac8b8343d69a5c46fef5af7158f42a389bc84093a88e97e184cc4263cf85dc54","transactionIndex":"0x0","blockHash":"0x6dca03904b22bf701dae59c7135dc3e0b578bd4c577d1c111d9d97776090ae09","logIndex":"0x0","removed":false}]` ,
290290 }, {
291- f : sys .NewRangeFilter (1 , 10 , nil , [][]common.Hash {{hash1 , hash2 }}),
291+ f : sys .NewRangeFilter (1 , 10 , nil , [][]common.Hash {{hash1 , hash2 }}, 0 ),
292292 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x3ebf3c1ea6e0282cfe845f273b2cc7e97f02145e6d0577641cd1a82d532a19c1","transactionIndex":"0x0","blockHash":"0x0f4dea85fc816b6fd5eb4a0ba86eb00cc7d3397785336870bebd27f181a722da","logIndex":"0x0","removed":false},{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x55b3a22ae885f9441ff8bd98fbfe54cc1b84799606aca159fac8d7a56551e426","transactionIndex":"0x1","blockHash":"0x0f4dea85fc816b6fd5eb4a0ba86eb00cc7d3397785336870bebd27f181a722da","logIndex":"0x1","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xac8b8343d69a5c46fef5af7158f42a389bc84093a88e97e184cc4263cf85dc54","transactionIndex":"0x0","blockHash":"0x6dca03904b22bf701dae59c7135dc3e0b578bd4c577d1c111d9d97776090ae09","logIndex":"0x0","removed":false}]` ,
293293 }, {
294- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}}),
294+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}}, 0 ),
295295 }, {
296- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {common .BytesToAddress ([]byte ("failmenow" ))}, nil ),
296+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), []common.Address {common .BytesToAddress ([]byte ("failmenow" ))}, nil , 0 ),
297297 }, {
298- f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}, {hash1 }}),
298+ f : sys .NewRangeFilter (0 , int64 (rpc .LatestBlockNumber ), nil , [][]common.Hash {{common .BytesToHash ([]byte ("fail" ))}, {hash1 }}, 0 ),
299299 }, {
300- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
300+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
301301 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x21fd39694cbcc8cc5046b3b7d5200101edf9c85218da613a8851eb5e3d195241","transactionIndex":"0x0","blockHash":"0x8a956d79ca6468ff23c97615a4aa24a55bdaff78767ee28d3e2e02ecb407a0de","logIndex":"0x0","removed":false}]` ,
302302 }, {
303- f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
303+ f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
304304 err : "committed header not found" ,
305305 }, {
306- f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil ),
306+ f : sys .NewRangeFilter (int64 (rpc .FinalizedBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil , 0 ),
307307 err : "committed header not found" ,
308308 }, {
309- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil ),
309+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .FinalizedBlockNumber ), nil , nil , 0 ),
310310 err : "committed header not found" ,
311311 }, {
312- f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil ),
312+ f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil , 0 ),
313313 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x87d02f2dddb1941ff179ae5d5fbb123afb9c5f71220045bc1c48f3872be24d4a","transactionIndex":"0x0","blockHash":"0x5f2b35a350840476a43aa23c6ea031d6db277aef337775ebb8421df64f17723f","logIndex":"0x0","removed":false}]` ,
314314 }, {
315- f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil ),
315+ f : sys .NewRangeFilter (int64 (rpc .LatestBlockNumber ), int64 (rpc .PendingBlockNumber ), nil , nil , 0 ),
316316 want : `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x21fd39694cbcc8cc5046b3b7d5200101edf9c85218da613a8851eb5e3d195241","transactionIndex":"0x0","blockHash":"0x8a956d79ca6468ff23c97615a4aa24a55bdaff78767ee28d3e2e02ecb407a0de","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x87d02f2dddb1941ff179ae5d5fbb123afb9c5f71220045bc1c48f3872be24d4a","transactionIndex":"0x0","blockHash":"0x5f2b35a350840476a43aa23c6ea031d6db277aef337775ebb8421df64f17723f","logIndex":"0x0","removed":false}]` ,
317317 }, {
318- f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil ),
318+ f : sys .NewRangeFilter (int64 (rpc .PendingBlockNumber ), int64 (rpc .LatestBlockNumber ), nil , nil , 0 ),
319319 err : "invalid block range" ,
320320 },
321321 } {
@@ -338,7 +338,7 @@ func TestFilters(t *testing.T) {
338338 }
339339
340340 t .Run ("timeout" , func (t * testing.T ) {
341- f := sys .NewRangeFilter (0 , - 1 , nil , nil )
341+ f := sys .NewRangeFilter (0 , - 1 , nil , nil , 0 )
342342 ctx , cancel := context .WithDeadline (context .Background (), time .Now ().Add (- time .Hour ))
343343 defer cancel ()
344344 _ , err := f .Logs (ctx )
@@ -350,3 +350,32 @@ func TestFilters(t *testing.T) {
350350 }
351351 })
352352}
353+
354+ func TestRangeLimit (t * testing.T ) {
355+ db := rawdb .NewMemoryDatabase ()
356+ _ , sys := newTestFilterSystem (t , db , Config {})
357+ defer db .Close ()
358+
359+ gspec := & core.Genesis {
360+ Config : params .TestChainConfig ,
361+ Alloc : types.GenesisAlloc {},
362+ BaseFee : big .NewInt (params .InitialBaseFee ),
363+ }
364+ genesis := gspec .MustCommit (db )
365+ chain , _ := core .GenerateChain (gspec .Config , genesis , ethash .NewFaker (), db , 10 , func (i int , gen * core.BlockGen ) {})
366+ bc , err := core .NewBlockChain (db , nil , gspec .Config , ethash .NewFaker (), vm.Config {})
367+ if err != nil {
368+ t .Fatal (err )
369+ }
370+ _ , err = bc .InsertChain (chain )
371+ if err != nil {
372+ t .Fatal (err )
373+ }
374+
375+ // Set rangeLimit to 5, but request a range of 9 (end - begin = 9, from 0 to 9)
376+ filter := sys .NewRangeFilter (0 , 9 , nil , nil , 5 )
377+ _ , err = filter .Logs (context .Background ())
378+ if err == nil || ! strings .Contains (err .Error (), "exceed maximum block range" ) {
379+ t .Fatalf ("expected range limit error, got %v" , err )
380+ }
381+ }
0 commit comments