Incident
On 2026-05-26 ~05:14 UTC, two demo explorers auto-generated with random animal-name slugs were both syncing the same chain via the same RPC endpoint and contributed ~1900 / ~6600 waiting blockSync jobs (29%):
- ws 17117 / explorer 10222 — slug
short-mealy-lamp — RPC https://rpc.dotone.network
- ws 17118 / explorer 10223 — slug
brown-melodic-book — RPC https://rpc.dotone.network
Both had isDemo=true, shouldSync=true, plan=demo, status=active. They were resolved by UPDATE explorers SET "shouldSync" = false WHERE id IN (10222, 10223, 10224, 10225) plus a manual updateExplorerSyncingProcess enqueue (the raw SQL bypassed the Sequelize afterUpdate hook).
Why this matters
- Demos are meant for evaluation, not production sync of an active chain.
- A single user (or scripted client) creating multiple demos against the same fast chain can starve paying customers' sync slots.
- All 4 demo explorers disabled in the incident were quietly syncing — no abuse signal had fired.
Proposed mitigations
- Deduplicate demos by RPC URL — when creating a demo, reject if an active demo already exists on the same
rpcServer (or merge to the existing one).
- Stricter demo cap — demos are already low-tier (cap 200), but lower the cap further to e.g. 50 and shorten retention.
- Demo TTL — auto-disable demo
shouldSync after N hours of no UI interaction, regardless of the explorer expiry job.
- Investigate if the 2 dotone demos belong to the same actor (IP / signup pattern) and ban if abuse pattern.
Acceptance criteria
- Cannot create more than one active demo per
rpcServer.
- Demo
shouldSync auto-flips to false after configurable idle period.
Priority
P3. No customer impact today after the manual fix; revisit when working on demo lifecycle.
Incident
On 2026-05-26 ~05:14 UTC, two demo explorers auto-generated with random animal-name slugs were both syncing the same chain via the same RPC endpoint and contributed ~1900 / ~6600 waiting blockSync jobs (29%):
short-mealy-lamp— RPChttps://rpc.dotone.networkbrown-melodic-book— RPChttps://rpc.dotone.networkBoth had
isDemo=true,shouldSync=true, plan=demo, status=active. They were resolved byUPDATE explorers SET "shouldSync" = false WHERE id IN (10222, 10223, 10224, 10225)plus a manualupdateExplorerSyncingProcessenqueue (the raw SQL bypassed the SequelizeafterUpdatehook).Why this matters
Proposed mitigations
rpcServer(or merge to the existing one).shouldSyncafter N hours of no UI interaction, regardless of the explorer expiry job.Acceptance criteria
rpcServer.shouldSyncauto-flips to false after configurable idle period.Priority
P3. No customer impact today after the manual fix; revisit when working on demo lifecycle.