@@ -12,6 +12,7 @@ import (
1212 "github.com/evstack/ev-node/block/internal/common"
1313 da "github.com/evstack/ev-node/block/internal/da"
1414 "github.com/evstack/ev-node/block/internal/executing"
15+ "github.com/evstack/ev-node/block/internal/pruner"
1516 "github.com/evstack/ev-node/block/internal/reaping"
1617 "github.com/evstack/ev-node/block/internal/submitting"
1718 "github.com/evstack/ev-node/block/internal/syncing"
@@ -29,6 +30,7 @@ import (
2930// Components represents the block-related components
3031type Components struct {
3132 Executor * executing.Executor
33+ Pruner * pruner.Pruner
3234 Reaper * reaping.Reaper
3335 Syncer * syncing.Syncer
3436 Submitter * submitting.Submitter
@@ -60,6 +62,11 @@ func (bc *Components) Start(ctx context.Context) error {
6062 return fmt .Errorf ("failed to start executor: %w" , err )
6163 }
6264 }
65+ if bc .Pruner != nil {
66+ if err := bc .Pruner .Start (ctxWithCancel ); err != nil {
67+ return fmt .Errorf ("failed to start pruner: %w" , err )
68+ }
69+ }
6370 if bc .Reaper != nil {
6471 if err := bc .Reaper .Start (ctxWithCancel ); err != nil {
6572 return fmt .Errorf ("failed to start reaper: %w" , err )
@@ -96,6 +103,11 @@ func (bc *Components) Stop() error {
96103 errs = errors .Join (errs , fmt .Errorf ("failed to stop executor: %w" , err ))
97104 }
98105 }
106+ if bc .Pruner != nil {
107+ if err := bc .Pruner .Stop (); err != nil {
108+ errs = errors .Join (errs , fmt .Errorf ("failed to stop pruner: %w" , err ))
109+ }
110+ }
99111 if bc .Reaper != nil {
100112 if err := bc .Reaper .Stop (); err != nil {
101113 errs = errors .Join (errs , fmt .Errorf ("failed to stop reaper: %w" , err ))
@@ -166,6 +178,14 @@ func NewSyncComponents(
166178 syncer .SetBlockSyncer (syncing .WithTracingBlockSyncer (syncer ))
167179 }
168180
181+ var execPruner pruner.ExecMetaPruner
182+ if exec != nil {
183+ if candidate , ok := exec .(pruner.ExecMetaPruner ); ok {
184+ execPruner = candidate
185+ }
186+ }
187+ recoveryPruner := pruner .New (store , execPruner , config .Node .StateHistoryRetention , pruner .DefaultPruneInterval , logger .With ().Str ("component" , "Pruner" ).Logger ())
188+
169189 // Create submitter for sync nodes (no signer, only DA inclusion processing)
170190 var daSubmitter submitting.DASubmitterAPI = submitting .NewDASubmitter (daClient , config , genesis , blockOpts , metrics , logger , headerDAHintAppender , dataDAHintAppender )
171191 if config .Instrumentation .IsTracingEnabled () {
@@ -189,6 +209,7 @@ func NewSyncComponents(
189209 Syncer : syncer ,
190210 Submitter : submitter ,
191211 Cache : cacheManager ,
212+ Pruner : recoveryPruner ,
192213 errorCh : errorCh ,
193214 }, nil
194215}
@@ -248,6 +269,14 @@ func NewAggregatorComponents(
248269 executor .SetBlockProducer (executing .WithTracingBlockProducer (executor ))
249270 }
250271
272+ var execPruner pruner.ExecMetaPruner
273+ if exec != nil {
274+ if candidate , ok := exec .(pruner.ExecMetaPruner ); ok {
275+ execPruner = candidate
276+ }
277+ }
278+ recoveryPruner := pruner .New (store , execPruner , config .Node .StateHistoryRetention , pruner .DefaultPruneInterval , logger .With ().Str ("component" , "Pruner" ).Logger ())
279+
251280 reaper , err := reaping .NewReaper (
252281 exec ,
253282 sequencer ,
@@ -264,6 +293,7 @@ func NewAggregatorComponents(
264293 if config .Node .BasedSequencer { // no submissions needed for bases sequencer
265294 return & Components {
266295 Executor : executor ,
296+ Pruner : recoveryPruner ,
267297 Reaper : reaper ,
268298 Cache : cacheManager ,
269299 errorCh : errorCh ,
@@ -290,6 +320,7 @@ func NewAggregatorComponents(
290320
291321 return & Components {
292322 Executor : executor ,
323+ Pruner : recoveryPruner ,
293324 Reaper : reaper ,
294325 Submitter : submitter ,
295326 Cache : cacheManager ,
0 commit comments