reth_prune/segments/user/
receipts.rs1use 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, TransactionsProvider,
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 + TransactionsProvider
30 + BlockReader
31 + StorageSettingsCache
32 + StaticFileProviderFactory
33 + NodePrimitivesProvider<Primitives: NodePrimitives<Receipt: Value>>,
34{
35 fn segment(&self) -> PruneSegment {
36 PruneSegment::Receipts
37 }
38
39 fn mode(&self) -> Option<PruneMode> {
40 Some(self.mode)
41 }
42
43 fn purpose(&self) -> PrunePurpose {
44 PrunePurpose::User
45 }
46
47 #[instrument(target = "pruner", skip(self, provider), ret(level = "trace"))]
48 fn prune(&self, provider: &Provider, input: PruneInput) -> Result<SegmentOutput, PrunerError> {
49 crate::segments::receipts::prune(provider, input)
50 }
51
52 fn save_checkpoint(
53 &self,
54 provider: &Provider,
55 checkpoint: PruneCheckpoint,
56 ) -> ProviderResult<()> {
57 crate::segments::receipts::save_checkpoint(provider, checkpoint)
58 }
59}