Skip to main content

reth_prune/segments/user/
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, BlockReader, DBProvider, NodePrimitivesProvider,
9    PruneCheckpointWriter, StaticFileProviderFactory, StorageSettingsCache,
10};
11use reth_prune_types::{PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput};
12use tracing::instrument;
13
14#[derive(Debug)]
15pub struct Receipts {
16    mode: PruneMode,
17}
18
19impl Receipts {
20    pub const fn new(mode: PruneMode) -> Self {
21        Self { mode }
22    }
23}
24
25impl<Provider> Segment<Provider> for Receipts
26where
27    Provider: DBProvider<Tx: DbTxMut>
28        + PruneCheckpointWriter
29        + BlockReader
30        + StorageSettingsCache
31        + StaticFileProviderFactory
32        + NodePrimitivesProvider<Primitives: NodePrimitives<Receipt: Value>>,
33{
34    fn segment(&self) -> PruneSegment {
35        PruneSegment::Receipts
36    }
37
38    fn mode(&self) -> Option<PruneMode> {
39        Some(self.mode)
40    }
41
42    fn purpose(&self) -> PrunePurpose {
43        PrunePurpose::User
44    }
45
46    #[instrument(
47        name = "Receipts::prune",
48        target = "pruner",
49        skip(self, provider),
50        ret(level = "trace")
51    )]
52    fn prune(&self, provider: &Provider, input: PruneInput) -> Result<SegmentOutput, PrunerError> {
53        crate::segments::receipts::prune(provider, input)
54    }
55
56    fn save_checkpoint(
57        &self,
58        provider: &Provider,
59        checkpoint: PruneCheckpoint,
60    ) -> ProviderResult<()> {
61        crate::segments::receipts::save_checkpoint(provider, checkpoint)
62    }
63}