Pair assets
What your coin can be priced in. This is the part that replaces a hardcoded list of twenty-four tickers with a measurement.
The published list
Thirty-one assets, in four buckets, offered by name in the interface:
| bucket | what is in it |
|---|---|
| Stocks | Coinbase's B20 tokenised equities — NVDAc, AAPLc, GOOGLc, METAc, AMZNc, TSLAc, MSFTc, MSTRc — plus ST0x's wtSKHY |
| Large cap | the gas token, the dollar, and Coinbase's wrapped majors: cbBTC, cbETH, cbZEC, cbHYPE, cbXRP, cbADA, cbLTC, cbDOGE |
| BNB Chain eco | the largest protocols native to BNB Chain: MORPHO, BNKR, VVV, AERO, VIRTUAL, ZORA |
| Memes | TOSHI, BRETT, TIBBIR, Basecat, doginme |
The majors are Coinbase's wrapped tokens because that is what a major is on BNB Chain: there is no canonical bridged XRP, DOGE, ADA or LTC otherwise.
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 | $15,000 |
| pasted in by address | $50,000 |
Both numbers are depth in USD, 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.
That is not hypothetical. cbMEGA was on this list and came off it: its market thinned to around
$13,000, hovering either side of the bar from one block to the next. The chain would have refused a
launch against it anyway — the point of taking it off the published list is that the interface should
not offer by name something the chain is going to reject. A test walks the list against live BNB Chain
and fails when a row stops clearing its bar, which is how this one was caught.
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
PancakeSwap V3 and PancakeSwap PancakeSwap V3 write their own history on every block. 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
Pancake Infinity removed the oracle, and a constant-product pair never had one. There is no history to read, so these gates read the pool as it stands.
Depth on a v4 pool is worked out by walking the pool's ticks outward from the current price and
adding up the real amounts, the way a swap would — not by inferring a reserve from a liquidity
figure. That distinction is not academic: in our own tests a hair-thin range holding $15.0M reads
as $5,000M under the naive method, an overstatement of 334×. A constant-product reserve needs
none of that; getReserves is simply what the contract holds, and it is 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 in both
gates and is switched off. It samples the pool 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 was
falling on the wrong people: every legitimate coin waited half an hour and in practice almost none
were ever enrolled, so real markets worth hundreds of thousands read as nothing.
Depth is measured against three anchors: WETH, USDC and cbBTC. In v4, native BNB counts as WETH — the two are the same asset to price, and most v4 pools quote in the native one.
Where it looks
Five venues, 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 | anything to do first? |
|---|---|---|
| PancakeSwap V3, every fee tier | the pool's own oracle | no |
| PancakeSwap PancakeSwap V3, every tick spacing, both factories | the pool's own oracle | no |
| PancakeSwap V2 and SushiSwap V2 | reserves | no |
| PancakeSwap's classic AMM, stable and volatile | reserves | no |
| Pancake Infinity | tick walk | the pool has to be named once |
The two PancakeSwap V3 factories matter more than it sounds. BNB Chain runs two deployments under the same PancakeSwap voter, and they hold different markets — the AERO and WETH majors on one, every tokenised stock on the other. A gate wired to only the first reports "no market" for assets with millions of dollars behind them.
The one thing v4 asks for
Every venue above except v4 can be searched: you ask a factory for the pool and it answers. PancakeSwap v4's singleton has no such lookup — a pool is identified by the hash of its key, and that key contains a 160-bit hook address. You can verify a key you already hold; you cannot go the other way.
So a v4 pool has to be named once, by anyone, for everyone:
v4Gate.registerPool(PoolKey key) // any v4 pool with an anchor on one side
v4Gate.registerLaunch(address token) // shorthand for a coin launched here
The interface does this for you: paste an address whose market is on v4 and it finds the pool, works
out its key from the Initialize event the PoolManager emitted, and offers a single button. One
transaction, and the coin is usable immediately afterwards.
Registration refuses a pool holding less than a quarter of the bar, so the list stays something worth walking.
Coins launched here
A coin launched on Pair is a v4 coin with no market anywhere else, so it goes through the same
path: registerLaunch, then it counts. Nothing about it is special-cased.
Its liquidity being permanently locked in the vault is a real extra guarantee, but it is not what makes it eligible — the depth is. A Pair coin becomes usable as a pair asset once $50,000 of real backing has accumulated in its pool, 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 WETH, USDC or cbBTC — on v4, possibly just not named yet |
| 4 | the pool is too young to have a full window of history |
| 5 | not enough depth |
| 6 | no anchor price available right now — transient, retry |
Code 4 only comes from the oracle venues, and it is fixable by anyone: primeObservations grows a
pool's observation buffer permissionlessly, and the asset becomes measurable once the window has
elapsed.
What still cannot be measured
Hydrex pools have no observe, no slot0 and no oracle at all — nothing to read at any price.
An asset whose only market is there measures as zero however deep it is.
wtSPYM, the S&P 500 ETF, was the one such entry — $654,588 of liquidity and half a million dollars
of daily volume, of which the gates could read $887. It was listed through an explicit override that
skipped measurement, and it came off the list for a reason worth recording: the gate accepted it but
the dev-buy swap could not route to it, so a coin paired against it launched fine and could never be
bought into. An asset the interface offers and a launch then cannot use is exactly what the list is
meant to prevent. Nothing on the list bypasses measurement now.
Two other ST0x assets were considered for that override and rejected earlier: wtQQQM and wtSPCX
trade $5 and $4 a day.