From 9de1f0905e0f6be0b416f646b528a581be75867d Mon Sep 17 00:00:00 2001 From: Georgios Konstantopoulos Date: Thu, 29 Jan 2026 17:09:38 -0800 Subject: [PATCH] feat(prune): add static file pruning support for sender recovery (#21598) --- .../src/segments/user/sender_recovery.rs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/crates/prune/prune/src/segments/user/sender_recovery.rs b/crates/prune/prune/src/segments/user/sender_recovery.rs index 948afe75a8..beb6e85bf1 100644 --- a/crates/prune/prune/src/segments/user/sender_recovery.rs +++ b/crates/prune/prune/src/segments/user/sender_recovery.rs @@ -1,14 +1,18 @@ use crate::{ db_ext::DbTxPruneExt, - segments::{PruneInput, Segment}, + segments::{self, PruneInput, Segment}, PrunerError, }; use reth_db_api::{tables, transaction::DbTxMut}; -use reth_provider::{BlockReader, DBProvider, TransactionsProvider}; +use reth_provider::{ + BlockReader, DBProvider, EitherWriterDestination, StaticFileProviderFactory, + StorageSettingsCache, TransactionsProvider, +}; use reth_prune_types::{ PruneMode, PruneProgress, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, }; -use tracing::{instrument, trace}; +use reth_static_file_types::StaticFileSegment; +use tracing::{debug, instrument, trace}; #[derive(Debug)] pub struct SenderRecovery { @@ -23,7 +27,11 @@ impl SenderRecovery { impl Segment for SenderRecovery where - Provider: DBProvider + TransactionsProvider + BlockReader, + Provider: DBProvider + + TransactionsProvider + + BlockReader + + StorageSettingsCache + + StaticFileProviderFactory, { fn segment(&self) -> PruneSegment { PruneSegment::SenderRecovery @@ -39,6 +47,16 @@ where #[instrument(target = "pruner", skip(self, provider), ret(level = "trace"))] fn prune(&self, provider: &Provider, input: PruneInput) -> Result { + if EitherWriterDestination::senders(provider).is_static_file() { + debug!(target: "pruner", "Pruning transaction senders from static files."); + return segments::prune_static_files( + provider, + input, + StaticFileSegment::TransactionSenders, + ) + } + debug!(target: "pruner", "Pruning transaction senders from database."); + let tx_range = match input.get_next_tx_num_range(provider)? { Some(range) => range, None => {