@@ -40,28 +40,31 @@ impl EventScannerBuilder<Historic> {
4040 let provider = scanner. block_range_scanner . provider ( ) ;
4141 let latest_block = provider. get_block_number ( ) . await ?;
4242
43- let from_num = resolve_block_number ( & scanner. config . from_block , latest_block) ;
44- let to_num = resolve_block_number ( & scanner. config . to_block , latest_block) ;
45-
46- let max_block = from_num. max ( to_num) ;
47-
48- if max_block > latest_block {
49- return Err ( ScannerError :: BlockExceedsLatest ( max_block, latest_block) ) ;
43+ let from_num = scanner. config . from_block . as_number ( ) . unwrap_or ( 0 ) ;
44+ let to_num = scanner. config . to_block . as_number ( ) . unwrap_or ( 0 ) ;
45+
46+ let from_exceeds = from_num > latest_block;
47+ let to_exceeds = to_num > latest_block;
48+
49+ match ( from_exceeds, to_exceeds) {
50+ ( true , true ) => Err ( ScannerError :: BlockExceedsLatest (
51+ "from_block and to_block" ,
52+ from_num. max ( to_num) ,
53+ latest_block,
54+ ) ) ?,
55+ ( true , false ) => {
56+ Err ( ScannerError :: BlockExceedsLatest ( "from_block" , from_num, latest_block) ) ?;
57+ }
58+ ( false , true ) => {
59+ Err ( ScannerError :: BlockExceedsLatest ( "to_block" , to_num, latest_block) ) ?;
60+ }
61+ ( false , false ) => { }
5062 }
5163
5264 Ok ( scanner)
5365 }
5466}
5567
56- /// Helper function to resolve `BlockNumberOrTag` to u64
57- fn resolve_block_number ( block : & BlockNumberOrTag , latest : u64 ) -> u64 {
58- match block {
59- BlockNumberOrTag :: Number ( n) => * n,
60- BlockNumberOrTag :: Earliest => 0 ,
61- _ => latest,
62- }
63- }
64-
6568impl < N : Network > EventScanner < Historic , N > {
6669 /// Starts the scanner.
6770 ///
@@ -151,7 +154,7 @@ mod tests {
151154 . await ;
152155
153156 match result {
154- Err ( ScannerError :: BlockExceedsLatest ( max, latest) ) => {
157+ Err ( ScannerError :: BlockExceedsLatest ( "from_block" , max, latest) ) => {
155158 assert_eq ! ( max, latest_block + 100 ) ;
156159 assert_eq ! ( latest, latest_block) ;
157160 }
@@ -173,7 +176,7 @@ mod tests {
173176 . await ;
174177
175178 match result {
176- Err ( ScannerError :: BlockExceedsLatest ( max, latest) ) => {
179+ Err ( ScannerError :: BlockExceedsLatest ( "to_block" , max, latest) ) => {
177180 assert_eq ! ( max, latest_block + 100 ) ;
178181 assert_eq ! ( latest, latest_block) ;
179182 }
@@ -189,17 +192,17 @@ mod tests {
189192 let latest_block = provider. get_block_number ( ) . await . unwrap ( ) ;
190193
191194 let result = EventScannerBuilder :: historic ( )
192- . to_block ( latest_block + 50 )
195+ . from_block ( latest_block + 50 )
193196 . to_block ( latest_block + 100 )
194197 . connect ( provider)
195198 . await ;
196199
197200 match result {
198- Err ( ScannerError :: BlockExceedsLatest ( max, latest) ) => {
201+ Err ( ScannerError :: BlockExceedsLatest ( "from_block and to_block" , max, latest) ) => {
199202 assert_eq ! ( max, latest_block + 100 ) ;
200203 assert_eq ! ( latest, latest_block) ;
201204 }
202- _ => panic ! ( "Expected BlockExceedsLatest error" ) ,
205+ _ => panic ! ( "Expected BlockExceedsLatest error with 'from_block and to_block' " ) ,
203206 }
204207 }
205208
0 commit comments