Ink · system document · v1

ABYSS
Field Manual

Three thousand three hundred and thirty-three creatures on a curve that always buys them back, and a game where the only decision you own is when to stop descending.

3,333Permanent IDs
0.0005 → 0.005Entry, ETH
24 hFull descent
9,960,937FATHOM hard cap

Two systems, deliberately separate

ABYSS is two machines that share an aesthetic and almost nothing else.

The curve issues 3,333 permanent creature identities on a linear ETH price ladder and buys them back on the same ladder. It works with zero assumptions about player behaviour and carries no debt it cannot pay.

The dive is a press-your-luck game played with those creatures. A creature descends on its own once started; the owner only chooses the moment to stop. Surfacing successfully mints FATHOM. Surfacing unsuccessfully mints nothing.

The separation is the point. If nobody ever dives, the curve keeps working and nobody is owed anything. If FATHOM goes to zero, the creatures still have a bid. Neither system is collateral for the other.

The curve

Price is a straight line from the first entry to the last: P(n) = 0.0005 + (n / 3332) × 0.0045 ETH. A batch sums each marginal step rather than multiplying the first quote, and an exit is quoted from the same steps in reverse. Twenty per transaction, 9.166 ETH if every identity is claimed.

Where the ETH goes

Split per transaction
SideReserveProjectLiquidity treasurySeller
Buy85%13.5%1.5%
Sell15% stays4%1%80%

Sell-side release totals 85% — exactly what the buy side funded at the same step — so the reserve is solvent by construction. The last exit is as covered as the first. There is no creator-seeded DEX pool and no liquidity anyone can pull.

Creatures are never burned

An exit moves the token into the vault. The next buy pops it back out: same ID, same seed, same traits. A collection of 3,333 identities stays a collection of 3,333 identities forever. Selling also clears what the previous owner did to it — any dive in progress is forfeited, and callsign and palette reset.

The creatures

Art seeds are committed at mint and revealed from a later block. This is not decoration. If the seed came from state that already existed while the buy was executing, a contract could read the traits it was about to receive inside onERC721Received and revert the whole purchase until it got a roll it liked, paying only gas. That attack is in the test suite; it now fails at the first step.

reveal() is permissionless — anyone can reveal anyone's token, and there is nothing to gain by holding one back. Past the 256-block window the fallback mixes a rolling accumulator with the previous block hash, so reveal promptly. Royalties are ERC-2981 at 5%.

Not finished. The onchain renderer is not wired. The geometry libraries are in place but tokenURI still answers from baseURI. setRenderer() is the hook.

The dive

A creature reaches the hadal floor 24 hours after it starts diving. No transaction pushes it deeper and nothing needs poking: depth is a pure function of elapsed time.

The two curves

Piecewise linear over depth
ZoneDepthSurvivalFATHOM rate
Surface0 – 200 m98% → 94%1.00× → 1.35×
Twilight200 – 1,000 m94% → 72%1.35× → 2.84×
Midnight1,000 – 4,000 m72% → 46%2.84× → 4.62×
Abyssal4,000 – 6,000 m46% → 27%4.62× → 7.31×
Crush6,000 – 8,000 m27% → 13%7.31× → 11.90×
Hadal8,000 – 11,000 m13% → 6%11.90× → 18.40×

Harvest is the integral of the rate curve over depth, normalised so a full descent yields 100 FATHOM in the first emission era.

Why the bottom is not the answer

7.65 FATHOM · 5,550 m · 31% survival 6.00 at the floor 0 m 4,000 6,000 8,000 11,000 m
Expected value Harvest if you survive Survival
Expected value is harvest × survival. Survival falls faster than the rate rises, so the product peaks inside the dive rather than at the bottom.
Expected value by depth, no rig
DepthSurvivalHarvestExpected
2,000 m63%5.63.57
4,000 m46%14.66.72
5,570 m31%24.67.63
8,000 m13%49.36.41
11,000 m6%1006.00

Riding to the floor returns 79% of what stopping at the peak returns. The bottom is a gamble, not a reward. There is a second layer to it: under repeated play, expected value per hour peaks shallower still, around 2,500–4,000 m. Absolute maximisers go deep; throughput maximisers farm the middle.

Every depth carries a roll. There is no depth at which extraction is free, which is what stops any rig from becoming a risk-free printer.

Rigs

A rig is FATHOM burned before the descent. Each multiplies harvest and raises survival to a power, so the penalty bites hardest exactly where survival is already thin.

Net of the burn cost
RigHarvestSurvivalBurnBest
None1.00×s6.71 @ 5,500 m
Extraction Drill1.35×s1.250.25 F6.66 @ 5,000 m
Pressure Seal0.90×s0.751 F8.92 @ 10,250 m

The drill costs little survival where survival is already high, so it wins the middle water. The seal buys survival back where it is scarce, and is the only sane way to work the hadal.

Settlement

