04 — Docs

How Dojo
works

What launching a coin against another coin means, what decides what you can pair with, and where every fee goes.


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

Five assets, offered by name in the interface:

<!-- CURATED LIST -->
bucketsymboladdressmeasured depth
anchorINJ (held in the pool as its wrapper, wINJ, because a pool holds ERC-20s)0x0000000088827d2d103ee2d9A6b781773AE03FfBanchor
anchorUSDT0x88f7F2b685F9692caf8c478f5BADF09eE9B1Cc13anchor
anchorUSDC0xa00C59fF5a080D2b954d0c75e46E22a0c371235aanchor
anchorwETH0x83A15000b753AC0EeE06D2Cb41a69e76D0D5c7F7anchor
long tailMOTION0x7a1C36f34e43014EfD5E08ead6f99118BC1ACA20$6,737 against wINJ
<!-- /CURATED LIST -->

That is a short list, and it is short because Injective EVM's book is. On 22 September 2026 every concentrated pool on the chain together — all of them in Choice Exchange's Infinity deployment — held about $43,000. Every pool was measured the way the gate measures it before anything was written down, and what did not make it is listed below with the reason, so nobody has to wonder.

assetdepth measuredwhy it is not on the list
1MORE$1,157 against wINJunder the curated bar
PROOF$132 against wINJfar under the bar, and its pool sits behind Choice's launch guard hook
INJIVA$5,418 against wINJbehind Choice's launch fee hook, which runs on every swap; no hook is accepted until the owner has read it
CULT$9,771 against wINJthe same hook

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$2,000
pasted in by address$5,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 Injective, not copied from anywhere else. The Avalanche deployment this was ported from used $10,000 and $25,000; against a whole-chain book of $43,000 those would leave nothing but the anchors. A fifth of them keeps the one real long-tail market and still refuses the pools that are a few hundred dollars deep. Lowering them further would admit markets a single wallet can stage.

Anchors

Four assets are eligible without being measured, because everything else is priced against them:

anchorpriced by
wINJAPI3's INJ/USD dAPI
USDTpar, $1
USDCpar, $1
wETHAPI3's ETH/USD dAPI

Injective EVM has no Chainlink push feeds, so the prices come from API3, whose reader proxies speak Chainlink's interface. There is no BTC/USD dAPI on the chain, and so no bitcoin anchor. A feed older than 26 hours prices nothing rather than something stale: the dollar dAPIs publish on a 24-hour heartbeat, and INJ/USD moves on deviation and is usually minutes old.

How depth is measured

Not by asking a price feed, and not from a single number a launcher could have arranged.

An Infinity pool keeps no oracle — no price history at all — and every pool's tokens sit in one shared Vault, so there is no per-pool balance to cap a reading by either. So the gate, InfinityQuoteGate, walks the pool's own ticks outward from the current price, up to 20,000 ticks away, and adds up the anchor that a trade could actually take out on the way, exactly as a swap would. A few hundred dollars in a one-tick range integrates to a few hundred dollars, however large a liquidity figure it produces. Anchor parked far from the price is not counted, because no trade inside that span reaches it.

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. With requireWitness on, the gate keeps a record of readings anyone can take with poke — at least eight, at least four minutes apart, spanning half an hour, none older than an hour — and uses the lowest of them, together with the live one. Faking that means holding the depth through readings you do not control the timing of. 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 need someone sampling it. On a chain this thin it is the setting most worth revisiting as the book grows.

Which pools count

A pool becomes evidence for a coin once somebody registers it with the gate. Infinity's singleton has no directory the gate could search, so the pool has to be named — registerPool(key), which anyone can call. Rules:

  • The pool must hold exactly one anchor; the coin is the other side.
  • It must already show a quarter of the curated bar ($500) — registration is permissionless, and a coin only has two slots, so they cannot be squatted for nothing.
  • The key must name Choice's CLPoolManager. An Infinity key carries its own pool manager, and one naming any other contract is refused before anything is read.
  • Hookless pools only, unless the owner has allowlisted the hook. A hook runs on every swap and can refuse one, so a hooked pool can hold depth that nobody is able to trade against — the very thing the gate exists to rule out. Allowing a hook (setHookAllowed) is an owner decision made after reading it; none is allowed today.

Pools quoted in native INJ count as wINJ. Where a coin has two registered pools, the deeper one decides — never the sum, because depth in two pools is not depth you can trade through at once.

Coins launched here

A coin launched here trades in its own Infinity pool, and that pool is exactly the kind the gate reads. So a coin launched here can become a pair asset in its own right: once real money has been paid into its pool — launches open single-sided, holding no pair asset at all until somebody buys — anyone can call registerLaunch(token), and it is measured like everything else, against the custom bar unless it is curated.

Nothing about it is special-cased in either direction. Its liquidity being permanently locked in the vault is a real extra guarantee — it cannot be pulled mid-window — but the anchor side still moves with the price, and the price is still flash-movable, so it is measured the same way.

Allowlisted, not measured

The registry can also allowlist an asset, which means it answers "allowed" without measuring anything. That is the one place this protocol would take someone's word instead of reading the chain.

On Injective it exists for one kind of asset: tokens whose real market is somewhere the EVM cannot see. Much of Injective's liquidity lives on Helix's order book and on Choice's CosmWasm AMM, and a bank-module token traded only there has an ERC-20 address here but no pool for any gate to read. Nothing is allowlisted today. The allowlist can be withdrawn by the owner for future launches; it cannot touch a coin already launched.

Why an asset gets refused

codemeaning
1not an ERC-20
2decimals outside 6–18
3no registered pool against the anchors
4not enough readings yet (only with witnessing switched on)
5not enough depth
6no anchor price available right now — transient, retry

Code 3 is the common one here, and it is fixable by anyone: find the coin's pool against an anchor and register it.