Duplication,
made unrepresentable.
Duped is an economy kernel for online games. It removes item dupes, gold double-spends, and cross-region trade exploits — by making every economic action one atomic, idempotent transaction. The bug that's wrecked game economies for 25 years, gone at the data layer.
We threw 10,000 bots at one legendary sword across two regions. It stayed exactly one — and you can run the SQL proof yourself.
A dupe bug is counterfeiting.
When a player duplicates a legendary or spends the same gold twice, the economy inflates and trust collapses. This isn't a fringe glitch — it has shipped in the biggest games ever made.
Amazon repeatedly froze all trading and gold transfers to stop item and gold dupes.
Item and gold dupes defined its black market for roughly 20 years.
Dupe incidents forced full economy rollbacks.
Teams of hundreds keep shipping dupes — because the root cause is distributed-systems correctness, not bad luck.
A dupe isn't a game bug. It's a double-commit bug.
Every classic dupe is the same database failure in disguise.
Fix the consistency, and duplication has nowhere to live.
A sword is not money — so we protect them differently.
Every unique item is exactly one row with one owner and a version. Moving it is a conditional UPDATE that must match the current owner + version — two concurrent transfers can't both match, so exactly one wins. “Owned twice” has no representation.
UPDATE item_instances SET owner_id=:to, version=version+1 WHERE instance_id=:id AND owner_id=:from AND version=:expected; -- rowCount must be 1
Balances are sharded and can't go negative; every transfer writes a balanced double-entry ledger. Supply in = supply out, to the minor unit. No inflation.
One query proves it.
No dashboards to trust — the invariants are runnable SQL against the live truth core. Here's the same check the demo runs on camera.
Strongly-consistent, active-active multi-region truth core. The single source of authoritative economy state.
The live world read model — written only by the outbox projector, never inside a trade.
Edge deploy with OIDC auth — no credentials in code, from local dev to production.