The published list
Twenty assets, in three buckets, offered by name in the interface:
| bucket | what is in it |
|---|---|
| Large cap | the seven anchors — MON (held in the pool as its wrapper, WMON, because a launch's pool holds ERC-20s), USDC, USDT0, AUSD, WBTC, cbBTC and WETH — then syrupUSDC (Maple), GHO (Aave), mUSD (MetaMask), EURW (Newrails) and Cake |
| Monad eco | LVMON, LV and LVUSD (LeverUp), shMON (FastLane), gMON |
| Memes | DUST, FLING, ALLOCA |
Each was measured by the gates themselves before being written down: Monad's book is young and
concentrated — 58 pools held $5,000 or more when it was measured, 30 candidates came out of them,
and 15 cleared the bar. Three of those (syrupUSDC, GHO, mUSD) are visible only on Uniswap V4.
Four assets were measured and left off on purpose. USDe is indexed at about $3.4 million on V4, but
its pool against USDT0 trades at 1.045 — the USDT0 side has been arbitraged out, and the gate counts
only the anchor a buyer can actually take out. CHAOS is the same story on its USDC pool. BNCB
clears the bar on PancakeSwap V3, but it carries a listed company's name and nothing on chain says
what claim, if any, the token is. SAVVA.M clears it on a single Uniswap V2 pair and has no market
beyond it. A ticker in a picker is a promise about what a creator is pairing with. Any of them can
still be pasted in by address, where the interface shows what the gate found.
Anything else
You are not limited to the list. Paste any address and it goes through the same measurement — it just has to clear a higher bar, because nobody has looked at it.
| bar it must clear | |
|---|---|
| on the published list | $10,000 |
| pasted in by address | $25,000 |
Both numbers are depth in USD on the anchor side of the pool, and both are read live at the moment of the launch. Being on the list lowers the bar; it never removes it. A listed asset whose market dies stops being launchable on its own, without anyone intervening.
Allowlisted, not measured
The owner can allowlist an asset, which means the registry answers "allowed" without measuring anything — the one place this protocol would take someone's word instead of reading the chain. Nothing is allowlisted on Monad: every asset worth offering was measurable on one of the venues the gates read. If that ever changes, the asset appears in the picker marked as allowlisted, with who issues it, and this page says exactly what the word is worth.
How depth is measured
Not by asking a price feed, and not from a single number a launcher could have arranged. What the gate reads depends on what the venue keeps.
Venues that keep an oracle
Uniswap V3 and PancakeSwap V3 write their own history as they trade. The gates read it over a 30-minute window:
tickCumulativesgives an arithmetic mean tick — a manipulation-resistant pricesecondsPerLiquidityCumulativeX128gives the harmonic mean of in-range liquidity
and those two convert into the depth sitting on the anchor side of the pool. Faking that means actually holding the liquidity for the whole window.
That alone would still be gameable: a very tight range turns a few hundred dollars into an enormous liquidity figure, because it describes depth at the current price and says nothing about what the pool holds. So the reading is capped by the anchor tokens actually in the pool. Spot balance is inflatable with a flash loan; time-weighted liquidity is inflatable with a tight range — but not the same way. Passing requires beating both at once, which is indistinguishable from being a real market.
Venues that keep nothing
Two kinds of venue never had an oracle.
Constant-product pairs — Uniswap V2 and PancakeSwap V2. There is no history to read, so the gate
reads the pair as it stands: getReserves is simply what the contract holds, read rather than
balanceOf so that tokens sent to a pair without being synced in do not count.
Uniswap V4. On Monad this is where most of the book sits, and a V4 pool keeps no history either.
It also cannot be found: V4 has no factory to ask for a pool, only the PoolManager, which knows a
pool by the hash of its key. So the V4 gate (SampledV4QuoteGate) measures only pools somebody has
named — registerPool(key) — and then reads the anchor side of each, at most two per coin. Registering is open to anyone, but the pool
must already hold a quarter of the bar. The interface finds the pool and its key for you and offers
the button when a coin is refused for want of one. Most of Monad's V4 pools quote in native MON rather
than WMON; the gate treats the two as the same anchor.
What a live reading cannot do, stated plainly rather than buried: it describes this instant, and
this instant is one flash loan away from saying anything — borrow, deposit as liquidity, be measured,
withdraw, repay, all inside one transaction. The machinery to defend against that exists on both
gates and is switched off. It samples the market over a window and takes the minimum, which is
expensive to fake because nobody controls when the next reading happens (poke is open to anyone);
it is one owner call (setRequireWitness(true)) away, with no redeployment. It is off because the
certain cost falls on the wrong people: every legitimate coin would wait half an hour, and on Monad
that is a large part of the catalogue. It is the single setting on this deployment most worth
revisiting.
Depth is measured against seven anchors: WMON (and native MON on V4), USDC, USDT0, AUSD, WBTC, cbBTC and WETH, priced by Chainlink's MON, BTC and ETH feeds on Monad.
Where it looks
Every venue the gates can read, and the best answer wins — never the sum, because depth on two venues is not depth you can trade through at once.
| venue | how it is read |
|---|---|
| Uniswap V3, every fee tier (0.01%, 0.05%, 0.3%, 1%) | the pool's own oracle |
| PancakeSwap V3, its own ladder (0.01%, 0.05%, 0.25%, 1%) | the pool's own oracle — a second instance of the same gate |
| Uniswap V4, registered pools | the anchor side of the pool, live (sampled, if witnessing is switched on) |
| Uniswap V2, PancakeSwap V2 | reserves |
What is not read, and what that costs
Venues with real volume that no gate reads today — Kuru's order book, LFJ's Liquidity Book, Curve,
Balancer and the long tail of smaller AMMs — are a limit of the deployment rather than a property of
those markets. Any of them can be added without redeploying anything else:
CompositeQuoteGate.setSources takes a new source whenever one is written. Until then a coin deep
only on those venues has to be allowlisted by the owner, or not used.
Coins launched here
A coin launched here trades in its own Uniswap V3 pool, and its liquidity is permanently locked in the
vault. That is a real extra guarantee, but it is not what makes a coin eligible — measurable depth is.
The launch pool is read by the Uniswap V3 gate like any other V3 pool, from its own oracle, with
nothing to register: the coin becomes usable as a pair asset once that pool, or another market the
gates read, holds $25,000 on its anchor side over the oracle window. A fresh pool remembers only
its last observation; primeObservations (permissionless) grows its buffer so the half-hour window
can be read. Nothing
about it is special-cased in either direction.
Why an asset gets refused
| code | meaning |
|---|---|
| 1 | not an ERC-20 |
| 2 | decimals outside 6–18 |
| 3 | no reference pool against the anchors (on V4: no pool registered yet) |
| 4 | the pool's oracle does not reach a full window back — or, on a witnessing gate, not enough readings yet |
| 5 | not enough depth |
| 6 | no anchor price available right now — transient, retry |
Code 4 from the oracle venues is worth understanding on Monad: blocks arrive about every 0.3 seconds,
and a pool whose observation buffer holds a single slot cannot answer a half-hour question once it
has traded. It is fixable by anyone: primeObservations grows a pool's buffer permissionlessly, and
the asset becomes measurable once the window has elapsed.
