Necropolis

Necropolis.fund

Robinhood Chain · 4663 Demo register

Robinhood Chain · Pons

Every launchpad here makes the same waste product. Nobody owns it.

207,893 tokens launched. 3,228 reached a Uniswap pool. The rest are still sitting in their curve contracts, holding ETH that nobody can get out.

Necropolis is the register of those curves — and the escrow that closes the gap.

The Plot Map

Every dormant ETH-quoted curve in the register, one marker each — sorted by how close it died to its 4.2 ETH threshold. Hover to read a grave, click to open it.

Warm — gap ≤ 0.5 ETH Cooling — gap ≤ 2 ETH Cold — beyond reach Revived Marker height ∝ ETH entombed

The Register

How a revival settles

Five stages. Every one of them is a contract call anyone can make.

STAGE 01

Entomb

The indexer finds a curve with no trade for 7 days and a gap under 2 ETH. openCrypt() deploys a CREATE2 clone over it. Permissionless, and it refuses any curve that is still trading.

STAGE 02

Bounty

Trapped holders post ETH via postBounty(). They are paying for an exit that does not otherwise exist: without graduation there is no pool to sell their bag into.

STAGE 03

Pledge

Outsiders pledge() the ETH that closes the gap. Pledgers own the recovered tokens; bounty posters do not. Two ledgers, two refund paths, no overlap.

STAGE 04

Exhume

exhume() buys the remainder of the curve in one transaction and then asserts curve.graduated(). If graduation did not fire, the whole call reverts and nothing was spent.

STAGE 05

Settle

Liquidity locks permanently into a Uniswap v4 pool behind the Pons hook. Pledgers claim() tokens, bounty and any unspent ETH pro-rata. Holders finally have a market.

Why the last slice is the cheapest supply on the chain

A Pons curve books reserve against supply sold as R = k·s²/2, so s(R) = 800M · √(R / 4.2). Graduation then seeds the pool with the reserved 200M tokens against the collected ETH.

That fixes the pool's opening price at 4.2 ETH / 200M = 2.10 × 10⁻⁸ ETH per token — and it fixes the reviver's average price strictly below it, because every token on the curve costs less than the curve's own final marginal price.

The gap is not a discount somebody forgot to close. It is the shape of the curve.

And why that is not free money

  • Snipe tax. Pons applies a decaying tax on buys right after graduation. The reviver's position is already open, but exiting into that window is expensive.
  • The holders you just freed. Graduation hands every trapped bag a market for the first time. Some of them have been waiting months to sell.
  • The gap can widen. A sell into the curve between pledge and exhume pushes the reserve back down. The crypt re-reads the requirement live and reverts rather than half-spending.
  • Wider gap, better spread, more capital. A 1.7 ETH gap prices far under the pool, but that is 1.7 ETH of real exposure to a token that already failed once.

What is actually running

Four layers, no custody anywhere in the path. And not a .fun — every launchpad on this chain is one, and they all mint a token and take a fee on the way past. This pools capital into an escrow and refunds it if the transaction never happens.

Contracts NecropolisFactory.sol · NecropolisCrypt.sol · IPonsCurve.sol
EIP-1167 clones per grave. Pull-based settlement with no contributor loop, so no number of pledgers can brick a payout. All Pons ABI reads funnel through one PonsAdapter library, so a selector change upstream is a one-file patch. Foundry suite covers the happy path, the collapse-and-refund path, the gap-widens-mid-flight revert, and a fuzz test asserting the crypt always drains to dust.
Indexer indexer/src/indexer.ts · curve.ts · config.ts
Backfills the Pons launch log, then re-reads live curve state on a loop. Curve reads batch through multicall3 in chunks of 400, and trade recency comes from one windowed getLogs across every curve at once — the CurveTrade topic is identical on all of them. A full refresh of 30,000 curves is ~75 round trips, not 90,000.
Storage & API indexer/src/db.ts · api/src/server.ts
SQLite with one covering index on (graduated, quote_asset, gap_sort, last_trade_at) — the register's only hot query. Wei is stored as TEXT and hydrated to bigint at the boundary; nothing touches a float. Fastify serves reads only: the API holds no key and relays no transaction.
Web web/index.html
This page. The plot map is canvas, the curve maths mirrors curve.ts exactly, and the payoff table is computed the same way claim() settles it — so the figure a pledger reads before signing is the figure the contract pays.