Protocol dossier
The civilization is not described by the protocol. It is produced by it.
RELICS is a fully on-chain art system where $RELICS market activity in the canonical Uniswap v4 pool becomes permanent archaeological condition.
The pool moves. $RELICS is bought or sold against WETH.
`afterSwap` or `afterAddLiquidity` records bounded market memory.
Volume, tick, stress, liquidity, volatility, and seed change.
Collapse, famine, migration, reconstruction, and scar state update.
The artifact renders fully on-chain JSON and SVG from the changed state.
System record
One 10,000-unit civilization, viewed through two layers.
10,000 whole $RELICS units back up to 10,000 Relics. The relationship is a backing rule, not a live one-to-one parity of minted tokens: an account may hold at most floor(balance / 1e18) Relics, and it holds exactly as many as it has chosen to awaken. A dormant Relic identity preserves its DNA and history but is not an active ERC-721 until an eligible holder explicitly awakens it.
10,000 whole $RELICS units back up to 10,000 Relics. All 10,000 $RELICS enter the canonical pool at genesis in a single Uniswap v4 position with zero seeded WETH. Zero Relics exist at genesis; each is awakened by a holder, deliberately.
Each whole RELICS unit establishes capacity for one active Relic. Up to eight Relics may awaken through an explicitly authorized acquisition flow. Additional capacity remains latent until the holder elects to awaken it. Latent capacity is derived from your balance and is never stored — it is not an owned NFT.
An unsolicited RELICS transfer cannot force a dormant Relic to materialize. A receive of $RELICS — including a swap output — performs no ERC-721 work of any kind. The only mint site in the contract sits inside awaken(), whose recipient is always msg.sender and which has no recipient parameter.
The ERC-20 and ERC-721 layers are separate standard contracts — not ERC404/DN404, and not a wrapper. Whole units only. balanceOf and ownerOf are OpenZeppelin's, unmodified. The backing rule, activeRelics(a) ≤ floor(balance(a)/1e18), is enforced by revert, never by concealment.
The canonical RELICS/WETH pool calls afterInitialize, afterAddLiquidity, and afterSwap. Every before-hook, both donate hooks, the remove-liquidity hook and all four return-delta permissions are disabled, so the hook cannot alter a swap, take a fee, or refuse a trade. It records bounded market state only.
Token and hook ownership are renounced: both owner() addresses read address(0), so there is no admin, no upgrade path, no metadata override and no pool rebinding. The NFT and renderer never had an owner. The canonical pool binding is one-shot and already spent. The whole 10,000-unit supply entered one single-sided Uniswap v4 position with zero seeded WETH.
One position, single-sided, uncapped above. Zero WETH is seeded — the layout asserts a zero WETH contribution rather than merely intending one. The lower bound is the launch tick itself: with the whole supply starting inside the position and a 0.30% fee on both legs, no round trip through the pool can end below launch, so WETH parked beneath it would be an unreachable bid.
There are no transfer taxes, whitelist gates, blacklist controls, hidden reserves, or permissioned market access mechanics. No protocol-side power remains — token and hook ownership are renounced, and the NFT and renderer never had an owner.
Hook callbacks do not render or loop over artifact state. The renderer reads current global market state, holder count, DNA and compact token state when tokenURI is called — so one swap changes the rendered output of the whole collection.
Gas was relocated, not removed. A saturated buy costs about 246k gas and materialises ZERO Relics. Awakening is a separate transaction you pay for: about 1.63M gas for a batch of eight virgin ids. Materialising a 9,000-unit position takes roughly 1,125 separate awaken transactions.
tokenURI returns base64 JSON with embedded base64 SVG. No IPFS, no CDN, no external renderer, no owner-controlled baseURI. The renderer occupies 24,543 of the 24,576 bytes EIP-170 permits — 33 bytes of margin, and no upgrade path.
Archetypes define sacred object form. Palette houses define material culture. Market history defines scars, corrosion, reconstruction, and instability.
Hook callback architecture
The hook never renders. It only records pressure.
Hook callbacks are O(1): no rendering, no per-NFT loops, no unbounded mutation path inside the hook itself. It cannot alter execution either — every return-delta permission is disabled.
Honest cost disclosure: a buy no longer mints anything, so the swap path carries no per-Relic cost at all. A saturated buy measures 245,685 gas (it was 3,724,771 under the retired automatic model). That cost was relocated, not removed: awakening is now a separate transaction the holder pays for, at roughly 1.63M gas for a batch of eight virgin ids — so materialising a 9,000-unit position takes about 1,125 separate awaken transactions.
Binds the canonical PoolKey and fixes the civilization’s market environment.
Observes liquidity additions only — the hook has no afterRemoveLiquidity. Additions accumulate as civic depth; long gaps between observed additions read as drought in the render grammar.
Records directional pressure: buy/sell volume, tick movement, stress, volatility, drawdown, and market seed.
The capacity model
Buying gives you the right to awaken. Awakening is your own deliberate act.
An unsolicited RELICS transfer cannot force a dormant Relic to materialize. A receive of $RELICS — including a swap output — performs no ERC-721 work of any kind. There is exactly one mint site in the contract, it sits inside awaken(), and its recipient is always the caller. A dormant Relic identity preserves its DNA and history but is not an active ERC-721 until an eligible holder explicitly awakens it.
You buy $RELICS
The swap settles like any ERC-20 swap and your fungible balance arrives immediately. No Relic is minted in that transaction. Buys materialise zero Relics — that is the design, not a delay.
Your latent capacity rises
Each whole RELICS unit establishes capacity for one active Relic. Latent capacity is derived from your balance and is never stored anywhere. It is the right to awaken a Relic, held by you and spendable only by you. It is not an owned NFT and should never be counted as one.
You awaken, in a second explicit transaction
Read nextAwakening(you) to see exactly which identities you will receive, then call awaken with them. Up to eight Relics may awaken through an explicitly authorized acquisition flow; additional capacity remains latent until you elect to awaken it. Call again for the next batch.
They are ordinary ERC-721 tokens
From that moment the Relics are transferable, listable, and visible on any marketplace, with no wrapping step and no cost to become visible. balanceOf and ownerOf are OpenZeppelin's, unmodified.
Ids are not chosen by you and not chosen by the contract either. The dormancy pool is a set drawn at its minimum, so nobody can steer which identity surfaces next. Because the draw is public and deterministic, awaken() makes you restate it: you name the identities you will receive, and a pool head that changed between your preview and your transaction cannot hand you one you did not name. It gives you fewer than you asked for, or — below the floor you set — nothing at all.
An earlier all-or-nothing form of awaken() reverted every pending awakening whenever the head moved — including from an ordinary holder’s market sell, with no attacker involved. That is fixed. awaken() now carries a floor you set, and materialises the longest run of the draw you actually named; it only reverts below that floor, and a refused call writes nothing at all. Independently re-verified by an auditor who did not write the change.
One consequence is on us, not on the contract: an interface that only re-reads the preview can still be stalled, because the preview cannot show you the identity that is blocking you. This one reads the blocked identity out of the revert and offers it to you by name — never adding it to your batch without you saying so. Any interface that does not do this stays stalled, and no change to the contract can fix that for it.
Marketplace orders
What is claimed, and what is not.
An unrelated account cannot make a dormant Relic active for another address. There is one mint site, inside _forge, whose sole caller is awaken, whose recipient is always msg.sender and which has no recipient parameter. An independent auditor enumerated every path by hand and verified it against real Seaport, the real OpenSea conduit, the real UniversalRouter and the real v4 PoolManager, with the victim named as the router’s output recipient. This is a structural argument, not a cost argument.
It is not claimed that a third party cannot hand-deliver an already-live Relic it owns by an ordinary ERC-721 transfer — that is the universal ERC-721 shape. It is not claimed that an owner cannot reactivate their own abandoned order. And stale orders are not harmless simply because exploiting one costs something. If you list a Relic and stop watching it, cancel the order.
Cancel orders you have abandoned, prefer short end times, and prefer zone-restricted orders; incrementCounter() invalidates every open order you have. Integrators: isApprovedForAll diverges from transfer authority in this collection — a per-token dormancy seal withholds operator authority granted before a Relic went dormant under the same owner. Read isAuthorizedForRelic(spender, tokenId), which is the exact predicate the transfer path enforces.
Genesis liquidity disclosure
One position. Nothing beneath it, and nothing above it.
The entire 10,000-unit supply enters the canonical pool as one Uniswap v4 position, funded with $RELICS alone and no WETH at all. It is uncapped on the way up — there is no ceiling a buyer can exhaust and no price at which the civilization stops selling. On the way down there is no seeded bid, because there cannot be a reachable one.
All 10,000 $RELICS start inside the position, so the launch tick is the $RELICS-reserve maximum and therefore the pool’s price minimum. The 0.30% fee is skimmed off both legs, so a full round trip returns the position with strictly fewer $RELICS than it started with — that is, at a price strictly above launch. WETH placed below the launch tick would be a bid that can never be hit. An earlier layout seeded about 0.25 WETH beneath launch; a mainnet-fork test proved 100% of it was unreachable, so it was removed rather than re-labelled.
From buyers. As price rises, each buy leaves WETH inside the position at the tick it filled at, and that WETH accumulates above launch — which is exactly where later sellers can reach it. The depth a seller can reach is the depth buyers have put in, at the prices they put it in at. Stated plainly: there is no protocol-provided bid, this is not a floor, and it is not a guarantee of exit. Early sellers into a thin pool will move price.
The upper bound is pinned to the deepest tick Uniswap v4 will accept, so no amount of buying can consume the ask and push price discovery off the pool. A bounded 64x wall is bought out by about 20 WETH; the disclosed trade-off is that an uncapped position is thinner near launch. Ticks are derived at deploy time from the mined token address, never hardcoded, which is why both orderings are published. Any USD figure elsewhere on this site assumes a labelled $2,400/ETH reference and exists for arithmetic only — no price feed, no quote, no forecast.
Supply and entombment
Fixed supply, and what sits beyond reach.
Total supply is fixed at exactly 10,000 $RELICS. Entombed $RELICS are economically inaccessible forever, but they remain in ERC-20 totalSupply — the token has no burn path, so supply never falls. Entombed, never burned. The genesis mint left 43 wei of rounding dust, and that dust is the only $RELICS at the entombment address.
What is fixed is fixed. Token and hook ownership are renounced — both owner() addresses read address(0) — so there is no admin, no upgrade path, no metadata override and no pool rebinding. The whole 10,000-unit supply entered one single-sided position with zero seeded WETH.
No Relic ever awakens at the tomb. The entombment address is permanently excluded from the whole-unit layer, so it cannot hold a Relic by any path. A holder who sends whole $RELICS units to the tomb does not move Relics into it — their Relics are retired to the dormancy pool with real burn events, keeping their DNA, and those ids reawaken unchanged for whoever draws them next.
These readings are derived from chain state on request — the balances held at the entombment address and the two supplies. No counter inside the protocol reports them, and none was added. Where a reading is unavailable, or where no on-chain record exists at all, the ledger stays empty rather than showing a zero.
Canonical infrastructure record
The civilization is legible through public addresses, not trust.
These are the live mainnet records. They stay quiet because infrastructure should feel permanent, not promotional.
RELICS/WETH v4
The public entry point is the canonical pool record first, swap interface second.
Open Uniswap swapPressure map
The protocol speaks in market mechanics. The archive records civilization pressure.
Impact mark
buy/sell flow becomes pressure direction and market seed movement
Weather system
observed liquidity additions deepen the civic field; long gaps read as drought
Schism
symmetry breaks, containment destabilizes, scar intensity rises
Collapse
fractures, void tears, missing geometry, burial damage
Reconstruction
repair light appears but does not erase old wounds
Migration
civilization overlays, glyph population, archive density
tokenURI / SVG mutation record
The same artifact record changes when the market changes.
RELICS does not refresh from a server. Base64 JSON and embedded base64 SVG are recomputed from on-chain state; these hash transitions are the archaeological record.
The first four slots held rehearsal hashes from a superseded fee tier and were retired with it. Current state is the live row, read from mainnet tokenURI.
The object exists before market pressure.
Depth changes the artifact weather.
Directional flow mutates global market memory.
Migration changes civilization overlays.
Read live from mainnet tokenURI.
Artifact timelines
The same object, observed through pressure eras.
These timelines are museum-style readings of the renderer grammar. In production, the same logic is driven by canonical market state.
Deployment record
Deployed on Ethereum mainnet.
The token, the artifact layer, the on-chain renderer and the Uniswap v4 hook are live at the addresses below, on one canonical 0.30% pool. Ownership of the token and the hook is renounced. Sepolia appears here only as the rehearsal that preceded launch.
10,000 fixed $RELICS back up to 10,000 Relics. Zero Relics exist at genesis; an account may hold at most floor(balance / 1e18) of them.
ERC-20 and ERC-721 remain distinct standard contracts. A receive of $RELICS does no ERC-721 work at all; the only mint site is awaken(), whose recipient is always the caller.
No taxes, whitelist, blacklist, or hidden reserve surface. Token and hook ownership are renounced, so no admin, upgrade, metadata or pool power remains. The NFT and renderer never had an owner.
All 10,000 $RELICS enter the canonical pool at mainnet genesis in one position with ZERO seeded WETH. Its lower bound is the launch tick itself; there is no upper terminal.
Mined address enables exactly afterInitialize, afterAddLiquidity, and afterSwap.
The canonical RELICS/WETH pool uses the 0.30% fee tier with tick spacing 60, read from the registry.
A full dress rehearsal ran end-to-end on Ethereum Sepolia before launch, at a prior fee tier. Those pool IDs and proofs are dated evidence of the mechanism, never a description of the current deployment.


