@@ -59,20 +59,24 @@ event-scanner = "0.4.0-alpha"
5959Create an event stream for the given event filters registered with the ` EventScanner ` :
6060
6161``` rust
62- use alloy :: {network :: Ethereum , sol_types :: SolEvent };
63- use event_scanner :: {EventFilter , EventScannerBuilder , Message };
62+ use alloy :: {network :: Ethereum , providers :: { Provider , ProviderBuilder }, sol_types :: SolEvent };
63+ use event_scanner :: {EventFilter , EventScannerBuilder , Message , robust_provider :: RobustProviderBuilder };
6464use tokio_stream :: StreamExt ;
6565
6666use crate :: MyContract ;
6767
6868async fn run_scanner (
69- ws_url : alloy :: transports :: http :: reqwest :: Url ,
69+ ws_url : & str ,
7070 contract : alloy :: primitives :: Address ,
7171) -> Result <(), Box <dyn std :: error :: Error >> {
72+ // Connect to provider
73+ let provider = ProviderBuilder :: new (). connect (ws_url ). await ? ;
74+ let robust_provider = RobustProviderBuilder :: new (provider ). build (). await ? ;
75+
7276 // Configure scanner with custom batch size (optional)
7377 let mut scanner = EventScannerBuilder :: live ()
7478 . max_block_range (500 ) // Process up to 500 blocks per batch
75- . connect_ws :: < Ethereum >( ws_url ) . await ? ;
79+ . connect ( robust_provider ) ;
7680
7781 // Register an event listener
7882 let filter = EventFilter :: new ()
@@ -109,48 +113,56 @@ async fn run_scanner(
109113
110114### Building a Scanner
111115
112- ` EventScannerBuilder ` provides mode-specific constructors and a functions to configure settings before connecting.
113- Once configured, connect using one of :
116+ ` EventScannerBuilder ` provides mode-specific constructors and functions to configure settings before connecting.
117+ Once configured, connect using:
114118
115- - ` connect_ws::<Ethereum>(ws_url) `
116- - ` connect_ipc::<Ethereum>(path) `
117- - ` connect::<Ethereum>(provider) `
119+ - ` connect(provider) ` - Connect using a ` RobustProvider ` wrapping your alloy provider or using an alloy provider directly
118120
119121This will connect the ` EventScanner ` and allow you to create event streams and start scanning in various [ modes] ( #scanning-modes ) .
120122
121123``` rust
124+ use alloy :: providers :: {Provider , ProviderBuilder };
125+ use event_scanner :: robust_provider :: RobustProviderBuilder ;
126+
127+ // Connect to provider (example with WebSocket)
128+ let provider = ProviderBuilder :: new (). connect (" ws://localhost:8545" ). await ? ;
129+
122130// Live streaming mode
123131let scanner = EventScannerBuilder :: live ()
124132 . max_block_range (500 ) // Optional: set max blocks per read (default: 1000)
125133 . block_confirmations (12 ) // Optional: set block confirmations (default: 12)
126- . connect_ws :: < Ethereum >( ws_url ) . await ? ;
134+ . connect ( provider . clone ()) ;
127135
128136// Historical block range mode
129137let scanner = EventScannerBuilder :: historic ()
130138 . from_block (1_000_000 )
131139 . to_block (2_000_000 )
132140 . max_block_range (500 )
133- . connect_ws :: <Ethereum >(ws_url ). await ? ;
141+ . connect (provider . clone ());
142+
143+ // we can also wrap the provider in a RobustProvider
144+ // for more advanced configurations like retries and fallbacks
145+ let robust_provider = RobustProviderBuilder :: new (provider ). build (). await ? ;
134146
135147// Latest events mode
136148let scanner = EventScannerBuilder :: latest (100 )
137149 // .from_block(1_000_000) // Optional: set start of search range
138150 // .to_block(2_000_000) // Optional: set end of search range
139151 . max_block_range (500 )
140- . connect_ws :: < Ethereum >( ws_url ) . await ? ;
152+ . connect ( robust_provider . clone ()) ;
141153
142154// Sync from block then switch to live mode
143155let scanner = EventScannerBuilder :: sync ()
144156 . from_block (100 )
145157 . max_block_range (500 )
146158 . block_confirmations (12 )
147- . connect_ws :: < Ethereum >( ws_url ) . await ? ;
159+ . connect ( robust_provider . clone ()) ;
148160
149161// Sync the latest 60 events then switch to live mode
150162let scanner = EventScannerBuilder :: sync ()
151163 . from_latest (60 )
152164 . block_confirmations (12 )
153- . connect_ws :: < Ethereum >( ws_url ) . await ? ;
165+ . connect ( robust_provider ) ;
154166```
155167
156168Invoking ` scanner.start() ` starts the scanner in the specified mode.
0 commit comments