A Dusk archive node can be caught up at the chain tip and still be missing the history I need to credit an old deposit.
The trap is the bootstrap path. Archive Rusk keeps finalized indexes used by moonlightHistory, fullMoonlightHistory, and finalizedEvents. But if I bring the node up from the installer’s download_state snapshot, I restore execution state, not the archive indexes for blocks before that snapshot.
So “synced” is not the readiness check I care about.
For a Moonlight deposit service, I can query finalized history, see clean responses, and still have a blind range behind the snapshot boundary. The chain state is current. My historical ingestion is not. A backfill through that node can quietly skip an older deposit while every health check near the tip looks normal.
If I need complete history, the archive has to sync from genesis or come from a trusted backup that already contains the archive databases. Then I need to test the earliest block range my service promises to cover before I call it ready.
I would rather fail readiness loudly than discover the missing range when a user asks why a finalized DUSK deposit never reached their balance.
#dusk $DUSK @Dusk
The trap is the bootstrap path. Archive Rusk keeps finalized indexes used by moonlightHistory, fullMoonlightHistory, and finalizedEvents. But if I bring the node up from the installer’s download_state snapshot, I restore execution state, not the archive indexes for blocks before that snapshot.
So “synced” is not the readiness check I care about.
For a Moonlight deposit service, I can query finalized history, see clean responses, and still have a blind range behind the snapshot boundary. The chain state is current. My historical ingestion is not. A backfill through that node can quietly skip an older deposit while every health check near the tip looks normal.
If I need complete history, the archive has to sync from genesis or come from a trusted backup that already contains the archive databases. Then I need to test the earliest block range my service promises to cover before I call it ready.
I would rather fail readiness loudly than discover the missing range when a user asks why a finalized DUSK deposit never reached their balance.
#dusk $DUSK @Dusk
