stratus/eth/storage/temporary/
mod.rs

1pub use inmemory::InMemoryTemporaryStorage;
2
3mod inmemory;
4
5use clap::Parser;
6use display_json::DebugAsJson;
7
8use super::RocksPermanentStorage;
9use crate::eth::primitives::BlockNumber;
10
11// -----------------------------------------------------------------------------
12// Config
13// -----------------------------------------------------------------------------
14
15/// Temporary storage configuration.
16#[derive(Parser, DebugAsJson, Clone, serde::Serialize)]
17pub struct TemporaryStorageConfig {
18    // No configuration needed for InMemoryTemporaryStorage
19}
20
21impl TemporaryStorageConfig {
22    /// Initializes temporary storage implementation.
23    pub fn init(&self, perm_storage: &RocksPermanentStorage) -> anyhow::Result<InMemoryTemporaryStorage> {
24        tracing::info!(config = ?self, "creating temporary storage");
25        let pending_block_number = compute_pending_block_number(perm_storage)?;
26        Ok(InMemoryTemporaryStorage::new(pending_block_number))
27    }
28}
29
30pub fn compute_pending_block_number(perm_storage: &RocksPermanentStorage) -> anyhow::Result<BlockNumber> {
31    let mined_block_number = perm_storage.read_mined_block_number();
32    Ok(if !perm_storage.has_genesis()? && mined_block_number == BlockNumber::ZERO {
33        BlockNumber::ZERO
34    } else {
35        mined_block_number + 1
36    })
37}