SPECULA

The first reflective living on-chain objects

Every Specula is drawn twice in the same image. The body comes from DNA fixed at silvering and never changes. The reflection beneath it is redrawn from the live $SPEC/ETH market every time you look.

They never match. That gap is the artwork. A mirror does not have opinions about what stands in front of it — it only reports. One swap re-renders every object in the collection at once, and nobody signs off on the result.

Fully on-chain pixel art. No server, no metadata host, no renderer key. The image is computed inside tokenURI at the moment you call it.

Lustre 8800
flow is buying
Lustre 900
flow is selling

The mechanism

The market cannot touch the object. Only its reflection.

The hook bound to the SPEC/ETH pool is purely observational — permissions are afterInitialize | afterSwap, flags 0x1040, no return delta, no fee, no liquidity hook. It cannot alter, tax, or refuse a swap. It records, and that is all it is able to do.

From what it records, one number does the work. Lustre is net flow normalised against total volume into a range of 0 to 10,000, with 5,000 as dead neutral. Because it is a ratio rather than a size, no single trade — at any size — can push a reflection past its bounds. Buying polishes the surface. Selling tarnishes it to copper.

What writes an object

Four axes, and only one of them can be bought.

These are not stages. They act at the same time, from four different directions, and the image you get is where they meet.

Fixed at silvering

DNA

Hue and form, drawn from the object’s own entropy the moment it is first silvered. It never changes again — not for the owner, not for the market, not for anyone.

Chosen by you

Figure

grind() advances the optical surface one step: Raw, Ground, Polished, Figured, Optical. The frame sharpens and the void behind it cools. Irreversible.

Imposed by the market

Surface

Lustre colours the reflection, strain fractures the glass, temper raises shards along the line, volatility widens the ripple. Read live at render time.

Earned by holding

Witness

Every swap the object was awake for, counted — and kept across going dark and being re-silvered. It draws age rings. There is no way to buy one, only to have been there.

How to hold one

One SPEC backs one object. The rule is enforced by revert.

This is not ERC-404. The token and the objects are two separate, standard contracts. The only link between them is a backing rule: an account may hold at most floor(balance / 1e18) awake objects. Buying $SPEC does no ERC-721 work at all — it raises your latent capacity and nothing else.

silver()

The only mint site. The recipient is always msg.sender — there is no recipient parameter, so nobody can force an object into your wallet through a router. You name the ids you expect; if the draw head moved, the call reverts and tells you which id blocked you.

grind()

Your one lever. Push the optical figure a step further and it stays there. The market never touches this axis, and neither does anyone else.

go dark

Sell below what you hold and the excess retires inside that same transfer — a real burn. DNA, figure and accumulated witness all survive it. The object re-silvers unchanged for whoever draws it next, still carrying everything it saw.

The dark pool is drawn lowest id first, so nobody can steer which object surfaces. An object going dark also stamps a seal that withdraws operator authority granted before it left — a stale marketplace order for a recycled id cannot fill.

Specimens

Twelve objects, one market apart.

Rendered by the same code that runs on chain, at twelve different points across DNA, figure, lustre, strain, temper and witness. Watch the reflection: it is the only part that the market is allowed to write.

Raw · Neutral · Newborn
Ground · Bright · Roused
Polished · Dim · Waking
Figured · Tarnished · Watching
Optical · Mirror · Sleepless
Polished · Bright · Watching
Ground · Tarnished · Waking
Figured · Mirror · Ancient
Raw · Dim · Roused
Optical · Bright · Sleepless
Polished · Neutral · Watching
Figured · Tarnished · Sleepless

The record

Canonical addresses.

Anything not listed here is not SPECULA. Verify against this table before you trade, and treat any contract claiming the name that does not appear below as hostile.

ContractRoleAddress
SpecTokenERC-20, backingawaiting mainnet
SpecHookv4 hook, observationalawaiting mainnet
SpeculaERC-721, the objectsawaiting mainnet
SpeculaRendereron-chain artawaiting mainnet
PoolSPEC / ETH, Uniswap v4awaiting mainnet
Supply
10,000
Objects
10,000
Hook flags
0x1040
Art
on-chain