mod block_lifecycle;
mod bootstrap;
mod disk_monitor;
mod lifecycle;
mod loader;
mod replica;
mod tip;
mod view;
mod writer;
use std::path::PathBuf;
use std::sync::Arc;
use arc_swap::ArcSwap;
pub use lifecycle::LoadedState;
use miden_protocol::block::BlockNumber;
pub use replica::{BlockCache, BlockNotification, ProofCache, ProofNotification};
use tokio::sync::watch;
pub use view::{ScopedBlockNum, ScopedBlockRange, StateView, TransactionInputs};
use view::{SnapshotGuard, StateSnapshot};
pub use writer::{BlockWriter, ProofWriter, WriterTask};
use crate::blocks::BlockStore;
use crate::db::Db;
use crate::proven_tip::ProvenTipWriter;
pub struct State {
data_directory: PathBuf,
db: Arc<Db>,
block_store: Arc<BlockStore>,
latest_snapshot: Arc<ArcSwap<StateSnapshot>>,
proven_tip: ProvenTipWriter,
committed_tip_tx: Arc<watch::Sender<BlockNumber>>,
pub(crate) block_cache: BlockCache,
pub(crate) proof_cache: ProofCache,
}