@@ -22,6 +22,7 @@ pub struct Scanner {
2222 provider : Arc < dyn Provider > ,
2323 current_head : Option < u64 > ,
2424 start_block : Option < u64 > ,
25+ end_block : Option < u64 > ,
2526 max_blocks_per_filter : u64 ,
2627 tracked_events : Vec < EventFilter > ,
2728 callback_config : CallbackConfig ,
@@ -31,34 +32,41 @@ impl Scanner {
3132 pub async fn new (
3233 rpc_url : String ,
3334 start_block : Option < u64 > ,
35+ end_block : Option < u64 > ,
3436 max_blocks_per_filter : u64 ,
3537 tracked_events : Vec < EventFilter > ,
3638 callback_config : CallbackConfig ,
3739 ) -> anyhow:: Result < Self > {
38- let provider = match Self :: detect_provider_type ( & rpc_url) {
39- Ok ( ProviderType :: WebSocket ) => {
40- info ! ( "connecting to provider via WebSocket: {}" , & rpc_url) ;
41- let ws = WsConnect :: new ( & rpc_url) ;
42- ProviderBuilder :: new ( ) . connect_ws ( ws) . await ?
43- }
44- Ok ( ProviderType :: Ipc ) => {
45- info ! ( "connecting to provider via IPC: {}" , & rpc_url) ;
46- let ipc = IpcConnect :: new ( rpc_url. clone ( ) ) ;
47- ProviderBuilder :: new ( ) . connect_ipc ( ipc) . await ?
48- }
49- Err ( e) => return Err ( e) ,
50- } ;
40+ let provider = Self :: get_provider ( & rpc_url) . await ?;
5141
5242 Ok ( Self {
53- provider : Arc :: new ( provider ) ,
43+ provider,
5444 current_head : start_block,
5545 start_block,
46+ end_block,
5647 max_blocks_per_filter,
5748 tracked_events,
5849 callback_config,
5950 } )
6051 }
6152
53+ async fn get_provider ( url : & str ) -> anyhow:: Result < Arc < dyn Provider > > {
54+ let provider = match Self :: detect_provider_type ( url) {
55+ Ok ( ProviderType :: WebSocket ) => {
56+ info ! ( "connecting to provider via WebSocket: {}" , url) ;
57+ let ws = WsConnect :: new ( url) ;
58+ ProviderBuilder :: new ( ) . connect_ws ( ws) . await ?
59+ }
60+ Ok ( ProviderType :: Ipc ) => {
61+ info ! ( "connecting to provider via IPC: {}" , url) ;
62+ let ipc = IpcConnect :: new ( url. to_string ( ) ) ;
63+ ProviderBuilder :: new ( ) . connect_ipc ( ipc) . await ?
64+ }
65+ Err ( e) => return Err ( e) ,
66+ } ;
67+ Ok ( Arc :: new ( provider) )
68+ }
69+
6270 fn detect_provider_type ( url : & str ) -> anyhow:: Result < ProviderType > {
6371 if url. starts_with ( "ws://" ) || url. starts_with ( "wss://" ) {
6472 Ok ( ProviderType :: WebSocket )
0 commit comments