Surfacing is two steps. requestSurface(tokenId, minDepth) locks the depth, harvest and survival, and escrows a resolver tip; minDepth stops a delayed transaction surfacing you somewhere you did not choose. Then resolveSurface(tokenId) reads the next block's hash and settles. Anyone may call it and collects the tip for doing so.

The tip exists because the outcome is public before settlement. Without it, a player who read a losing roll would simply walk away, leaving the token stranded and the crush unrecorded. With it, keepers clear the queue within a block or two.

Randomness caveat. Both the reveal and the dive roll read block hashes on an OP-stack chain, which is sequencer-visible. Adequate for a game on a one-second chain; not adequate for a yield product. A VRF is the belt-and-braces upgrade.

FATHOM

Minted in exactly one place: a surviving dive. Nothing else — no presale, no team allocation, no admin mint. Of every harvest, 88% goes to the diver and 12% to the project treasury. Burned in three places: redemption, rig costs, and palette mutations.

Emission halves, then stops

Eras are measured in FATHOM actually minted, not in time, so a quiet month does not burn through an era and a busy one does not outrun the schedule.

The whole schedule
EraEmissionIssuesCumulative
0100%5,000,0005,000,000
150%2,500,0007,500,000
225%1,250,0008,750,000
312.5%625,0009,375,000
4 – 66.25% – 1.56%312,500 – 78,1259,921,875
70.78%39,0629,960,937

After the eighth era emission stops and startDive refuses. A halving is neutral for the player — half the FATHOM, each worth about twice as much. Its point is that fees keep arriving while supply growth slows, so each halving doubles what one expedition fee buys per FATHOM minted: measured at 4,167 gwei in era 0 and 8,335 gwei in era 1. The floor rises with the schedule instead of drifting sideways.

The pool

There is no market maker and no seeded pair. Every FATHOM is a pro-rata claim on one ETH pool: floor = poolBalance / totalSupply.

redeem() burns before it pays, so the ratio can only improve for whoever stays, and a 5% exit fee is left behind for them. The pool cannot be insolvent because it only ever pays a fraction of what it holds.

Only expedition fees fund it

This one is worth spelling out, because getting it wrong is expensive. ETH that arrives before any FATHOM exists belongs, pro rata, to whoever mints first. With NFT trading fees flowing into the pool, a single early diver could redeem most of a pot that hundreds of buyers had filled.

Measured, before and after the fix
After one diveTrading fees in poolPool holds dive fees only
Pool balance0.000398 ETH0.00009 ETH
First diver takes3.3× their fee75% of their fee
Second diver gets34% of the first103% of the first

The ratio is now self-consistent from the very first dive, with no first-mover ramp. And a dive that fails pays its fee while minting nothing — that ETH stays in the pool and lifts the floor for everyone who did surface. That, not emission control, is what holds the token up.

The money map

Every flow in the system
FlowProjectLiquidityFATHOM poolResolver
NFT buy13.5%1.5%
NFT sell4%1%
Expedition fee90%10%
Callsign / mutation50%50%
Harvest (in FATHOM)12%

Gameplay is not a revenue centre. The project takes nothing in ETH from a dive. It is paid out of the harvest instead, in FATHOM, so its revenue rises with the floor and with participation rather than with how often a player loses.

That FATHOM inventory is also what pairs with the liquidity treasury's ETH if a Uniswap pool is ever opened — no presale, no genesis allocation, no founder capital.

What the numbers mean

For a player

A dive costs 0.0001 ETH. Ninety per cent lands in the pool the harvest is redeemed against and ten per cent pays whoever settles the roll — which can be the player themselves. Across many dives a player recovers roughly 83% of what they spend; the remainder is the tip and the exit fee, both of which stay inside the player economy. There is no house edge taken in ETH. What separates a good player from a bad one is where they stop.

For a holder

The floor is the pool over the supply. It rises when dives fail, when FATHOM is burned, and with every halving. It does not rise from new buyers paying old ones, because there is no mechanism by which they could.

For the project

Two legs, deliberately balanced: ETH from the NFT curve, FATHOM from the harvest tax. Neither depends on players losing.

The honest limit. FATHOM's total value is capped by the ETH in the pool. It is a fee-share instrument with a hard floor, not a growth asset. Price discovery above the floor needs an AMM on top — the floor then acts as a backstop, and arbitrage in both directions strengthens it.

Build status

Shipped

  • ERC-721 with commit–reveal seeds and ERC-2981
  • Two-way curve vault: reserve, recirculation, pull payments, slippage and deadline guards
  • Dive game: depth, curves, rigs, halving, two-step settlement, resolver tips
  • FATHOM token and redemption pool
  • 39 tests, including a regression for every review finding
  • Descent narrative, curve terminal, and a dive console driving a live chain

Outstanding

  • The onchain renderer — tokenURI still answers from baseURI
  • Wallet wiring against deployed addresses
  • An independent contract review
  • An Ink testnet rehearsal

Do not deploy before the review and the testnet rehearsal are both done.