Maelstrom
Launch coin

Pair assets

What your coin can be priced in. A short published list for discovery, anything else by coin type, and a registry on chain that has the final word.

The published list

Twenty assets in five buckets, offered by name in the interface. Every coin type and its decimals were read on-chain, and every entry had a market deep enough to price a launch against when the list was written.

bucketwhat is in it
SuiSUI, and Haedal's staked SUI, haSUI
MajorsUSDC (Circle, native), USDT and wBTC and suiETH (Sui Bridge), suiUSDe (Ethena), BUCK (Bucket), xBTC (OKX)
Sui ecoDEEP (DeepBook), CETUS, WAL (Walrus), HAEDAL, NAVX (NAVI), NS (SuiNS)
MemesHIPPO, BLUB, FUD
RWAUSDY (Ondo, US Treasuries), XAUM (Matrixdock, gold)

There are no tokenised stocks on the list because there are none on Sui with a market. The nearest real-world assets are Ondo's USDY and gold-backed XAUM, and they sit under RWA.

Decimals are not uniform, and they matter: USDC and DEEP have 6, the bitcoins and suiETH 8, FUD 5, BLUB 2. A tick is a ratio of raw units, so the interface reads each asset's decimals from its coin metadata rather than assuming 9.

Anything else

You are not limited to the list. Paste any coin type — 0x…::module::NAME — and it goes through the same checks; it just has to clear a higher bar, because nobody has looked at it.

depth it must show
on the published list$15,000
pasted in by coin type$50,000

Being on the list lowers the bar; it never removes it.

How eligibility works

Two layers, and it is worth being exact about which one does what.

On chain: the launchpad's registry

The Launchpad object carries quotes, a Table<TypeName, u8> of explicit decisions — 1 allows a pair asset, 2 denies it — and open_quotes, a flag that decides everything without a decision. launchpad::is_quote_allowed<Q> is the whole rule:

  • an asset with a decision gets that decision;
  • any other asset is allowed while open_quotes is true, and refused while it is false.

open_quotes starts true, so the table is in practice a deny list: the place for coins that should never be quoted against — impersonations of real assets, designs whose balances move on their own, outright scams. Turned off, the same table becomes an allow list. Both are owner calls with the AdminCap: set_quote_decision<Q>(pad, cap, decision) and set_open_quotes(pad, cap, open). A launch against a refused asset aborts with EQuoteNotAllowed, whoever builds the transaction.

Off chain: depth

The dollar bars are measured by the interface, not the contract. When you pick or paste a pair asset, the interface looks up its markets on Sui through DexScreener, takes the deepest single pool it has on any exchange DexScreener indexes, and compares that pool's USD liquidity with the bar. Below the bar, the interface will not build the launch, and says why.

The deepest pool and never the sum: depth split across five venues is not depth anybody can trade through in one go.

Two exceptions and one more requirement. SUI and USDC skip the depth check: they are what every other market on Sui is priced against, and their depth is not in question. And every pair asset needs a live USD price, because the interface sets the opening valuation in dollars — an asset nobody can price right now cannot be launched against until it can.

What that means, plainly

The depth bar is a quality filter, not a security boundary. Anyone who calls launch_as_a or launch_as_b directly — from the CLI, from another front end — can launch against any asset the on-chain registry does not refuse, however thin its market. Nothing in the protocol's funds depends on the bar. It exists so that the interface does not offer a launch whose price anyone could push around with pocket change, taking the coin's chart with it.

Why it is not on chain: there is nothing trustworthy for a contract to read. Cetus pools keep no price or liquidity history — no oracle, no accumulators — so an on-chain check could only read the pool as it stands, and the pool as it stands is one flash loan away from saying anything: borrow, add liquidity, be measured, remove, repay, all inside the launch transaction. And a Sui asset's markets are spread over several exchanges that no single contract call can see together. DexScreener's figure is not manipulation-proof either, but faking it means holding real liquidity in a real pool for as long as the indexer and the launch take, which is a different order of cost.

The other limits, stated rather than buried:

  • The measurement trusts DexScreener. If it mislabels a pool or is down, the interface refuses launches it should allow, or — less likely — the reverse.
  • Depth is read when you pick the asset, not when the transaction lands. A market that empties in between is not caught.
  • Regulated coins are launchable unless denied. USDC's issuer can deny an address from receiving it; that cannot touch a launch's liquidity, but it can stall a collect — see Fees.

Coins launched here

A coin launched on Maelstrom can be a pair asset for the next one, through the same path as anything pasted in: it needs $50,000 of depth in its pool, and the registry must not refuse it. Its liquidity being permanently locked is a real extra guarantee, but it is not what makes it eligible — the depth is.