Skip to main content

reth_storage_api/
prune_checkpoint.rs

1use alloc::vec::Vec;
2use reth_prune_types::{PruneCheckpoint, PruneSegment};
3use reth_storage_errors::provider::ProviderResult;
4
5/// The trait for fetching prune checkpoint related data.
6#[auto_impl::auto_impl(&, Arc)]
7pub trait PruneCheckpointReader: Send {
8    /// Fetch the prune checkpoint for the given segment.
9    fn get_prune_checkpoint(
10        &self,
11        segment: PruneSegment,
12    ) -> ProviderResult<Option<PruneCheckpoint>>;
13
14    /// Fetch all the prune checkpoints.
15    fn get_prune_checkpoints(&self) -> ProviderResult<Vec<(PruneSegment, PruneCheckpoint)>>;
16
17    /// Fetch checkpoints for reporting data availability, accounting for data still retained in
18    /// other storage backends. This does not modify the stored checkpoints.
19    ///
20    /// The default returns the stored checkpoints. Implementations may lower their block and
21    /// transaction numbers when continuous coverage can be verified, preserving the prune mode.
22    /// Use [`Self::get_prune_checkpoints`] for pruning progress instead.
23    fn get_prune_checkpoints_for_availability(
24        &self,
25    ) -> ProviderResult<Vec<(PruneSegment, PruneCheckpoint)>> {
26        self.get_prune_checkpoints()
27    }
28}
29
30/// The trait for updating prune checkpoint related data.
31#[auto_impl::auto_impl(&, Arc)]
32pub trait PruneCheckpointWriter {
33    /// Save prune checkpoint.
34    fn save_prune_checkpoint(
35        &self,
36        segment: PruneSegment,
37        checkpoint: PruneCheckpoint,
38    ) -> ProviderResult<()>;
39}