A promisethat can't bounce.

On 1inch Aqua a maker never deposits — the money stays in their wallet and they only promise it. Nothing stops the same balance being promised twice. This position reads what the wallet already owes before it quotes, and refuses on chain rather than write a cheque it cannot cover.

Live on Base & EthereumUniswap v4 hook1inch AquaThe Graph
The problem

7 of the 12 largest maker positions on Base were promising liquidity they did not hold.

Aqua keys balances by maker, app, strategy and token, and the mapping is not enumerable — so no contract can total what one maker has promised. An index can. Set that against the wallet, and the promise becomes checkable.

102,593 4

WETH advertised across Ethereum, against what those makers could actually deliver.

600 / 860

Positions built from more than one strategy that promise more than the wallet holds.

419

Backed by nothing at all.

Base read on 11 September 2026; Ethereum from this project's own index. The app re-runs both live.

The fix

Opcode 35: a strategy that checks its own wallet before it quotes.

  1. 01

    Count what the wallet already owes

    The strategy carries the total its maker has promised elsewhere. The VM reads those sibling strategies on chain and reverts if the declared figure is lower. Declaring more is always allowed.

  2. 02

    Price the strain

    The quote widens with how committed the wallet is: haircut = widen × utilisation. At 60% committed and 500 bps, a fill gives up 3%.

  3. 03

    Refuse past the ceiling

    At the ceiling the quote reverts. A Uniswap v4 hook catches it, records why, and fills the swap from a maker that can pay, in the same transaction.

Across chains

One wallet, promises on two chains.

The same address can promise on Base and on Ethereum, and each chain on its own can look fine. Bone Dry adds the book up across both. A maker can opt in to count the other chain in opcode 35: the declared total becomes the combined share times this chain's backing, so the strategy refuses when either this chain or the whole book is over the line. The contract cannot read another chain; it only rejects a declaration below what it can see here, so declaring more is always accepted. It is fixed at publish.

Base alone41.5% of USDC promised
Ethereumpromised, none held
both chains126% promised

our maker, read live on 13 Sep 2026

0

The pool's liquidity, read straight out of PoolManager storage — before a swap and after one.

257

Live strategies one wallet carries against a single token — every one of them promising the same balance.

4,452

Gas a maker pays to revoke all of it. Nothing on Aqua is binding, and nothing here pretends otherwise.

What you can do with it

three doors, the same three the app opens on

01 — Swap

Fill from wallets, not a pool

Two of those three promised liquidity they do not hold. Routing around them is not an error — it is the swap that would have reverted, not happening.

Open the desk →
0x3a43b77bfilled
0x75534a55refused
0x1a0988ecrefused
02 — Provide

Ship a promise that polices itself

Your quote widens as your other strategies eat the same wallet, then refuses outright, and it can count what you have promised on the other chain too.

Become a maker →
refuse above80% committed
quote worse by4% at the limit
backing countedmin(balance, allowance)
03 — Explore

Check any wallet on Aqua

Paste an address and total what it has promised everywhere, then set that against what the wallet actually holds.

Look one up →
promised12,694.5448 DAI
deliverable0 DAI
strategies liveacross every Aqua app

Your money never leaves your wallet.

Open the app

Base and Ethereum mainnet. Reading the book needs no wallet.