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.
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.
ABYSS
- 1,000,000,000 minted once at construction.
MAX_SUPPLYis 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.
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:
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.
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:
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.
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.
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.
Leaving is never free
surface(amount, maxPressure, minOut[3]) burns ABYSS and pays its share of every chamber, less the pressure:
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
maxPressurerefuses if others surfaced ahead of you and the pressure moved.minOutrefuses 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.
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.
Those who remain below
stake(amount, chamber)andunstake(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.
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.
| Chamber | Underlying | Wrapper on Ink |
|---|---|---|
| wSPYx | SPDR S&P 500 ETF | 0xE7E553Cd128F0011777323A0b44a7b96EA1CB540 |
| wNVDAx | NVIDIA | 0xa8ddb5Cd96b5222AFe198316E9A57CAA642850D5 |
| wAAPLx | Apple | 0x943BF64D566c32A2Bcd41AC92FB63C111cC9De8f |
Each trades on Ink in a Uniswap v3 pool against USDG, which is where a filler would source it.
Every constant
| Name | Value | Meaning |
|---|---|---|
| MAX_SUPPLY | 1,000,000,000 | Minted once, never raised |
| POOL_FEE | 1% | Paid to the pool's liquidity |
| TOLL_BPS | 1% | Hook toll on the unspecified side |
| OPERATOR_BPS | 30% | Of the ETH toll, paid at sweep |
| EPOCH | 4 h | Minimum time between settles |
| DEPTH_START | 0.1 ETH | Opening depth |
| DEPTH_MIN / MAX | 0.01 / 10 ETH | Bounds per epoch |
| EXPAND_BPS | +20% | On descending flow |
| CONTRACT_KEEP_BPS | 50% | Kept on fleeing or flat flow |
| DEFENCE_BPS | 20% | Of the intake, bought and burned when fleeing |
| DEFENCE_MAX_MOVE | 3% | Price move at which the defence stops |
| AUCTION_SPAN | 3 h | Decay time of the asked rate |
| AUCTION_START / END | 120% / 90% | Of the reference |
| PRESSURE_BASE | 1.5% | Minimum cost to surface |
| PRESSURE_SLOPE | 1.5 × crowd share | 10% of supply surfacing adds 15 points |
| PRESSURE_MAX | 25% | Ceiling |
| PRESSURE_WINDOW | 24 h | Linear drain of the crowd |
| COIL_SHARE | 50% | Of each surfacing fee |
| COIL_STREAM | 7 days | Stream length per notice |
Six contracts, no owner in the protocol
| Contract | Public surface | Role |
|---|---|---|
| Abyss | transfer burn contractURI | The token |
| Current | sweep payOperator pendingToll netFlow | v4 hook: signal and toll |
| Depth | settle depth intake nextSettleAt | Reads the current, commits and defends |
| Hoard | surface quoteSurface fill rateOf floorOf claimOwed | The reserve, the auctions, the pressure |
| Coil | stake unstake point claim recycle | Staking, streams, chamber weights |
| AbyssLpManager | addLiquidity removeLiquidity claimFees | Launch 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.
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.
How the pool opens
- Deploy the six contracts with no market, verify all sources.
- Initialize the one ABYSS/ETH pool at tick 193,400, about 250 million ABYSS per ETH, a 4 ETH fully diluted value.
- Add the whole supply single-sided between ticks 153,400 and 193,400. Zero ETH is engaged; every buy walks down into the range.
- The position belongs to the deployer through
AbyssLpManager. Removing it pays the deployer everything in one transaction, after the toll is swept.
Addresses
| ABYSS | 0xBa432A304a4a0453C177500844Cfc600446195C6 |
| Current | 0xE3246a74233611a81D4F885baC105d9FAD736044 |
| Depth | 0x7aF50F4e5699D668e1D979F908FD22C4fa94C737 |
| Hoard | 0x57A3a5d2C1FbB50Fc7147C41251553f4B180bcB1 |
| Coil | 0x3a8b2b6362eECCA5e32d991784E728e2bE686929 |
| Pool id | 0x674b3da1701fa0318ef80790a6a89358baeee7fba88363ce70ec8abbb6bc35df |
Only these addresses are ABYSS. Follow @AbyssonInk_ for anything new.