Strak is a terminal for every tokenized stock on Solana. Next to price and volume it shows one number no one else puts on the screen: turnover, the 24 hour volume divided by the liquidity behind it. Everyone shows the price. Strak shows whether it's lying.
Stocks on the board·
Volume, 24h·
Above 12x now·
Hottest now·
Numbers in this strip are read from /api/registry when the page loads.
Why this exists
A tokenized stock on Solana trades in an AMM pool. The price you see is simply where the last trades left that pool, and the 24h volume next to it is the sum of those trades. Both numbers are easy to inflate: a wallet that swaps back and forth with itself moves volume up and nudges the price wherever it likes, and nothing on a normal price screen tells you it happened.
There is one thing a loop can't hide: how many times it had to push the pool's entire depth through itself to produce that volume. Real demand for a stock rarely turns a pool over dozens of times a day. Strak measures exactly that, for every tokenized stock on the chain, and colours the board by it.
Who it is for
Traders who want to know whether a price has a market behind it before they trade against it.
Researchers and writers who need a single, reproducible number for "this volume looks fake".
Builders who want the whole tokenized equity universe on Solana as one clean JSON file.
Getting started
Quick start
Open the terminal. The board lists every stock, sorted by turnover, highest first. Click any column header to sort by it; click again to flip the order.
Star what you follow. The star next to a stock puts it on the Watchlist tab. The list lives in your browser only.
Read the colour of the row. No tint is normal trading. A violet edge means 12x to 50x. A green glow means above 50x: the volume is painted.
Click a stock. The detail panel shows the verdict bar, candles, pool depth and how often the whole pool changes hands.
Check the wrappers. If the same company trades under another issuer, the prices are listed side by side. A wide gap means one of the pools is not pricing the stock.
Verify on chain. Every stock links to its mint and its pool on Solscan.
No account, no wallet. Strak is read-only. It never asks to connect a wallet and never places a trade.
Getting started
Reading the terminal
The board
Each row is one tokenized stock: its symbol, name and issuer dot, price, 24h change, 24h volume and turnover. The row's tint follows the turnover band. Above the table:
Issuer tabs: All, Backpack, xStocks, Ondo, each with its live count, and Pre-IPO on the right, which swaps the board for a separate universe rather than filtering it.
Search: matches symbol (NVDAx), plain ticker (NVDA) or company name.
Sort: Turnover, Volume, Depth (liquidity), Change, A to Z.
Above 12x only: hides everything in the normal band.
The tape across the top runs the 24 highest turnovers with their 24h change. The status pill shows the US equity session in New York time (pre-market, open, after hours, closed), because the stocks these tokens track only move on news and fundamentals during that session.
The detail panel
Block
What it shows
Verdict bar
Turnover on a log scale from 0.1x to 200x, with marks at 12x and 50x, the band name and a one-line reading.
Chart
Candles for the whole token, every pool at once, from 1 second to 1 day (1s, 15s, 1m, 5m, 15m, 1H, 4H, 1D), in price or in market cap, with volume along the bottom. Scrolling to the left edge loads older candles, back to the first trade. Indicators switch MA 7, MA 25, MA 99 and volume on and off. The rail on the left draws trend lines and horizontal price lines; the bin removes them. Below the chart, 1d, 7d, 30d and 180d pick a span and a timeframe that fits it, and %, log and auto change the price scale. The camera saves the chart as an image. New candles arrive every 2 seconds on 1s and up to every 2 minutes on 1D while the chart is open.
Volume 24h
Buy plus sell volume across the token's pools, in USD.
Pool liquidity
USD liquidity behind the token.
Pool turns over every
1440 minutes divided by turnover: how often, at this pace, the whole depth changes hands.
Trades 24h
Number of buys plus sells.
Holders
Wallets holding the token.
Jupiter organic score
Jupiter's own 0 to 100 estimate of how organic the token's activity is. Shown for reference; Strak does not use it in turnover.
Who trades it
The last 300 swaps across every pool of the stock: trades a minute, median trade, distinct wallets, the share carried by the top three, and how many wallets both bought and sold. Refreshes every 30 seconds.
Other issuers
The same company under other wrappers: price, difference from the selected one, turnover.
Links
Token and pool on Solscan, the pair on DexScreener, and which DEX and quote asset the pool uses.
The board refreshes itself every two minutes. The timestamp under the table says whether you are looking at the live registry or the static snapshot.
Method
Turnover
Turnover is the whole product in one ratio:
turnover=volume 24h÷liquidity
Both inputs are in US dollars and cover the same token over the same 24 hours, so the ratio has no unit. It reads as "how many times did the traded volume cover the depth behind the price". A turnover of 3x means the day's trades added up to three times the pool.
Turnover as time
A ratio is easy to compute and hard to feel. Strak also shows it as time: if a day has 1440 minutes and the pool turned over t times, the whole depth changed hands once every 1440 / t minutes.
Turnover
Whole pool changes hands every
1x
24 hours
3x
8 hours
12x
2 hours
50x
29 minutes
150x
under 10 minutes
A worked example
Live, from the registry
Loading the hottest stock on the board…
Precision
Turnover is computed once per registry build and rounded to two decimals. Volume and liquidity come from the same Jupiter record, so both sides of the ratio are always from the same moment.
Method
The three bands
Every stock falls into one of three bands. The counts are live.
up to 12xNormal trading
Volume fits what the pool can carry. The whole depth changes hands no faster than every two hours.
·
12x to 50xSuspiciously hot
Volume runs far ahead of depth. It can be news or an earnings day, it can be a loop. Open the chart before trusting the price.
·
above 50xVolume is painted
The pool would have to change hands more than twice an hour, around the clock. Treat the price as unquoted.
·
Why 12x and 50x
The thresholds are heuristics, not laws of nature, and they are stated in the open so anyone can argue with them. They come from turning the ratio into time:
12x is a full turn of the pool every two hours for 24 hours straight, including the hours when the underlying US market is closed and nothing new is known about the company. A busy, healthy pool can get there on a big news day; it rarely stays there.
50x is a full turn every half hour, all day and all night. At that pace the same dollars would have to cross the pool again and again. Real demand for a stock does not look like that. A loop of trades does.
Values are compared with > 12 and > 50: exactly 12.00x is still normal, exactly 50.00x is still hot.
Method
Who makes the volume
Turnover says the volume does not fit the pool. It does not say who is producing it. For that, Strak reads the stock's last 300 swaps, across every pool, and groups them by wallet. Four numbers come out, and together they separate a busy market from a loop.
Number
What it means
What a loop looks like
Distinct wallets
How many addresses traded in the window.
Few wallets carrying a lot of volume.
Top 3 share
Share of the window's volume carried by the three biggest wallets.
Above half, sustained.
Bought and sold
Wallets that did both inside the same window, and the share of volume they carry.
A round trip is what wash trading is made of.
Trades a minute, median trade
The pace, and the size of a typical trade.
A fast, even drum of near-identical small trades.
None of these is proof on its own. Market makers quote both sides for a living, so a wallet that bought and sold is doing its job, not necessarily faking. Arbitrage between two wrappers of the same stock also shows up as round trips. Read these next to turnover, not instead of it.
The same numbers are on the landing page for the hottest pools, updating every 20 seconds, and under every chart in the terminal. Through the API they come from /api/trades.
Method
What turnover can't tell you
Turnover is a screen, not a verdict from a court. Read it with these limits in mind:
High is not proof. Earnings, index news or a sudden re-rating can push an honest pool into the hot band for a day. Look at the chart and at the other wrappers before concluding anything.
Low is not a clean bill. A pool can be manipulated with little volume, for example by one large trade in a thin pool. Low turnover only says the volume is plausible.
Thin pools are noisy. A stock needs at least $5K of liquidity to be on the board, but near that floor a single trade moves the ratio a lot.
24 hours is a window. A burst an hour ago and a steady day can produce the same number. The candles show which it was.
Aggregator data. Volume and liquidity are Jupiter's figures for the token across its pools. Strak does not recount swaps itself; every figure links to the chain so it can be checked.
Method
Case files
Dated snapshots from past registry runs. They are not live data, and each one carries the date of the run it came from.
23.09.2026Volume is painted
IONQ, Backpack Securities: 152.4x
Volume 24h$16.5M
Liquidity$108K
Turnover152.4x
Pool turns every9 min
On the first registry run, IONQ from Backpack Securities reported $16.5M of volume against $108K of liquidity. To produce that honestly, the whole pool would have had to change hands roughly every nine minutes for a full day. It was the highest turnover on the board by a wide margin; the next stock was around 33x.
Two days later, on 25.09.2026, the same token read 3.7x: $413K of volume on $111K of liquidity. The depth barely moved. The volume fell by a factor of forty.
Data
Universe and issuers
Strak covers tokenized stocks from three issuers. Each one names its tokens its own way, which is how the same company can appear two or three times.
Issuer
Jupiter tag
Ticker style
On the board now
Backpack Securities
backpack
no suffix: IONQ, HIMS
·
xStocks (Backed)
xstocks
suffix x: NVDAx, SPYx
·
Ondo Global Markets
ondo
suffix on: SPYon
·
Inclusion rules
A token is on the board when all of these hold:
It is in Jupiter's verified token list.
It carries one of the issuer tags above.
It does not carry the unknown tag. Copies that reuse a real ticker are tagged this way and are dropped.
It has at least $5,000 of liquidity. Below that a pool is decoration, not a market. Issuers mint many listings nobody trades; this rule removes them.
It is the deepest listing of its ticker for that issuer. If an issuer has two tokens with the same ticker, the one with more liquidity stays.
Tokens tagged as stocks but without an issuer tag are not included.
Tickers and symbols
Every record carries two names. symbol is the token's own symbol (NVDAx). ticker is the plain company ticker with the issuer suffix removed (NVDA). The terminal groups wrappers of one company by ticker.
Data
Pre-IPO tokens
A second, smaller universe trades on Solana: tokens that track companies with no listed shares at all. OpenAI, Anthropic, SpaceX, Neuralink, Anduril, Polymarket, Kalshi, Figure AI. Two issuers compete on the same names, PreStocks and Tessera, the second prefixing its symbols with a t.
They sit on their own tab and never mix into the board, because they break the assumption everything else rests on.
A tokenized listed stock
A pre-IPO token
Behind the token
A real share, held by a custodian
A claim on a company whose shares are not traded
Reference price
The exchange price of that share
None. The pool price is the only price
Can the price be checked?
Yes, against the market
No, there is nothing to check it against
Do two wrappers agree?
Yes, within a fraction of a percent
Not comparable: each issuer sets its own share fraction
This is why turnover matters more here, not less. For a listed stock, a strange price can be caught by comparing it to the exchange. For a pre-IPO token there is no such check, so how the volume relates to the pool is close to the only thing that can be verified at all.
How they are picked
Same liquidity floor of $5,000, same duplicate collapsing. The difference is the tag: a token joins this list when Jupiter tags it prestocks or tessera and it does not carry commodities. That last rule keeps out tokenized gold and silver, which are tagged as real-world assets but are not stocks in any sense.
Tokens tagged only stocks or rwa, with no issuer behind them, are in neither list.
In the API
They arrive as a separate preipo array next to equities, in exactly the same shape. count covers listed stocks only, so nothing that reads the board picks them up by accident.
JavaScript
const { equities, preipo } = await (await fetch('https://usestrak.xyz/api/registry')).json();
equities.length; // listed stocks
preipo.length; // pre-IPO, a separate universe
Data
Sources and refresh
Every number comes from a public, free API. Nothing is typed in by hand.
Source
What Strak takes
Refresh
Jupiter verified token list
The universe, price, 24h buy and sell volume, 24h price change, liquidity, trade count, holders, organic score, icon
Registry rebuilt on request, cached 5 min
DexScreener
The deepest pool per token, its DEX and quote asset, the pool's 24h, 6h and 1h price change
With the registry
Jupiter charts
Token-level OHLCV for the terminal chart, in price or market cap, 1 second to 1 week
Read by the browser directly; the fallback route caches 3 to 20 s
Jupiter trades
The latest swaps of every stock across all its pools, for "who trades" and the live swaps on the landing
20 s
GeckoTerminal
The fallback for candles, swaps and sparklines when Jupiter does not answer
Same as the route it stands in for
The pipeline
Fetch Jupiter's verified list (one request, about 3,600 tokens).
Filter by the inclusion rules and collapse duplicates.
Ask DexScreener for the pairs of the remaining mints, 30 per request, and keep the deepest pair of each.
Compute turnover and sort by volume.
A full build takes a few seconds. The CDN keeps each answer for five minutes, so one build serves every visitor in that window. If the upstreams fail, the site falls back to the static snapshot in /data/equities.json, and the terminal labels the board as a snapshot instead of live.
One scope for everything you read. Turnover uses Jupiter's token-level volume and liquidity, the chart is Jupiter's token-level candles, and the swaps are Jupiter's token-level trade feed, so all three count every pool. Only the pool link points at a single pool: the deepest one DexScreener reports.
Data
Field reference
Each entry in equities has these fields. Money is in US dollars.
Field
Type
Meaning
address
string
Token mint address, base58.
symbol
string
Token symbol as the issuer minted it, e.g. NVDAx.
ticker
string
Company ticker without the issuer suffix, e.g. NVDA.
name
string
Token name.
issuer
string
backpack, xstocks or ondo on the board; prestocks or tessera in preipo.
price
number
Price in USD.
liq
number
Liquidity in USD.
vol24
number
24h buy volume plus sell volume, USD.
turnover
number
vol24 / liq, two decimals.
change24
number
24h price change, percent.
txns24
number
24h buys plus sells.
holders
number
Holder count.
organic
number
Jupiter organic score, 0 to 100.
icon
string | null
Logo URL from the token metadata.
pool
string
Address of the deepest pool. Missing when no pool was found.
dex
string
DEX of that pool, e.g. raydium, orca, meteora.
quote
string
The other asset in the pool, e.g. USDC, SOL.
createdMs
number | null
When the pool was created, Unix milliseconds.
pc
number[]
The pool's price change over 24h, 6h and 1h, percent, in that order.
The envelope around the list:
{
"updatedAt": 1790370000000, // when this build ran, Unix ms
"chain": { "name": "Solana", "id": "solana" },
"count": 93, // listed stocks only
"equities": [ … ],
"preipo": [ … ], // same shape, see Pre-IPO tokens
"live": true // only on /api/registry
}
Developers
API overview
The same endpoints the site runs on are open to anyone. No key, no sign up. Responses are JSON, served from the site's own origin with CDN caching.
Endpoint
Returns
Cached
GET /api/registry
The live board
5 min
GET /api/candles
OHLCV for one stock
45 s
GET /api/trades
The last swaps in a pool and who made them
20 s
GET /api/sparks
24 hourly closes for the landing's pools
30 min
GET /data/equities.json
Static snapshot of the board
60 s
GET /data/cases.json
Dated case files
60 s
Be gentle. The upstreams behind these routes are free and rate limited. Poll the registry no faster than every few minutes; faster polling returns the same cached answer anyway.
Developers
GET /api/registry
Builds the board from Jupiter and DexScreener and returns it in the shape described in Field reference, with "live": true.
const res = await fetch('https://usestrak.xyz/api/registry');
const { equities, updatedAt } = await res.json();
const hot = equities.filter((e) => e.turnover > 12);
console.log(`${hot.length} stocks above 12x as of ${new Date(updatedAt).toISOString()}`);
Status
Meaning
200
The board. Cache-Control: s-maxage=300, stale-while-revalidate=900.
502
{"error": "registry unavailable"}. Upstream down; fall back to /data/equities.json.
Developers
GET /api/candles
The chart's fallback. The terminal reads Jupiter's chart API straight from the browser; when that fails, it asks here. This route asks Jupiter from the server and, if Jupiter is down too, GeckoTerminal for the token's deepest pool. The answer has the same shape either way.
Answer: {"candles": [{"time", "open", "high", "low", "close", "volume"}, …], "source": "jupiter"}, oldest first, time in Unix seconds, prices and volume in USD. source says which upstream answered.
Status
Meaning
400
bad mint, bad pool or bad interval.
502
No source answered. Retry after a few seconds.
Developers
GET /api/trades
The latest swaps of one stock across all its pools, newest first, with the wallet behind each and a summary of who is carrying the volume. Source is Jupiter's trade feed, read 30 at a time up to 300 swaps or five seconds, whichever comes first; the CDN keeps the answer 20 seconds. If Jupiter does not answer and a pool is given, GeckoTerminal's last 300 swaps of that pool stand in, and scope in the answer says pool instead of token.
Param
Default
Rules
mint
required
The stock's address, base58, 32 to 44 characters.
pool
none
The stock's pool, used only for the GeckoTerminal fallback. ?pool= alone still works and reads that pool only.
{
"trades": [
{ "t": 1790372807000, "kind": "buy", "usd": 23.87, "wallet": "H9fi…enKm", "tx": "5XVj…EdJ9" }
],
"stats": {
"count": 300, // swaps read
"usd": 37988.96, // their total value
"wallets": 189, // distinct addresses
"minutes": 10.2, // how long those 300 swaps took
"perMin": 29.46,
"median": 43.12, // median trade, USD
"top3Share": 0.3782, // share of volume carried by the three biggest wallets
"roundTripWallets": 37,
"roundTripShare": 0.1337,
"top": [ { "wallet": "4K9G…BLrs", "usd": 5711.27, "n": 3, "buy": 3, "sell": 0 } ]
}
}
Only the 60 most recent swaps are returned in trades; stats always covers all 300. Statuses match the candles route: 400 for a bad address, 429 when the upstream is rate limiting, 502 otherwise.
Developers
GET /api/sparks
24 hourly closes for the pools the landing page draws sparklines for: the 8 highest turnovers and the 22 most traded stocks. It takes no parameters on purpose: one constant URL means the CDN holds one answer for half an hour, and the whole site costs about 30 upstream calls per half hour. Closes come from Jupiter's hourly candles for the whole token, with GeckoTerminal as the fallback.
When fewer than 60% of pools answered, the response is cached for one minute instead of thirty, so a rate-limited batch is not pinned. Where a pool has no candles, the landing draws a coarse line from the pool's own pc field: four real points at 24h, 6h, 1h and now.
Developers
Static files
/data/equities.json is the board as of the last deploy, in the same shape as the live route without live. Use it as a fallback or when you need a fixed snapshot. /data/cases.json holds the dated case files.
Separately, the whole board is snapshotted every hour and kept. That record is what the Turnover over time panel under each chart is drawn from, and every stock seen above 50x in it is kept as a dated case.
Developers
Deep links
Link straight to a stock or an issuer. Useful for posts, bots and research notes.
Link
Opens
/app#NVDAx
That exact token.
/app#NVDA
The deepest wrapper of that company.
/app#issuer=backpack
The board filtered to one issuer: backpack, xstocks or ondo.
/app#issuer=preipo
The pre-IPO tab.
/app#OPENAI
A pre-IPO token opens its own tab automatically.
Reference
Glossary
AMM pool
A smart contract holding two assets, for example a stock token and USDC. The price is set by the ratio of the two, and every trade moves it.
Liquidity
The USD value sitting in the pools behind a token. It is how much a trade can lean on before the price moves a lot.
Volume, 24h
The USD value of all buys and sells of the token in the last 24 hours.
Turnover
Volume divided by liquidity. How many times the day's trading covered the depth.
Wash trading
Trading with yourself, or with a friendly counterparty, to create volume and move a price without real demand.
Issuer
The company that holds the real shares and mints the token that tracks them: Backpack Securities, Backed (xStocks) or Ondo.
Wrapper
One issuer's token for a company. NVDAx is the xStocks wrapper of NVIDIA.
Price gap
The difference between two wrappers of the same company. Both track the same share, so a wide gap means one pool is not pricing it.
Pre-IPO token
A token tracking a company whose shares are not publicly traded. There is no exchange price behind it, so nothing to check the pool price against.
Mint
A token's address on Solana.
Reference
Changelog
Board columns sort on click, both ways. A Watchlist tab for starred stocks. Swaps and sparklines moved to Jupiter too, across all pools of a stock. Candles now come from Jupiter for the whole token, every pool at once, so every stock and pre-IPO token has a chart and the chart counts the same trades as turnover. Timeframes from 1 second to 1 day, price or market cap, older candles on scrolling left, faster switching with the last view kept in memory. A chart in the layout traders know: drawing rail, indicators, ranges and scale modes.
A Pre-IPO tab for tokens tracking private companies, kept apart from the board. Swaps per pool: who makes the volume, on the landing and under every chart. Candles moved to a proper trading chart with 1m to 1D timeframes and moving averages. An hourly snapshot of the whole board, drawn as turnover over time under every chart. Landing rebuilt around a live copy of the terminal. Sparklines from GeckoTerminal with a coarse fallback from pool price change. Issuer deep links. This documentation.
Strak goes live: the terminal, the landing and a live registry route that rebuilds the board every five minutes.
First registry run: 90 stocks from three issuers. IONQ at 152.4x becomes the first case file.
Reference
Disclaimer
Strak is an informational tool. Nothing on this site is financial advice, an offer or a recommendation to buy or sell anything. Turnover describes how reported volume relates to pool depth; it does not predict prices and it does not prove misconduct. Data comes from third parties and can be late, incomplete or wrong. Check anything that matters on chain before acting on it.