A launchpad on InkChain where the math is published before you buy. This page is the whole thing in one scroll: the curve a token sells on, what graduation does to the liquidity, the plates collection that reads a lending position, every fee with the ceiling it cannot pass and who collects it, what $WATER will and will not be, and the list of things that are not finished. The code is public, and every number below was checked against it.
underwater.fun lets anyone create a token in one transaction and sell it on a bonding curve whose formula is fixed and public. There is no presale, no team allocation and no allowlist on the curve — being early to the curve is the only discount, and it is the same curve for every token.
At 4 ETH raised the curve closes itself. The ETH and the 200M tokens held back from the sale go into a real Uniswap-V2-style pool, and the liquidity is burned to a dead address. Not locked, not vested — burned. There is no key, no timelock and no multisig, because after graduation there is nobody left who could move that liquidity, including us.
Alongside the launchpad is Underwater Plates, a 2222-piece collection drawn entirely on chain, where a plate that is pointed at a leveraged Aave position dissolves as that position's health factor falls — and can be burned by a stranger when it liquidates.
We are on testnets and validating in public before mainnet. Launching real money is not open yet.
Five things, each with its own page in the app.
Create a token, then buy and sell it on the curve. Creation and the creator's first buy are the same transaction, so a launch cannot be sniped between the two. The market lists every launch with its curve progress; a token's own page carries the chart, the trade panel and the trade history.
Our own Uniswap-V2-style exchange, which is where a graduated token trades. It exists because a graduation needs a pool to land in and neither testnet has an exchange to supply one — the addresses labelled Uniswap V3 on Robinhood are proxies with nothing behind them — so without ours the launchpad could not run end to end anywhere. Swaps are ETH↔token.
2222 hydrographic survey plates, drawn on chain rather than hosted anywhere. Attach an Aave position and the drawing reads it: crisp in dry dock, dissolving into ink plumes as the health factor falls, burnable by anyone once it liquidates.
Allowlist intake for the plates mint. One transaction registers a wallet — no form, no email, and a registration is only ever accepted from the wallet being registered. Registration is intake, not entitlement: the allowlist is drawn from the registrants under criteria published before anyone could register.
One wallet's own view — the launches it created, the positions it holds, and what a $WATER distribution would draw on. Nothing there is claimable yet.
A launch mints 1,000,000,000 tokens. 800M are sold on the curve and 200M are held back for the pool. The curve is a constant product against a virtual 1 ETH reserve — virtual because nobody deposited it; it exists to give the first buyer a price instead of a division by zero.
Put the 800M curve supply through that and the answer is the graduation threshold: 1 ETH × 800M / 200M = 4 ETH. So 4 ETH is not a number somebody picked — it is the exact raise that empties the curve supply, which is why graduation and sell-out are the same event.
Price is quadratic in the raise, so the multiple from launch to graduation is an identity rather than a target:
Two properties worth knowing because they cost you something. Rounding always favours the pool — buys round tokens out down, sells round ETH out down — so splitting a buy into ten never beats making it once, and a round trip never profits. Both are checked over 10,000 randomised runs. And a curve that never reaches 4 ETH simply stays a curve: it does not expire, refund, or graduate on a timer.
Automatic. The buy that carries the raise to 4 ETH is sized down to land exactly on it and the excess ETH is refunded in the same transaction, so nobody overshoots and nobody pays for tokens the curve no longer has. Then, still in that transaction:
Optional, and the one decision on this page that can lose you the token. Point a plate at an address with an Aave position and the drawing starts reading that position on every view — the plate dissolves as the health factor falls, can be engraved with a scar below 1.4, and at 1.0 anyone may drown it: burn it, and mint themselves a trophy. A plate with nothing attached cannot be drowned by anybody. See Risks.
There are four, and this is the complete list. Three belong to the launchpad and are settable by its owner within hard ceilings that cannot themselves be raised; the fourth belongs to the DEX and only starts applying after a token graduates. If you find a fifth, it is a bug and we want the report.
| Fee | Now | Hard cap | Where |
|---|---|---|---|
| Trade, buy and sell | 1% | 2% | on the curve |
| Token creation | 0 | 0.01 ETH | once, at launch |
| Graduation, of the 4 ETH | 5% | 10% | once, at graduation |
| Pool swap | 0.30% | fixed | after graduation |
The ceilings are the part worth checking. A settable fee with no ceiling is a promise; a settable fee under a ceiling that nobody can raise is a bounded parameter, and the bound holds whatever we intend.
The pool fee is not settable at all — 0.30% is fixed. What is switchable is the protocol's share of it, which works out to 0.05% of swap volume, and it is switched on for our deploy.
Two more fees exist on the plates rather than the launchpad. The mint price is owner-settable under a 1 ETH ceiling, because it targets a dollar figure while ETH moves. Secondary royalty is 5%, fixed, and reported through the standard royalty interface so marketplaces can read it.
Every fee above is the protocol's revenue, and there is no other. No subscription, no listing fee, no paid promotion on the market page, no spread added to a quote, and nothing taken from a wallet for holding or transferring. If we ever earn from this it is because tokens were created, traded and graduated — which is the only revenue model we want, because it cannot pay unless the thing works.
A creator earns nothing from their own token's trading. Some launchpads route a slice of every trade back to whoever launched it; ours does not, and that is deliberate rather than unbuilt. A per-launch revenue share is a standing reason to spam launches, and the incentive we would rather create is to launch something people want to hold. What a creator gets instead is the curve: they can buy their own launch first, in the same transaction that creates it, at the lowest price it will ever have.
Three of the four arrive as ETH the moment they are charged. The pool's 0.05% is the exception — it accrues inside each graduated pool and has to be settled before it is anything, which is covered under Risks. Whoever deployed the launchpad can read the running total on /profile; nobody else sees that tab, and it is a readout rather than a button.
Standard ERC-20, 18 decimals. Fixed supply per launch, and nothing can mint more of it afterwards:
| Allocation | Amount | Share | Fate |
|---|---|---|---|
| Sold on the curve | 800,000,000 | 80% | to buyers; unsold remainder burned |
| Held for the pool | 200,000,000 | 20% | paired with the raise; liquidity burned |
| Team, presale, advisors | 0 | 0% | there is no allocation |
ERC-721, 2222 in total and capped there. The allowlist phase is allocated 2000 and the public phase takes whatever it does not use. Per-wallet limits are settable under a ceiling of 222. Royalty is 5%. Nothing is hosted anywhere: both the artwork and its metadata are built on chain, at the moment they are asked for.
$WATER is coming, and it does not exist yet. There is no contract, no address, no sale, no allocation table, no date and nothing to claim. It is a protocol token planned to be shared with the people who make the market: token creators, liquidity providers and traders. Anything you find elsewhere offering to sell you one is not us — the security policy lists every account and domain that is.
Four things earn uwPoints: registering for the waterdrop (10,000, once), a referral that clears the activity bar (1,000 each), launching a token (20,000 each), and a trade, on a curve or in a pool (10 each). A coupon code or a hand grant can add to a balance. Nothing subtracts from one — there is nothing to spend points on, so there is no way to lose them either.
The activity bar on a referral is the same one the waterdrop uses: the referred wallet needs at least ten transactions on Ink, mainnet or Sepolia. Referrals short of it are shown and pay nothing, so the count you see is every registration through your link and the number that pays is the subset above the bar. It is there because a referral rate with no bar pays for wallets made to collect it.
No balance is stored anywhere. It is the rate card multiplied by counts of on-chain events, plus whatever has been granted, recomputed from the logs on every read. So there is no database behind it: you do not register, sign anything or keep a tab open for activity to count — it counted when the transaction confirmed — and we cannot quietly re-weight a number we never stored, or wake up one morning having lost everyone's history.
The Points tab on /profile shows the total, the terms that sum to it, this wallet's rank, and every event each term was counted from, each row linking to the transaction it was read from. That list is the point of it: a balance nobody can check is a balance nobody has to believe.
What there is not: no multiplier, no season and no streak. Rates live in a contract, and changing one re-prices history rather than grandfathering it — the rows on that tab are priced at today's card, not at whatever the rate was on the day. The points contract is live on both testnets and on neither mainnet; on a network without it the rates shown are the launch defaults, labelled indicative rather than quoted as settled.
Alongside it is a readout in ETH, which no rate card prices. The Rewards tab on the same page shows four numbers for the connected wallet:
| Counted today | Why it is there |
|---|---|
| Launches created | you brought a token that did not exist before |
| ETH raised across them | separates a launch people bought from one nobody did |
| Positions held | you are holding, not only passing through |
| Portfolio value | the size of what you are holding, priced now |
All four are read live from the chain when the page loads, the same way a points balance is and for the same reason.
Liquidity provision is not counted yet. It is in the plan and nothing prices it — not the rate card, not these four numbers — so an LP reading either tab today is not seeing that half of it. Trading is counted, but per trade at a flat rate rather than by size, so volume is not itself the thing that earns.
Four networks, two chain families. These name actual chains — what a wallet has to be switched to, where a pool opens — and the app opens on Robinhood Testnet, which is what a visitor who never touches the switcher is reading. It opens on a testnet because neither mainnet is deployed yet; the day one is, that is the network the front door moves to.
“InkChain” is the brand word and never a claim about where something is deployed — a distinction that did some work when both chains were Ink and does all of it now. What differs between the families is not cosmetic: the launchpad, the exchange and uwPoints run on all four, but the plates collection and the waterdrop cannot run on Robinhood at all, because the art reads Aave V3 health factors and there is no Aave V3 there. On those two networks they are absent rather than pending — including on the one the app opens on.
| Chain ID | Gas token | Explorer | Our deploy | |
|---|---|---|---|---|
| Robinhood Chain | 4663 | ETH | robinhoodchain.blockscout.com | not deployed |
| Robinhood Chain Testnet | 46630 | ETH | explorer.testnet.chain.robinhood.com | live |
| Ink Mainnet | 57073 | ETH | explorer.inkonchain.com | not deployed |
| Ink Sepolia | 763373 | ETH | explorer-sepolia.inkonchain.com | live |
Deployed addresses are published in SECURITY.md and not repeated here — one list that a scanner and a reader both arrive at, rather than two that can disagree. Explorer source verification is still outstanding, so an explorer label is not yet evidence of what we deployed.
In order, and deliberately without dates. A missed date is the one mistake on this page that cannot be walked back, so nothing here carries one.
Everything below is a known trade-off rather than a discovered bug, and it is here because a docs page that lists only what works is an advertisement.
Report anything else to the address in SECURITY.md, which also lists every domain and account that is actually ours.