Skip to content

Demo explorer flood: two auto-generated demos on the same RPC (rpc.dotone.network) overwhelmed blockSync #1320

@antoinedc

Description

@antoinedc

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

  1. 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).
  2. Stricter demo cap — demos are already low-tier (cap 200), but lower the cap further to e.g. 50 and shorten retention.
  3. Demo TTL — auto-disable demo shouldSync after N hours of no UI interaction, regardless of the explorer expiry job.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions