reth_prune/segments/static_file/
receipts.rs

1use crate::{
2    segments::{PruneInput, Segment},
3    PrunerError,
4};
5use reth_db_api::{table::Value, transaction::DbTxMut};
6use reth_primitives_traits::NodePrimitives;
7use reth_provider::{
8    errors::provider::ProviderResult, providers::StaticFileProvider, BlockReader, DBProvider,
9    PruneCheckpointWriter, StaticFileProviderFactory, TransactionsProvider,
10};
11use reth_prune_types::{PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput};
12use reth_static_file_types::StaticFileSegment;
13
14#[derive(Debug)]
15pub struct Receipts<N> {
16    static_file_provider: StaticFileProvider<N>,
17}
18
19impl<N> Receipts<N> {
20    pub const fn new(static_file_provider: StaticFileProvider<N>) -> Self {
21        Self { static_file_provider }
22    }
23}
24
25impl<Provider> Segment<Provider> for Receipts<Provider::Primitives>
26where
27    Provider: StaticFileProviderFactory<Primitives: NodePrimitives<Receipt: Value>>
28        + DBProvider<Tx: DbTxMut>
29        + PruneCheckpointWriter
30        + TransactionsProvider
31        + BlockReader,
32{
33    fn segment(&self) -> PruneSegment {
34        PruneSegment::Receipts
35    }
36
37    fn mode(&self) -> Option<PruneMode> {
38        self.static_file_provider
39            .get_highest_static_file_block(StaticFileSegment::Receipts)
40            .map(PruneMode::before_inclusive)
41    }
42
43    fn purpose(&self) -> PrunePurpose {
44        PrunePurpose::StaticFile
45    }
46
47    fn prune(&self, provider: &Provider, input: PruneInput) -> Result<SegmentOutput, PrunerError> {
48        crate::segments::receipts::prune(provider, input)
49    }
50
51    fn save_checkpoint(
52        &self,
53        provider: &Provider,
54        checkpoint: PruneCheckpoint,
55    ) -> ProviderResult<()> {
56        crate::segments::receipts::save_checkpoint(provider, checkpoint)
57    }
58}