Pair assets
What your coin can be priced in. This is the part that replaces a hardcoded list of tickers with a measurement.
The published list
The assets offered by name in the interface, in three buckets — Large cap (the gas token, the dollars and the majors), Sonic eco (the chain's own protocol coins) and Memes — are the ones the gates themselves measured before they were written down. Every candidate with a pool on the chain was scanned against live state by the same code the registry runs, and nothing is listed that only just clears its bar: an asset that barely does drops out on an ordinary withdrawal, and the first anyone would know is a launch reverting.
| Category | Asset | What it is | Measured depth |
|---|---|---|---|
| Large cap | S (as wS) | the gas token | anchor |
| Large cap | USDC.e | Sonic Labs' bridged USDC | anchor |
| Large cap | USDT | bridged Tether | anchor |
| Large cap | stS | Beets' liquid-staked S | anchor |
| Large cap | WBTC | wrapped bitcoin | anchor |
| Large cap | WETH | Sonic Labs' bridged ether — on Shadow, and the one coin here with a Uniswap V3 market | $76,800 |
| Large cap | scUSD | Rings' dollar, on Shadow | $37,600 |
| Sonic eco | SHADOW | Shadow Exchange | $12,600 |
| Sonic eco | x33 | Shadow's liquid staking token | $9,400 |
| Sonic eco | FIVE | DeFive, measured on its own constant-product pair | $34,200 |
| Sonic eco | PEAS | Peapods, on Shadow | $83,500 |
Eleven rows: the five anchors and six of the seven assets that cleared the bar out of the 41
candidates scanned on 2026-09-23 (USSD cleared by $100 and is left off for that reason). No memecoin on Sonic clears either bar today, so the Memes bucket exists
and is empty. Four more coins measure between the two bars on a constant-product pair alone (SNS,
HEDGY, LUMOS, SPUB, at $5,000–$6,100 of anchor reserves); they are left off on purpose, and
can still be pasted in by address once they clear $10,000.
The five anchors — S (held in the pool as its wrapper, wS, because a pool holds ERC-20s),
USDC.e, USDT, stS and WBTC — are the assets everything else is priced against, so they are
exempt from the bar by construction: an anchor is priced, not measured.
Ether is on the list and is not an anchor, on purpose. WETH is measured like any other coin, and
clears easily — its Shadow market alone is several times the bar — and keeping it outside the anchor
set means the one non-anchor asset with a real Uniswap V3 market on Sonic is something the tests can
lean on. The cost is that a pool quoted in WETH is not read when measuring some other coin; see
What is not read.
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 | $5,000 |
| pasted in by address | $10,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.
The bars are set against Sonic, not copied from anywhere else. Its book is thin: the deepest pool on the whole chain holds under $200,000, and most of what trades here trades on one venue. Half the bars the same protocol runs on Avalanche would have left a list of five anchors and three coins.
Allowlisted, not measured
The protocol's owner can allowlist an asset, which means the registry answers "allowed" without measuring anything. That is the one place this protocol takes someone's word instead of reading the chain, and it is meant for assets whose market is real but sits on a venue no gate can read — a Liquidity Book pair, a Balancer pool, a pair deployed by hand rather than by a factory.
Nothing is allowlisted on Sonic yet. When something is, it will be listed in
contracts/allowlist.csv beside what the gates actually see for it, which for
these is close to nothing — that is the point of writing it down.
The allowlist can be withdrawn by the owner for future launches. It cannot touch a coin already launched: its pool and its locked liquidity are its own.
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, Shadow and SpookySwap 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
A constant-product pair — SpookySwap's V2 pools, DeFive, SonicSwap, Equalizer's classic pools —
never had an oracle. 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.
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 and is
switched off. It samples the pair over a window and takes the minimum, which is expensive to fake
because nobody controls when the next reading happens; 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. On Sonic the constant-product pairs
carry less of the list than they did on Avalanche — Shadow holds most of the chain's real markets and
keeps an oracle — but the deepest memecoin market on the chain is a DeFive pair, so the setting is
still worth a deliberate decision before launch.
Depth is measured against five anchors: wS, USDC.e, USDT, stS and WBTC. The dollars are priced at par; the other three through their Chainlink feeds, which on Sonic publish on a 24-hour heartbeat — so a feed a day old is normal here, and the gates treat anything past 26 hours as broken.
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 | where it matters |
|---|---|---|
| Uniswap V3 (Oku's deployment), every fee tier | the pool's own oracle | WETH, and every coin launched here |
| Shadow (concentrated), every tick spacing | the pool's own oracle | SHADOW, scUSD, x33, FLY, USSD — where most of the chain's real markets are |
| SpookySwap V3, Uniswap's fee ladder | the pool's own oracle | JEFE, BOO — a few ecosystem coins Uniswap does not carry |
| SpookySwap V2, DeFive, SonicSwap | reserves | the memecoins — FIVE first among them |
| Equalizer's classic AMM, stable and volatile | reserves | EQUAL and the ve(3,3) long tail |
Shadow and SpookySwap V3 are both Uniswap V3 forks and are read the same way, with one wrinkle. Shadow keys a pool by tick spacing rather than fee, and its factory cannot list the spacings it enables, so the gate is told the range — 1, 5, 10, 50, 100, 200 — and probes it. SpookySwap V3 keys by fee like Uniswap, on Uniswap's own ladder.
Equalizer has a wrinkle of its own, in the name rather than the shape: Solidly forks disagree on what
to call the factory's lookup. Velodrome and its descendants say getPool; the original Solidly, and
Equalizer with it, say getPair. The gate asks both ways before it concludes there is no pair — the
first version of this port asked one way, and Equalizer's entire book read as "no market".
What is not read, and what that costs
Venues with real volume that are invisible to every gate today, a limit of the deployment rather than a property of those markets:
- SwapX. Algebra-shaped:
globalState()in place ofslot0, and its oracle lives in a plugin contract rather than on the pool. - Metropolis. A Liquidity Book — a bin AMM, not a tick one — with no tick oracle.
USSD's deepest market is there; it is listed on the strength of its Shadow pool instead. - Beets. Balancer pools, a different shape again.
stS's deepest market is there; it is an anchor, so it does not need measuring. - Wagmi and SushiSwap V3. Uniswap-shaped and readable by another
UniV3QuoteGateinstance; between them they hold one wS/USDC.e pool worth reading and nothing else today. - Pools quoted in WETH. WETH is not an anchor, so a coin whose only market is against WETH measures as zero.
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 that pool is read by UniV3QuoteGate
like any other. Nothing about it is special-cased in either direction: it goes through the same path
as everything else, and what that path measures is the anchor-side depth of its market.
Its liquidity being permanently locked in the vault is a real extra guarantee, but it is not what makes a coin eligible — measurable depth is, and a launch puts no pair asset in the pool. A coin launched here becomes usable as a pair asset once buyers have put $10,000 of the anchor side into it and held it there for a window, or once the owner allowlists it, and not before.
Why an asset gets refused
| code | meaning |
|---|---|
| 1 | not an ERC-20 |
| 2 | decimals outside 6–18 |
| 3 | no reference pool against the anchors |
| 4 | the pool's oracle does not reach a full window back |
| 5 | not enough depth |
| 6 | no anchor price available right now — transient, retry |
Code 4 only comes from the oracle venues, and it is common on Sonic: blocks arrive faster than one a
second, and many pools keep a buffer of a single observation, which cannot answer a half-hour
question once the pool has traded. JEFE's SpookySwap V3 pool holds some $54,000 and keeps one
slot, so it cannot be measured there; its Shadow pool, which can be read, holds a fraction of that.
It is fixable by anyone: primeObservations grows a pool's buffer permissionlessly, and the asset
becomes measurable once the window has elapsed.