Skip to content

Commit dbc7d3e

Browse files
committed
refactor
1 parent ada00ca commit dbc7d3e

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

src/builder.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::{
66
pub struct ScannerBuilder {
77
rpc_url: String,
88
start_block: Option<u64>,
9+
end_block: Option<u64>,
910
max_blocks_per_filter: u64,
1011
tracked_events: Vec<EventFilter>,
1112
callback_config: CallbackConfig,
@@ -16,6 +17,7 @@ impl ScannerBuilder {
1617
Self {
1718
rpc_url: rpc_url.into(),
1819
start_block: None,
20+
end_block: None,
1921
max_blocks_per_filter: 1000,
2022
tracked_events: Vec::new(),
2123
callback_config: CallbackConfig::default(),
@@ -27,6 +29,11 @@ impl ScannerBuilder {
2729
self
2830
}
2931

32+
pub fn end_block(mut self, end_block: u64) -> Self {
33+
self.end_block = Some(end_block);
34+
self
35+
}
36+
3037
pub fn max_blocks_per_filter(mut self, max_blocks: u64) -> Self {
3138
self.max_blocks_per_filter = max_blocks;
3239
self
@@ -51,6 +58,7 @@ impl ScannerBuilder {
5158
Scanner::new(
5259
self.rpc_url,
5360
self.start_block,
61+
self.end_block,
5462
self.max_blocks_per_filter,
5563
self.tracked_events,
5664
self.callback_config,

src/scanner.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)