Skip to content

Commit 407808b

Browse files
committed
feat: get block number based on provided config param
1 parent 428ac5d commit 407808b

File tree

4 files changed

+55
-8
lines changed

4 files changed

+55
-8
lines changed

aggregation-mode/src/backend/config.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ pub struct Config {
1212
pub eth_rpc_url: String,
1313
pub eth_ws_url: String,
1414
pub private_key: String,
15-
pub submit_proofs_every_secs: u64,
1615
pub max_proofs_in_queue: u16,
1716
pub proof_aggregation_service_address: String,
1817
pub aligned_service_manager_address: String,
1918
pub ecdsa: ECDSAConfig,
19+
pub fetch_logs_from_secs_ago: u64,
20+
pub block_time_secs: u64,
2021
}
2122

2223
impl Config {

aggregation-mode/src/backend/fetcher.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,61 @@ use std::str::FromStr;
22

33
use super::{
44
config::Config,
5-
types::{AlignedLayerServiceManager, AlignedLayerServiceManagerContract},
5+
types::{AlignedLayerServiceManager, AlignedLayerServiceManagerContract, RPCProvider},
66
};
77
use crate::{
88
backend::s3::get_aligned_batch_from_s3,
99
zk::{backends::sp1::SP1Proof, Proof},
1010
};
1111
use aligned_sdk::core::types::ProvingSystemId;
12-
use alloy::{primitives::Address, providers::ProviderBuilder};
12+
use alloy::{
13+
primitives::Address,
14+
providers::{Provider, ProviderBuilder},
15+
};
1316
use tracing::{error, info};
1417

1518
#[derive(Debug)]
1619
pub enum ProofsFetcherError {
1720
QueryingLogs,
21+
BlockNumber,
1822
}
1923

2024
pub struct ProofsFetcher {
25+
rpc_provider: RPCProvider,
2126
aligned_service_manager: AlignedLayerServiceManagerContract,
27+
fetch_from_secs_ago: u64,
28+
block_time_secs: u64,
2229
}
2330

2431
impl ProofsFetcher {
2532
pub fn new(config: &Config) -> Self {
2633
let rpc_url = config.eth_rpc_url.parse().expect("correct url");
27-
let provider = ProviderBuilder::new().on_http(rpc_url);
34+
let rpc_provider = ProviderBuilder::new().on_http(rpc_url);
2835
let aligned_service_manager = AlignedLayerServiceManager::new(
2936
Address::from_str(&config.aligned_service_manager_address)
3037
.expect("Address to be correct"),
31-
provider,
38+
rpc_provider.clone(),
3239
);
3340

3441
Self {
42+
rpc_provider,
3543
aligned_service_manager,
44+
fetch_from_secs_ago: config.fetch_logs_from_secs_ago,
45+
block_time_secs: config.block_time_secs,
3646
}
3747
}
3848

3949
pub async fn fetch(&self) -> Result<Vec<Proof>, ProofsFetcherError> {
40-
info!("Fetching proofs from batch logs");
50+
let from_block = self.get_block_number_to_fetch_from().await?;
51+
info!(
52+
"Fetching proofs from batch logs starting from block number {}",
53+
from_block
54+
);
4155
// Subscribe to NewBatch event from AlignedServiceManager
4256
let logs = self
4357
.aligned_service_manager
4458
.NewBatchV3_filter()
45-
.from_block(0)
59+
.from_block(from_block)
4660
.query()
4761
.await
4862
.map_err(|_| ProofsFetcherError::QueryingLogs)?;
@@ -101,4 +115,16 @@ impl ProofsFetcher {
101115

102116
Ok(proofs)
103117
}
118+
119+
async fn get_block_number_to_fetch_from(&self) -> Result<u64, ProofsFetcherError> {
120+
let block_number = self
121+
.rpc_provider
122+
.get_block_number()
123+
.await
124+
.map_err(|_| ProofsFetcherError::BlockNumber)?;
125+
126+
let number_of_blocks_in_the_past = self.fetch_from_secs_ago / self.block_time_secs;
127+
128+
Ok(block_number.saturating_sub(number_of_blocks_in_the_past))
129+
}
104130
}

aggregation-mode/src/backend/types.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,20 @@ pub type AlignedLayerServiceManagerContract = AlignedLayerServiceManagerInstance
4848
RootProvider,
4949
>,
5050
>;
51+
52+
pub type RPCProvider = alloy::providers::fillers::FillProvider<
53+
alloy::providers::fillers::JoinFill<
54+
alloy::providers::Identity,
55+
alloy::providers::fillers::JoinFill<
56+
alloy::providers::fillers::GasFiller,
57+
alloy::providers::fillers::JoinFill<
58+
alloy::providers::fillers::BlobGasFiller,
59+
alloy::providers::fillers::JoinFill<
60+
alloy::providers::fillers::NonceFiller,
61+
alloy::providers::fillers::ChainIdFiller,
62+
>,
63+
>,
64+
>,
65+
>,
66+
alloy::providers::RootProvider,
67+
>;

config-files/config-proof-aggregator.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ private_key: "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6
44
eth_rpc_url: "http://localhost:8545"
55
eth_ws_url: "ws://localhost:8545"
66
max_proofs_in_queue: 1000
7-
submit_proofs_every_secs: 10
7+
# How far in the past should the service go to fetch batch logs
8+
fetch_logs_from_secs_ago: 86400 # 24hs
9+
# Anvil start with block time is 7 seconds
10+
block_time_secs: 7
811

912
ecdsa:
1013
private_key_store_path: "config-files/anvil.proof-aggregator.ecdsa.key.json"

0 commit comments

Comments
 (0)