@@ -2,47 +2,61 @@ use std::str::FromStr;
22
33use super :: {
44 config:: Config ,
5- types:: { AlignedLayerServiceManager , AlignedLayerServiceManagerContract } ,
5+ types:: { AlignedLayerServiceManager , AlignedLayerServiceManagerContract , RPCProvider } ,
66} ;
77use crate :: {
88 backend:: s3:: get_aligned_batch_from_s3,
99 zk:: { backends:: sp1:: SP1Proof , Proof } ,
1010} ;
1111use aligned_sdk:: core:: types:: ProvingSystemId ;
12- use alloy:: { primitives:: Address , providers:: ProviderBuilder } ;
12+ use alloy:: {
13+ primitives:: Address ,
14+ providers:: { Provider , ProviderBuilder } ,
15+ } ;
1316use tracing:: { error, info} ;
1417
1518#[ derive( Debug ) ]
1619pub enum ProofsFetcherError {
1720 QueryingLogs ,
21+ BlockNumber ,
1822}
1923
2024pub struct ProofsFetcher {
25+ rpc_provider : RPCProvider ,
2126 aligned_service_manager : AlignedLayerServiceManagerContract ,
27+ fetch_from_secs_ago : u64 ,
28+ block_time_secs : u64 ,
2229}
2330
2431impl 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}
0 commit comments