Location: allways/validator/event_watcher.py:313-322, :324-332
Bug
process_block catches all exceptions and returns at DEBUG log level. sync_to then unconditionally advances self.cursor = end. Any block that failed to fetch during a sync window is never reprocessed.
Impact
- Missed
SwapCompleted / SwapTimedOut → miners permanently flagged busy in scoring.
- Missed
MinerActivated → active-set drift.
Self-healing via bootstrap on restart, but in-process the scoring replay is wrong until then.
Fix
On per-block exception either raise to caller, or keep a pending-retry list and only advance cursor past blocks that succeeded.
Location: allways/validator/event_watcher.py:313-322, :324-332
Bug
process_blockcatches all exceptions and returns at DEBUG log level.sync_tothen unconditionally advancesself.cursor = end. Any block that failed to fetch during a sync window is never reprocessed.Impact
SwapCompleted/SwapTimedOut→ miners permanently flagged busy in scoring.MinerActivated→ active-set drift.Self-healing via bootstrap on restart, but in-process the scoring replay is wrong until then.
Fix
On per-block exception either raise to caller, or keep a pending-retry list and only advance cursor past blocks that succeeded.