|
4 | 4 | //! It is primarily intended for testing and development. |
5 | 5 |
|
6 | 6 | use crate::{ |
7 | | - BlockData, ColdReceipt, ColdResult, ColdStorage, ColdStorageError, Confirmed, Filter, |
8 | | - HeaderSpecifier, ReceiptSpecifier, RpcLog, SignetEventsSpecifier, TransactionSpecifier, |
9 | | - ZenithHeaderSpecifier, |
| 7 | + BlockData, ColdReceipt, ColdResult, ColdStorage, ColdStorageError, ColdStorageRead, |
| 8 | + ColdStorageWrite, Confirmed, Filter, HeaderSpecifier, ReceiptSpecifier, RpcLog, |
| 9 | + SignetEventsSpecifier, TransactionSpecifier, ZenithHeaderSpecifier, |
10 | 10 | }; |
11 | 11 | use alloy::primitives::{B256, BlockNumber}; |
12 | 12 | use signet_storage_types::{ |
@@ -47,6 +47,7 @@ struct MemColdBackendInner { |
47 | 47 | /// |
48 | 48 | /// This backend is thread-safe and suitable for concurrent access. |
49 | 49 | /// All operations are protected by an async read-write lock. |
| 50 | +#[derive(Clone)] |
50 | 51 | pub struct MemColdBackend { |
51 | 52 | inner: Arc<RwLock<MemColdBackendInner>>, |
52 | 53 | } |
@@ -100,7 +101,7 @@ impl MemColdBackendInner { |
100 | 101 | } |
101 | 102 | } |
102 | 103 |
|
103 | | -impl ColdStorage for MemColdBackend { |
| 104 | +impl ColdStorageRead for MemColdBackend { |
104 | 105 | async fn get_header(&self, spec: HeaderSpecifier) -> ColdResult<Option<SealedHeader>> { |
105 | 106 | let inner = self.inner.read().await; |
106 | 107 | match spec { |
@@ -274,8 +275,10 @@ impl ColdStorage for MemColdBackend { |
274 | 275 | let inner = self.inner.read().await; |
275 | 276 | Ok(inner.headers.last_key_value().map(|(k, _)| *k)) |
276 | 277 | } |
| 278 | +} |
277 | 279 |
|
278 | | - async fn append_block(&self, data: BlockData) -> ColdResult<()> { |
| 280 | +impl ColdStorageWrite for MemColdBackend { |
| 281 | + async fn append_block(&mut self, data: BlockData) -> ColdResult<()> { |
279 | 282 | let mut inner = self.inner.write().await; |
280 | 283 |
|
281 | 284 | let block = data.block_number(); |
@@ -323,20 +326,22 @@ impl ColdStorage for MemColdBackend { |
323 | 326 | Ok(()) |
324 | 327 | } |
325 | 328 |
|
326 | | - async fn append_blocks(&self, data: Vec<BlockData>) -> ColdResult<()> { |
| 329 | + async fn append_blocks(&mut self, data: Vec<BlockData>) -> ColdResult<()> { |
327 | 330 | for block_data in data { |
328 | 331 | self.append_block(block_data).await?; |
329 | 332 | } |
330 | 333 | Ok(()) |
331 | 334 | } |
332 | 335 |
|
333 | | - async fn truncate_above(&self, block: BlockNumber) -> ColdResult<()> { |
| 336 | + async fn truncate_above(&mut self, block: BlockNumber) -> ColdResult<()> { |
334 | 337 | let mut inner = self.inner.write().await; |
335 | 338 | inner.truncate_above(block); |
336 | 339 | Ok(()) |
337 | 340 | } |
| 341 | +} |
338 | 342 |
|
339 | | - async fn drain_above(&self, block: BlockNumber) -> ColdResult<Vec<Vec<ColdReceipt>>> { |
| 343 | +impl ColdStorage for MemColdBackend { |
| 344 | + async fn drain_above(&mut self, block: BlockNumber) -> ColdResult<Vec<Vec<ColdReceipt>>> { |
340 | 345 | let mut inner = self.inner.write().await; |
341 | 346 |
|
342 | 347 | // Collect receipts for blocks above `block` in ascending order |
|
0 commit comments