PAIR
Launch coin

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-eight assets, in three buckets, offered by name in the interface:

bucketwhat is in it
MajorsWETH, USDC, USD₮0, WBTC, USDC.e; the staked and wrapped majors wstETH, weETH, rETH, cbBTC, tBTC, RBTC; and LINK, UNI, CRV, AAVE, DAI, USDe, USD0, RAIN, CAKE, SUSHI
Arbitrum ecoPENDLE, ARB, GMX, MOR, LON, VSN, ESP, OHM, LPT, SQD, PEAS, ETHFI, FOLKS
MemesLION, AIDOGE, NYA, NST
Stocksnone today — see the last section

Every row was measured by the gates themselves on 2026-09-10 and listed only with 1.5x the headroom on its bar, so an ordinary withdrawal cannot drop it below the line the day after.

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. On the Base deployment this fork descends from, cbMEGA was on the 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 Arbitrum and fails when a row stops clearing its bar.

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, Camelot's Algebra pools, PancakeSwap V3 and SushiSwap V3 write their own history on every block. The gates read it over a 30-minute window:

  • tickCumulatives gives an arithmetic mean tick — a manipulation-resistant price
  • secondsPerLiquidityCumulativeX128 gives 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.

Camelot is the one venue that is not a Uniswap V3 fork — it is Algebra — and the difference is only cosmetic from here: the same two accumulators come out of a call named getTimepoints instead of observe, and there is one pool per pair rather than one per fee tier.

Venues that keep nothing

Uniswap v4 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 five anchors: WETH, USDC, USD₮0, WBTC and the bridged USDC.e. Five rather than three because Arbitrum's dollar liquidity is split across three dollar tokens, and reading only one would call a real market thin. In v4, native ETH counts as WETH — the two are the same asset to price, and most v4 pools quote in the native one.

Where it looks

Six sources, and the best answer wins — never the sum, because depth on two venues is not depth you can trade through at once.

venuehow it is readanything to do first?
Uniswap V3, every fee tierthe pool's own oracleno
Camelot (Algebra), one pool per pairthe pool's own oracle, via getTimepointsno
PancakeSwap V3, every fee tier (0.25% where Uniswap has 0.3%)the pool's own oracleno
SushiSwap V3, every fee tierthe pool's own oracleno
Uniswap V2, SushiSwap V2 and Camelot's classic pairsreservesno
Uniswap v4tick walkthe pool has to be named once

The venues matter more than it sounds. Arbitrum's majors sit on Uniswap V3, but what is native to the chain — GRAIL, Camelot's launches, most of the memecoins — has its deepest market on Camelot or on a constant-product pair that no concentrated-liquidity gate can see. MAGIC measures $7,000 on Uniswap V3 and $87,000 on SushiSwap V2; AIDOGE $2,000 on Uniswap V3 and $246,000 on a Camelot classic pair; LION nothing at all outside its one Uniswap V2 pair. A gate wired to Uniswap alone would refuse all three.

The one thing v4 asks for

Every venue above except v4 can be searched: you ask a factory for the pool and it answers. Uniswap 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

codemeaning
1not an ERC-20
2decimals outside 6–18
3no reference pool against WETH, USDC, USD₮0, WBTC or USDC.e — on v4, possibly just not named yet
4the pool is too young to have a full window of history
5not enough depth
6no anchor price available right now — transient, retry

Code 4 only comes from the oracle venues, and on the Uniswap-shaped ones it is fixable by anyone: primeObservations grows a pool's observation buffer permissionlessly, and the asset becomes measurable once the window has elapsed. Camelot's Algebra pools keep every timepoint from their first block, so there is nothing to prime — a young pool is simply not measurable until it is older.

What about tokenised stocks

The bucket the product was pitched on, and on Arbitrum today the honest answer is that it is empty. Of 1,012 tokenised stock and ETF tokens with an Arbitrum deployment — Dinari's dShares, Backed's xStocks, Ondo's — eighteen have a pool against any anchor on any venue the gates read, eight hold anything at all, and one holds more than $1,000 (a tokenised pound, not a stock). The rest are mint-and-redeem with their issuer: real tokens, no market. Robinhood's stock tokens live on Robinhood Chain, not on Arbitrum One.

Uniswap v4 was walked separately, from the PoolManager's own Initialize events, since it has no factory to ask: 220 v4 pools hold a stock-like token, 190 of them quoted in spam tokens, and the deepest of the 29 quoted in a dollar holds $259. An aggregator will still print a route from ETH into NVDAx through those pools — at a 76% price impact on a tenth of an ether, which is a quote, not a market.

The one tokenised stock with genuine depth — FNVDA, about $510,000 on Uniswap V3 — is quoted in FUSD, a dollar token with $3,000 of market of its own. The depth is real, in a unit nothing here can price, and making that unit an anchor would mean trusting a $3,000 pool to say what a dollar is worth. So it stays out, and it is written down here so nobody re-discovers it.

Nothing about a stock is special-cased. The day one has a market against an anchor, the gate lets it in and the Stocks tab comes back — contracts/stocks.txt is the measurement, and test/TokenisedStock.t.sol is the test that will start failing when it changes.