ABYSS

Docs · Ink · live

How the deep keeps what sinks to it

Everything ABYSS does, in the order the contracts do it. Every number here is a constant in LaunchConfig.sol; nothing on this page is a promise the code does not make.

The ABYSS mark: a golden key coiled by a tentacle
00Overview

A reserve built in the deep

ABYSS is a treasury protocol on Ink. Its reserve, the hoard, is three chambers of tokenized stocks. Every ABYSS in existence has a claim on an equal slice of each chamber and can surface with it at any block by burning itself. That slice is the floor.

1 · TradeABYSS trades against ETH in one Uniswap v4 pool on Ink.
2 · ReadA hook measures the net ETH flow and takes a 1% toll.
3 · AnswerEvery 4 h, Depth turns the flow into ETH offered for stocks, or a burn.
4 · KeepStocks land in the hoard. Anyone can surface; the pressure stays below.

There is no oracle, no owner, no committee and no mint anywhere in the system. The only inputs are a signed quantity of ETH, and what people are willing to trade in the auctions.

01Token

ABYSS

  • 1,000,000,000 minted once at construction. MAX_SUPPLY is a constant and the cap is re-checked on the only mint path.
  • Burnable by any holder. Burning is the only way the total changes, and it only goes down.
  • No owner, no mint function, no pause, no blocklist, no transfer tax, no upgrade path, no hook on transfer.
  • contractURI() returns ERC-7572 metadata with the mark drawn on chain as pixel SVG, so explorers and aggregators can show the logo without any host.
02The current

One signal, written by nobody

Current.sol is the v4 hook on the ABYSS/ETH pool. On every swap it adds the ETH leg to a signed total for the epoch: ETH paid in counts as capital descending, ETH taken out counts as capital fleeing.

One pool, pinned at birth

The hook refuses to initialize any pool except exactly one key: ETH and ABYSS, 1% fee, spacing 200, itself as hook. A twin pool that could dodge the toll or write the signal cannot be created.

The toll

1% of the side v4 leaves unspecified. On an ordinary buy that is ABYSS, burned when swept. On an ordinary sell it is ETH, split at the source when swept:

ETH toll → 30% to the operator (compile-time address, paid by call)70% to Depth's intake

sweep() is open to anyone because every destination is fixed. If the operator address ever refused ETH, its share waits in the hook for payOperator(); it never blocks the sweep and never falls into the protocol.

The hook never reverts a swap. Depth's own defensive buys are neither measured nor tolled.

03Depth

The creature that answers

Every 4 hours anyone may call settle(). In order, it sweeps the toll, reads and clears the epoch's net flow, takes back whatever the last auction lots did not sell, then moves:

net flow > 0 depth = min(10 ETH, depth × 1.2) net flow ≤ 0 depth = max(0.01 ETH, depth × 0.5) defence: 20% of the intake buys ABYSS and burns it the buy stops once it has moved the price 3% then lots = min(depth, intake), split across the chambers by the Coil

A flat epoch counts as fleeing: an epoch that brought nothing down has not earned a step. Depth starts at 0.1 ETH. Growth has to be argued for epoch after epoch; one bad epoch takes back more than one good epoch gave.

Depth decides how much, never where. The split across chambers follows the ABYSS staked in the Coil and pointed at each chamber. With nobody staked, it is split in thirds.
04Descent

Buying the hoard without an oracle

Each chamber receives a lot of ETH. Anyone may fill(chamber, ethOut, maxAssetIn): bring the chamber asset, take the ETH. The rate asked falls over time, so the first filler who finds it fair takes it.

rate(t) = reference × ( 1.20 − 0.30 × min(t, 3 h) / 3 h ) asset units per ETH need = ceil( ethOut × rate ) at close: reference = asset received ÷ ETH sold if anything filled reference = reference × 0.90 if nothing did

The reference is volume weighted, so a dust fill cannot drag it. If the market moved and nothing clears, the reference steps down each epoch until something does; if fills come instantly, the next round starts higher. The asset is pulled and measured before a single wei of ETH leaves.

Opening references were measured on Ink on 2026-09-10 from the chamber pools: 3.2208 wSPYx, 11.0890 wNVDAx and 7.7233 wAAPLx per ETH.

05Surfacing

Leaving is never free

surface(amount, maxPressure, minOut[3]) burns ABYSS and pays its share of every chamber, less the pressure:

share_i = holdings_i × amount ÷ circulating pressure = min(25%, 1.5% + 1.5 × (crowd + amount ÷ 2) ÷ circulating) paid_i = share_i − ceil(share_i × pressure) fee_i → 50% stays in the hoard, 50% streams to the Coil crowd = ABYSS surfaced recently, draining linearly to zero over 24 h

The pressure is priced at the middle of the crowd your own exit creates. One large exit and the same exit cut into ten pieces pay within half a percent of each other; this is tested. With nobody in the Coil, the whole fee stays in the hoard.

Guards

  • maxPressure refuses if others surfaced ahead of you and the pressure moved.
  • minOut refuses if any chamber would pay less than you accepted.
  • If one wrapper cannot transfer at that moment (paused by its issuer, for instance), the others still pay and that chamber's amount is recorded as owed to you, excluded from the floor, and claimable with claimOwed.
06The floor

Why it only rises

