1- use  crate :: { BlobberError ,  BlobberResult ,  Blobs ,  FetchResult } ; 
1+ use  crate :: { BlobFetcher ,   BlobberError ,  BlobberResult ,  Blobs ,  FetchResult } ; 
22use  alloy:: consensus:: { SidecarCoder ,  SimpleCoder ,  Transaction  as  _} ; 
33use  alloy:: eips:: eip7691:: MAX_BLOBS_PER_BLOCK_ELECTRA ; 
44use  alloy:: eips:: merge:: EPOCH_SLOTS ; 
55use  alloy:: primitives:: { B256 ,  Bytes ,  keccak256} ; 
6+ use  core:: fmt; 
67use  reth:: transaction_pool:: TransactionPool ; 
78use  reth:: { network:: cache:: LruMap ,  primitives:: Receipt } ; 
89use  signet_extract:: ExtractedEvent ; 
910use  signet_zenith:: Zenith :: BlockSubmitted ; 
1011use  signet_zenith:: ZenithBlock ; 
12+ use  std:: marker:: PhantomData ; 
1113use  std:: { 
1214    sync:: { Arc ,  Mutex } , 
1315    time:: Duration , 
@@ -37,11 +39,13 @@ enum CacheInst {
3739
3840/// Handle for the cache. 
3941#[ derive( Debug ,  Clone ) ]  
40- pub  struct  CacheHandle  { 
42+ pub  struct  CacheHandle < Coder  =  SimpleCoder >  { 
4143    sender :  mpsc:: Sender < CacheInst > , 
44+ 
45+     _coder :  PhantomData < Coder > , 
4246} 
4347
44- impl  CacheHandle  { 
48+ impl < Coder >  CacheHandle < Coder >  { 
4549    /// Sends a cache instruction. 
4650async  fn  send ( & self ,  inst :  CacheInst )  { 
4751        let  _ = self . sender . send ( inst) . await ; 
@@ -71,12 +75,14 @@ impl CacheHandle {
7175
7276    /// Fetch the blobs using [`Self::fetch_blobs`] and decode them to get the 
7377/// Zenith block data using the provided coder. 
74- pub  async  fn  fetch_and_decode_with_coder < C :   SidecarCoder > ( 
78+ pub  async  fn  fetch_and_decode ( 
7579        & self , 
7680        slot :  usize , 
7781        extract :  & ExtractedEvent < ' _ ,  Receipt ,  BlockSubmitted > , 
78-         mut  coder :  C , 
79-     )  -> BlobberResult < Bytes >  { 
82+     )  -> BlobberResult < Bytes > 
83+     where 
84+         Coder :  SidecarCoder  + Default , 
85+     { 
8086        let  tx_hash = extract. tx_hash ( ) ; 
8187        let  versioned_hashes = extract
8288            . tx 
@@ -87,23 +93,13 @@ impl CacheHandle {
8793
8894        let  blobs = self . fetch_blobs ( slot,  tx_hash,  versioned_hashes. to_owned ( ) ) . await ?; 
8995
90-         coder 
96+         Coder :: default ( ) 
9197            . decode_all ( blobs. as_ref ( ) ) 
9298            . ok_or_else ( BlobberError :: blob_decode_error) ?
9399            . into_iter ( ) 
94100            . find ( |data| keccak256 ( data)  == extract. block_data_hash ( ) ) 
95101            . map ( Into :: into) 
96-             . ok_or_else ( || BlobberError :: block_data_not_found ( tx_hash) ) 
97-     } 
98- 
99-     /// Fetch the blobs using [`Self::fetch_blobs`] and decode them using 
100- /// [`SimpleCoder`] to get the Zenith block data. 
101- pub  async  fn  fech_and_decode ( 
102-         & self , 
103-         slot :  usize , 
104-         extract :  & ExtractedEvent < ' _ ,  Receipt ,  BlockSubmitted > , 
105-     )  -> BlobberResult < Bytes >  { 
106-         self . fetch_and_decode_with_coder ( slot,  extract,  SimpleCoder :: default ( ) ) . await 
102+             . ok_or_else ( || BlobberError :: block_data_not_found ( extract. block_data_hash ( ) ) ) 
107103    } 
108104
109105    /// Fetch the blobs, decode them using the provided coder, and construct a 
@@ -117,15 +113,17 @@ impl CacheHandle {
117113///   decoded (e.g., due to a malformatted blob). 
118114/// - `Err(FetchError)` if there was an unrecoverable error fetching the 
119115///   blobs. 
120- pub  async  fn  signet_block_with_coder < C :   SidecarCoder > ( 
116+ pub  async  fn  signet_block ( 
121117        & self , 
122118        host_block_number :  u64 , 
123119        slot :  usize , 
124120        extract :  & ExtractedEvent < ' _ ,  Receipt ,  BlockSubmitted > , 
125-         coder :  C , 
126-     )  -> FetchResult < ZenithBlock >  { 
121+     )  -> FetchResult < ZenithBlock > 
122+     where 
123+         Coder :  SidecarCoder  + Default , 
124+     { 
127125        let  header = extract. ru_header ( host_block_number) ; 
128-         let  block_data = match  self . fetch_and_decode_with_coder ( slot,  extract,  coder ) . await  { 
126+         let  block_data = match  self . fetch_and_decode ( slot,  extract) . await  { 
129127            Ok ( buf)  => buf, 
130128            Err ( BlobberError :: Decode ( _) )  => { 
131129                trace ! ( "Failed to decode block data" ) ; 
@@ -135,44 +133,24 @@ impl CacheHandle {
135133        } ; 
136134        Ok ( ZenithBlock :: from_header_and_data ( header,  block_data) ) 
137135    } 
138- 
139-     /// Fetch the blobs, decode them using [`SimpleCoder`], and construct a 
140- /// Zenith block from the header and data. 
141- /// 
142- /// # Returns 
143- /// 
144- /// - `Ok(ZenithBlock)` if the block was successfully fetched and 
145- ///   decoded. 
146- /// - `Ok(ZenithBlock)` with an EMPTY BLOCK if the block_data could not be 
147- ///   decoded (e.g., due to a malformatted blob). 
148- /// - `Err(FetchError)` if there was an unrecoverable error fetching the 
149- ///   blobs. 
150- pub  async  fn  signet_block ( 
151-         & self , 
152-         host_block_number :  u64 , 
153-         slot :  usize , 
154-         extract :  & ExtractedEvent < ' _ ,  Receipt ,  BlockSubmitted > , 
155-     )  -> FetchResult < ZenithBlock >  { 
156-         self . signet_block_with_coder ( host_block_number,  slot,  extract,  SimpleCoder :: default ( ) ) . await 
157-     } 
158136} 
159137
160138/// Retrieves blobs and stores them in a cache for later use. 
161139pub  struct  BlobCacher < Pool >  { 
162-     fetcher :  crate :: BlobFetcher < Pool > , 
140+     fetcher :  BlobFetcher < Pool > , 
163141
164142    cache :  Mutex < LruMap < ( usize ,  B256 ) ,  Blobs > > , 
165143} 
166144
167- impl < Pool :  core :: fmt:: Debug >  core :: fmt:: Debug  for  BlobCacher < Pool >  { 
168-     fn  fmt ( & self ,  f :  & mut  core :: fmt:: Formatter < ' _ > )  -> core :: fmt:: Result  { 
145+ impl < Pool :  fmt:: Debug >  fmt:: Debug  for  BlobCacher < Pool >  { 
146+     fn  fmt ( & self ,  f :  & mut  fmt:: Formatter < ' _ > )  -> fmt:: Result  { 
169147        f. debug_struct ( "BlobCacher" ) . field ( "fetcher" ,  & self . fetcher ) . finish_non_exhaustive ( ) 
170148    } 
171149} 
172150
173151impl < Pool :  TransactionPool  + ' static >  BlobCacher < Pool >  { 
174152    /// Creates a new `BlobCacher` with the provided extractor and cache size. 
175- pub  fn  new ( fetcher :  crate :: BlobFetcher < Pool > )  -> Self  { 
153+ pub  fn  new ( fetcher :  BlobFetcher < Pool > )  -> Self  { 
176154        Self  {  fetcher,  cache :  LruMap :: new ( BLOB_CACHE_SIZE ) . into ( )  } 
177155    } 
178156
@@ -237,10 +215,10 @@ impl<Pool: TransactionPool + 'static> BlobCacher<Pool> {
237215/// 
238216/// # Panics 
239217/// This function will panic if the cache task fails to spawn. 
240- pub  fn  spawn ( self )  -> CacheHandle  { 
218+ pub  fn  spawn < C :   SidecarCoder  +  Default > ( self )  -> CacheHandle < C >  { 
241219        let  ( sender,  inst)  = mpsc:: channel ( CACHE_REQUEST_CHANNEL_SIZE ) ; 
242220        tokio:: spawn ( Arc :: new ( self ) . task_future ( inst) ) ; 
243-         CacheHandle  {  sender } 
221+         CacheHandle  {  sender,   _coder :   PhantomData  } 
244222    } 
245223} 
246224
@@ -256,7 +234,6 @@ mod tests {
256234        rlp:: encode, 
257235        signers:: { SignerSync ,  local:: PrivateKeySigner } , 
258236    } ; 
259-     use  init4_bin_base:: utils:: calc:: SlotCalculator ; 
260237    use  reth:: primitives:: Transaction ; 
261238    use  reth_transaction_pool:: { 
262239        PoolTransaction ,  TransactionOrigin , 
@@ -272,7 +249,6 @@ mod tests {
272249        let  test = signet_constants:: KnownChains :: Test ; 
273250
274251        let  constants:  SignetSystemConstants  = test. try_into ( ) . unwrap ( ) ; 
275-         let  calc = SlotCalculator :: new ( 0 ,  0 ,  12 ) ; 
276252
277253        let  explorer_url = "https://api.holesky.blobscan.com/" ; 
278254        let  client = reqwest:: Client :: builder ( ) . use_rustls_tls ( ) ; 
@@ -308,9 +284,8 @@ mod tests {
308284            . with_explorer_url ( explorer_url) 
309285            . with_client_builder ( client) 
310286            . unwrap ( ) 
311-             . with_slot_calculator ( calc) 
312287            . build_cache ( ) ?; 
313-         let  handle = cache. spawn ( ) ; 
288+         let  handle = cache. spawn :: < SimpleCoder > ( ) ; 
314289
315290        let  got = handle
316291            . fetch_blobs ( 
0 commit comments