History read before the event skip-list is missing every event the old allowlist did not keep #23
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was found
While checking #22's endpoint against mainnet, the mining address
qzowWAgbzjc2XfHY4vyEo2eVLKbknTESUFoXnisQuUh1x1koo(first reward at block 13160) had no deposit belowtransfer_count17,142, at block 18,511.indexed_fromsays 1./v1/chains/quantus/events/Wormhole/NativeTransferred?before=18510is empty, whileMiningRewards/MinerRewardedandBalances/Transferbelow 18510 are present.Wormhole::NativeTransferredin blocks 18400 and 18509, under spec 152 (the same runtime as the blocks that are indexed). The chain has the events; the index does not.Why
Until
1e8869e(2026-09-10 07:55 +0300, "index the whole event surface") the event interest list was an allowlist of two entries:("MiningRewards", "*")and("Balances", "Transfer"). Every block the backfill read before that deploy was claimed inevent_scanwith only those two kinds kept. The skip-list that replaced it only applies to blocks read afterwards, andevent_scannever goes back over a range it has claimed.The boundary on mainnet is block 18510, whose first surviving deposit is stamped 2026-09-10T05:03Z, the deploy. Planck and Heisenberg have the same hole over whatever they had read by then.
What is missing below it is not only wormhole transfers but every kind the allowlist didn't name. So account pages, the distribution table's flows and the wormhole summary are all quietly short for that history, and nothing on the site says so.
Fix
Re-read history under the current policy.
record_eventsandrecord_extrinsicsare upserts on their primary keys, so reading a block twice is idempotent. A migration that sets each chain'sevent_scan.low = highmakes the backfill walk from the tip back to genesis again.indexed_fromreports the true, shrinking gap while it does, rather than a claim of coverage the rows don't support.A cursor that records what was read, not only where, would stop the next policy change from doing this again. That is a bigger change. For now, a note in CLAUDE.md's "things that cost an afternoon" says that changing
SKIPPED_EVENTSneeds a migration like this one.