The floor of chamber i is holdings_i ÷ circulating, in chamber units per ABYSS. Every path that touches either number moves it up or leaves it alone:

  • Surfacing burns b of C and pays at most b ÷ C of each chamber minus a positive fee. Holdings over supply cannot fall.
  • A fill adds assets and removes none.
  • Toll burns and defence burns shrink the supply and touch no chamber.
  • The Coil's idle stream can only be pushed back into the hoard.
  • Nothing else can move a chamber asset out. No owner, no rescue function, no call with free calldata.

A fuzz test runs random sequences of surfacing, fills, buys, sells, sweeps and stakes against the real wrappers and asserts that no chamber's floor ever drops between steps.

A floor in units, not in dollars. A slice of wSPYx is still a slice of the S&P 500 when the S&P 500 falls. The floor protects the claim, not its price.
07The Coil

Those who remain below

  • stake(amount, chamber) and unstake(amount) at any time, no lock.
  • Half of every surfacing fee is streamed to stakers over 7 days, paid in the chamber assets themselves, claimable with claim().
  • point(chamber) moves your weight. Depth splits each epoch's lots by the weight on each chamber: the Coil decides where the hoard grows, the current decides how fast.
  • Whatever streams while nobody is staked, and any rounding dust above what is owed, is pushed back to the hoard by recycle(chamber), lifting the floor.
08Chambers

What lies in the hoard

The three chambers are fixed at deployment and never change. They are Backed's ERC-4626 wrappers over its xStocks on Ink: plain balances with no rounding on transfer, while dividends of the underlying are reinvested into what one wrapper unit redeems for.

Each trades on Ink in a Uniswap v3 pool against USDG, which is where a filler would source it.

09Parameters

Every constant

NameValueMeaning
MAX_SUPPLY1,000,000,000Minted once, never raised
POOL_FEE1%Paid to the pool's liquidity
TOLL_BPS1%Hook toll on the unspecified side
OPERATOR_BPS30%Of the ETH toll, paid at sweep
EPOCH4 hMinimum time between settles
DEPTH_START0.1 ETHOpening depth
DEPTH_MIN / MAX0.01 / 10 ETHBounds per epoch
EXPAND_BPS+20%On descending flow
CONTRACT_KEEP_BPS50%Kept on fleeing or flat flow
DEFENCE_BPS20%Of the intake, bought and burned when fleeing
DEFENCE_MAX_MOVE3%Price move at which the defence stops
AUCTION_SPAN3 hDecay time of the asked rate
AUCTION_START / END120% / 90%Of the reference
PRESSURE_BASE1.5%Minimum cost to surface
PRESSURE_SLOPE1.5 × crowd share10% of supply surfacing adds 15 points
PRESSURE_MAX25%Ceiling
PRESSURE_WINDOW24 hLinear drain of the crowd
COIL_SHARE50%Of each surfacing fee
COIL_STREAM7 daysStream length per notice
10Contracts

Six contracts, no owner in the protocol

ContractPublic surfaceRole
Abysstransfer burn contractURIThe token
Currentsweep payOperator pendingToll netFlowv4 hook: signal and toll
Depthsettle depth intake nextSettleAtReads the current, commits and defends
Hoardsurface quoteSurface fill rateOf floorOf claimOwedThe reserve, the auctions, the pressure
Coilstake unstake point claim recycleStaking, streams, chamber weights
AbyssLpManageraddLiquidity removeLiquidity claimFeesLaunch position, owned by the deployer

Depth and Hoard each have a one-shot wire callable only by their deployer, once, to connect the contracts that could not know each other's address at construction. After it, nothing is settable anywhere.

The suite has 51 tests, all on a fork of Ink against the real PoolManager and the real wrappers, including the floor fuzz, the split-exit pressure test, a paused-wrapper test, a refused-operator test and the one-transaction removal.

11Honest limits

What the code cannot promise

  • The chambers have an issuer. Backed controls the wrappers and the xStocks beneath them, including pause and sanctions controls. ABYSS cannot override them; it only makes sure one frozen chamber never traps the others.
  • The floor is in units. It does not stop a stock from falling, and it says nothing about the ABYSS market price, which can trade above or below it.
  • Auctions need fillers. If nobody brings assets, lots return unsold and the reference walks down. With thin competition a patient filler can take a rate worse for the hoard than the market.
  • The defence can be sandwiched within its 3% price cap. The cap bounds what one settle can lose; it does not remove the risk.
  • At launch the hoard is empty and the floor is zero. It grows only from tolls converted by the auctions and from what the fleeing leave behind.
  • The operator is paid. 30% of the ETH side of the toll goes to one fixed address. It never touches the hoard.
  • Not audited. Tested on a fork of Ink against the real PoolManager and wrappers, verified on the explorer, not audited.
12Launch

How the pool opens

  1. Deploy the six contracts with no market, verify all sources.
  2. Initialize the one ABYSS/ETH pool at tick 193,400, about 250 million ABYSS per ETH, a 4 ETH fully diluted value.
  3. Add the whole supply single-sided between ticks 153,400 and 193,400. Zero ETH is engaged; every buy walks down into the range.
  4. The position belongs to the deployer through AbyssLpManager. Removing it pays the deployer everything in one transaction, after the toll is swept.

Addresses

Only these addresses are ABYSS. Follow @AbyssonInk_ for anything new.