Liquidity, RankingDetail and LeadingPool fields
What it is
A pool holds two tokens, a pair. A Pairs row reads that pool from one side: Token is the token being priced, QuoteToken is the token it is priced in. Liquidity.Usd is the amount of money, in USD, that the pool holds in the row's quote token.
That number is also the weight each pool gets in the token's price blend. RankingDetail says what the blend did with the pool's price, and LeadingPool names the pool that leads the blend.
How to get it
The three groups are selectable and filterable on the Trading cubes, in queries and subscriptions, and carried on the trading.prices Kafka topic (see Kafka).
| Group | Currencies | Tokens | Pairs |
|---|---|---|---|
Liquidity { … } | yes (summed over pools) | yes (summed over pools) | yes (one pool) |
RankingDetail { … } | – | yes | yes |
LeadingPool { … } | – | yes | – |
Select them next to Price, Volume and Ranking. Always set Interval.Time.Duration and a Block.Time window. When ranking or filtering on Liquidity.Usd, add Liquidity.Source and RankingDetail.Verdict filters; the sample query shows the shape.
How it is derived
Liquidity is the blend weight. Since 2026-10-19 the price index weights each of a token's pools by its liquidity after the staleness discount:
Ranking.Weight = Liquidity.Usd × RankingDetail.StaleMultiplier
÷ Σ over the token's pools (Liquidity.Usd × StaleMultiplier)
Rows before 2026-10-19 in the 30-day history are volume-weighted and carry Liquidity fields of 0. How the weighted prices become one token price is on the Price Index Algorithm page.
For every pool the index tries four cases in order and takes the first that applies. Liquidity.Source tells you which case produced the number, so always read Source next to Usd.
| Case | When | Usd is | Source |
|---|---|---|---|
| 1 | reserve known | QuoteReserve × quote token USD price | real, real_stale |
| 2 | launch curve, no reserve | NetQuoteUsd (quote paid in − quote paid out) | migration, retired |
| 3 | reserve unknown | estimate from the last hour of trading | volume |
| 4 | nothing traded in 1 h | 0 | none |
Only case 1 is a measurement. Cases 2 and 3 are estimates. Never compare Usd across cases (see the warning below).
Case 1: the reserve is known (real, real_stale)
The indexer watches the pool contract. Every swap, add or remove changes the pool's balances, and after each event it records how much of each of the pair's two tokens the pool holds. The balance of the row's quote token, times that token's USD price, is Usd. A SOL/USDC pool holding 1 000 000 USDC reports Usd of $1 000 000 on the row where USDC is the quote token. Nothing is estimated.
- The snapshot is under an hour old:
Sourceisreal. - The snapshot is more than an hour old:
Sourceisreal_stale. The value is the same reserve, unchanged; only the label differs. A pool that stops trading loses weight throughRankingDetail.StaleMultiplier, not through its liquidity.
Two adjustments apply to a measured reserve.
Capped by depth. If the snapshot carries a slippage table, Usd is capped at a multiple of the amount sellable within 1 % slippage, so liquidity parked far from the current price does not count in full. QuoteReserveUsd keeps the uncapped figure.
Example: a Base cbBTC/WETH pool with QuoteReserveUsd of $2.07 B reports Usd of $306 M after the depth cap.
The quote token needs an independent price. A reserve is only valued through a stablecoin, the chain's native coin or a listed currency. A pair whose quote token is anything else falls through to case 3.
Example, on Solana: real rows have WSOL, USDC, USDT, PUMP, RAY and the like as quote token. volume rows are the ones whose quote token is a fresh meme token.
Case 2: a launch curve with no reserve (migration, retired)
Bonding curves (pump.fun, four.meme and the like) have no pool reserve to read, but every buy and sell is known. Usd is the curve's lifetime net quote in USD, quote paid in minus quote paid out, which is both its reserve and its progress to graduation. The same number is in NetQuoteUsd. The pool a curve has just graduated to is also migration until it has a reserve snapshot of its own.
Once the token has moved on to a real pool, the curve row becomes retired: it keeps its last curve balance in Usd, but Ranking.Weight is 0 and it no longer prices the token.
Case 3: the reserve is unknown (volume)
There is no balance to read: the chain's pool events are not indexed (Tron, Arc), the "pool" is a router or order engine with no vault (Tessera on Solana), or the quote token has no USD price. The only thing known is the pool's trades, so liquidity is estimated from the last hour of trading, with recent trades counting more, valued at the token's reference price across all its pools rather than the pool's own last print, and scaled up by a turnover factor: how much reserve a typical pool holds per hour of trading. The factor is set per chain, and when the token has at least one pool with a measured reserve, that token's own measured turnover is used instead, so an unmeasured pool weighs against the measured ones in proportion to how much it trades against them. Reserve fields stay 0.
You can see the two regimes in the data: Liquidity.Usd / Volume.Usd on one-hour rows of tokens with no measured pool sits at one value per chain, while pools of tokens that do have a measured pool land anywhere from well below 1 to several thousand.
It orders the pools of one token well: the pool that trades more against the others gets more weight, which is what the price index needs it for. It cannot tell you how many dollars sit in a pool nobody has measured, and it should not be shown as such. On established pools the raw chain-factor estimate runs around a tenth of the real reserve; on brand-new pools it runs well above it. Filter on Source: { in: ["real", "real_stale"] } when you need a dollar figure.
Case 4: nothing traded (none)
The pool traded nothing in the last hour and has no reserve snapshot. Usd is 0.
Usd is not comparable across sources
A volume estimate is turnover-scaled and can be far larger than any reserve. Routers and order engines without a pool (Tessera on Solana, for example) report volume liquidity in the tens of millions on top-market pairs, and a dead pool whose quote token has a nonsense price can report billions. Rank or filter by Liquidity.Usd only together with Source: { in: ["real", "real_stale"] }, or at token level with a RealShare floor.
Token and currency level
On a Pair the fields describe one pool, read from the row's quote token. The same pool appears once per quote token, so its two rows value different tokens and report different QuoteReserve and Usd. On a Token or Currency:
Usdis the sum over the pools the blend considered, including pools that did not trade in the interval and therefore have noPairsrow. Do not expect it to equal the sum of visiblePairsrows.Sourceis the leading pool's source. A token can showSource: "volume"withRealShare: 0.67: two thirds of the sum is real reserves, but the pool that sets the price has none.RealShareis the quality signal above pair level.RealShare: 1means every dollar is a measured reserve.UpdatedAtis1970-01-01T00:00:00Zon every token and currency row. There is no single snapshot behind a sum. Filter on it at pair level only.BaseReserve,QuoteReserve,QuoteReserveUsd,DepthUsdandNetQuoteUsdare0, notnull.
What Liquidity is not
- Not TVL.
Usdvalues one of the pool's two tokens, the row's quote token. A pool that explorers show at $2 M total value locked reports roughly $1 M here. The other token's balance is inBaseReserve, unvalued. - Not a trust signal. A token with $1 000 of real USDC-side reserve and a $80 000 price gets a market cap in the trillions. Pair
Liquidity.UsdwithSupply.MarketCapbefore showing either. - Not the chain-level pool cube.
DEXPoolson the chain schemas carries full pool state; this is the index's view of the reserve that prices the token.
Fields
Liquidity
| Field | Type | Meaning |
|---|---|---|
Usd | Float | USD liquidity: the pool's balance of the row's quote token, valued in USD, the depth that backs the price. Summed over pools at token and currency level. Calculated as described above. |
Source | String | Which case produced Usd: real, real_stale, migration, retired, volume or none. At token and currency level it is the source of the leading (Position 1) pool. Details in Source values. |
RealShare | Float | Fraction of Usd backed by a reserve snapshot: 1 or 0 for a single pool, in between for a token or currency summed over pools. |
BaseReserve | Float | Post-event balance of the row's Token, the token being priced, as a UI amount. Pair level only. |
QuoteReserve | Float | Post-event balance of the row's QuoteToken, as a UI amount. Pair level only. |
QuoteReserveUsd | Float | QuoteReserve valued in USD, before any cap. Equals Usd for a single pool unless the depth cap applied. |
UpdatedAt | DateTime | Time of the reserve snapshot behind Usd, for judging freshness. Pair level only. |
DepthUsd | Float | How much quote, in USD, can be sold into the pool before the price moves 1 %. The pool pays that trade out in base, so the ceiling is the base leg, not QuoteReserveUsd: on a pegged pair (USDC/USDT, PYUSD/USDS) it is close to the whole base leg and can exceed QuoteReserveUsd; on a volatile pair the curve stops it far below either leg. 0 when the snapshot carried no slippage table. Pair level only. |
NetQuoteUsd | Float | A launch curve's lifetime net quote in USD (quote paid in minus quote paid out): for a bonding curve, its reserve and its progress to graduation. On a retired curve, the amount that migrated to the venue. 0 for a pool that is not a configured launcher. Pair level only. |
Source values
| Value | When it applies | What Usd is | Share of one-minute Pairs rows (8 chains, 5 min sample) |
|---|---|---|---|
real | A reserve snapshot of the pool exists and is under an hour old. | The pool's balance of the row's quote token, valued in USD. | 82 % |
real_stale | The snapshot is more than an hour old. | The same reserve, unchanged; only the label differs. | 1.4 % |
migration | A launch curve (pump.fun, four.meme and the like) with no reserve snapshot, or the pool it just graduated to. | Money paid into the curve minus money taken out. Usd equals NetQuoteUsd. | 2.8 % |
volume | No reserve and not a launch curve. | An estimate from the last hour's trading, see case 3. | 14 % |
none | The pool traded nothing in the last hour. | 0 | 0.1 % |
retired | A launch curve whose token has moved on to a real pool. | Its last curve balance (see pitfall 4). | < 0.1 % |
impact | Defined by engineering as depth estimated from net flow against the price move. Not observed in data as of October 2026. | – | not observed |
RankingDetail
Explains the Ranking a pool (or, on Tokens, a token's part in its currency) received. Ranking { Position Weight } is unchanged; RankingDetail says why.
| Field | Type | Meaning |
|---|---|---|
Verdict | String | What happened to this part's price in the batch's blend. Values below. |
StaleMultiplier | Float | Staleness discount applied to the weight, in (0, 1]: 1 for a part trading at its own rhythm, falling the longer it stays quiet beyond that rhythm. Ranking.Weight is already the share of the discounted weights. Do not apply the multiplier again. |
Verdict values:
| Value | Meaning | Share of one-minute Pairs rows (10 min sample) |
|---|---|---|
priced | Accepted into the blend. | 97.2 % |
clamped | Accepted, but bounded to a cap around the recently-traded consensus. | < 0.1 % |
outlier | Rejected by the outlier band. Contributes neither price nor volume to the token. | < 0.1 % |
ineligible | Refused by the eligibility gate: too little money or history. Its volume still counts, its price does not. | 2.2 % |
no_price | No price in the window; ranked by weight 0. | 0.3 % |
retired | A launch curve its token has left. Ranking.Weight is 0, StaleMultiplier is the floor (2⁻²⁰). | < 0.1 % |
"" (empty) | The row was not ranked in this batch. Ranking.Position and Weight are 0 too. About 0.2 % of pair rows and 2 % of token rows. Treat as "unknown", not as a verdict. | 0.2 % |
An outlier or ineligible pool still has a Pairs row, a Ranking.Position and a Liquidity block. Filter on RankingDetail.Verdict when you want only the pools whose price the token actually uses.
LeadingPool (Tokens only)
Identifies the pair update that leads the token's blend, so a client can follow the token's price to the pool that sets it without joining to Pairs.
| Field | Type | Meaning |
|---|---|---|
MarketId | String | Market.Id of the leading pool's pair. |
QuoteTokenId | String | QuoteToken.Id of that pair. |
PoolAddress | String | Pool.Address of that pair. Empty where the market has no pool address. |
LeadingPool is the pool at Ranking.Position: 1: the pool with the most weight in the blend. Since 2026-10-19 that is the largest share of Liquidity.Usd × StaleMultiplier among the token's pools; on rows before that date it is the largest volume share. Estimates count, so the leading pool can be a router or order engine with no reserves at all (Liquidity.Source: "volume") whose estimate outweighs the measured pools. It can change every batch.
Match on MarketId plus QuoteTokenId, not on PoolAddress: the same pool address appears once per quote token, and PoolAddress is observed empty on some updates and filled on the next for the same market.
Examples
Which pools price a token with measured liquidity?
Every pool pricing SOL on Solana with more than $10 000 of measured reserve in its quote token, accepted into the blend, deepest first. This is the shape to start from: it selects every Liquidity field, and the where clause applies the two filters that make Usd safe to rank on.
query TokenPoolsWithRealLiquidity {
Trading {
Pairs(
limit: {count: 10}
orderBy: {descending: Liquidity_Usd}
where: {
Token: {Id: {is: "bid:solana:So11111111111111111111111111111111111111112"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Usd: {gt: 10000}, Source: {in: ["real", "real_stale"]}}
RankingDetail: {Verdict: {is: "priced"}}
}
) {
Block {
Time
}
Market {
Id
Name
}
Pool {
Address
}
QuoteToken {
Symbol
}
Price {
Ohlc {
Close
}
}
Volume {
Usd
}
Liquidity {
Usd
BaseReserve
QuoteReserve
QuoteReserveUsd
UpdatedAt
Source
RealShare
DepthUsd
NetQuoteUsd
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
StaleMultiplier
}
}
}
}
First row returned on 2026-10-22 (SOL/USDC on Raydium AMM v4):
{
"Block": { "Time": "2026-10-22T05:38:51Z" },
"Market": { "Id": "bid:solana:675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8:58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2", "Name": "raydium_amm" },
"Pool": { "Address": "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2" },
"QuoteToken": { "Symbol": "USDC" },
"Price": { "Ohlc": { "Close": 105.49534 } },
"Volume": { "Usd": 399.11612 },
"Liquidity": {
"Usd": 9697858,
"BaseReserve": 92157.13,
"QuoteReserve": 9699468,
"QuoteReserveUsd": 9697858,
"UpdatedAt": "2026-10-22T05:38:51Z",
"Source": "real",
"RealShare": 1,
"DepthUsd": 0,
"NetQuoteUsd": 0
},
"Ranking": { "Position": 2, "Weight": 0.17664543 },
"RankingDetail": { "Verdict": "priced", "StaleMultiplier": 1 }
}
How to read it:
Source: "real"means case 1 applied. The pool holds 9 699 468 USDC (QuoteReserve); at USDC's price of just under $1 that isUsdof $9 697 858. The 92 157 SOL on the other side (BaseReserve) is not valued.QuoteReserveUsdequalsUsdbecause no depth cap applied.DepthUsdis0: Solana snapshots carry no slippage table.UpdatedAtis when the reserve was last read. Here it matchesBlock.Time; on a quiet pool it can be minutes earlier.Verdict: "priced"means this pool's price went into SOL's token price, withWeight0.18 of the blend atPosition2. Weight follows liquidity, not volume: the pool traded only $399 in the minute, but its $9.7 M reserve is what earns it 18 % of the blend.NetQuoteUsdis0because this is an AMM pool, not a launch curve.RealShareis1on every pair row with a measured reserve.
To make the same query estimate-tolerant, drop the Source filter and show Source next to Usd so a reader can tell a reserve from an estimate. To run it for another token, change Token.Id; the id carries the chain (bid:solana:<mint>, bid:base:<contract>, bid:bsc:<contract>), so no separate Network filter is needed.
Which pool sets a token's price, and how much backs it?
query TokenLeadingPoolAndLiquidity {
Trading {
Tokens(
limit: {count: 1}
orderBy: {descending: Block_Time}
where: {
Token: {Id: {is: "bid:solana:So11111111111111111111111111111111111111112"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
}
) {
Block {
Time
}
Token {
Id
Symbol
}
Price {
Average {
Mean
}
Ohlc {
Close
}
}
Liquidity {
Usd
RealShare
Source
}
LeadingPool {
MarketId
PoolAddress
QuoteTokenId
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
StaleMultiplier
}
}
}
}
- The row for SOL shows
LeadingPoolpointing at a Tessera market withSource: "volume"andRealSharearound0.6(0.59 on 2026-10-22). - The pool that sets the price has no reserves; its volume-derived estimate outweighs the measured pools, while well over half of the summed liquidity is measured.
Which tokens on a chain have the most measured liquidity?
RealShare: { ge: 0.9 } keeps out tokens whose sum is mostly estimates. limitBy collapses to one row per token.
query TopSolanaTokensByRealLiquidity {
Trading {
Tokens(
limit: {count: 20}
limitBy: {by: Token_Id, count: 1}
orderBy: {descending: Liquidity_Usd}
where: {
Token: {Network: {is: "Solana"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 5}}}
Liquidity: {Source: {is: "real"}, RealShare: {ge: 0.9}}
}
) {
Token {
Id
Symbol
}
Price {
Average {
Mean
}
}
Liquidity {
Usd
RealShare
Source
}
LeadingPool {
MarketId
PoolAddress
}
}
}
}
How far along is a pump.fun curve?
Live pump.fun curves, ordered by how much quote has flowed in net — the curve's progress to graduation. Usd equals NetQuoteUsd while Source is migration.
query PumpFunCurveProgressNetQuoteUsd {
Trading {
Pairs(
limit: {count: 20}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_NetQuoteUsd}
where: {
Market: {Network: {is: "Solana"}, Protocol: {is: "pump"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Liquidity: {Source: {is: "migration"}}
}
) {
Block {
Time
}
Token {
Id
Symbol
}
Pool {
Address
}
Price {
Ohlc {
Close
}
}
Liquidity {
Usd
NetQuoteUsd
Source
RealShare
UpdatedAt
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
}
}
}
}
Which pools did the blend reject or bound?
query PoolsRejectedFromTokenBlend {
Trading {
Pairs(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
RankingDetail: {Verdict: {in: ["outlier", "clamped", "ineligible"]}}
}
) {
Block {
Time
}
Market {
Network
Name
}
Pool {
Address
}
Token {
Id
Symbol
}
Price {
Ohlc {
Close
}
}
Volume {
Usd
}
Liquidity {
Usd
Source
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
StaleMultiplier
}
}
}
}
Which pools are losing weight for going quiet?
Lowest StaleMultiplier first. Liquidity.UpdatedAt shows how long ago the reserve was last seen.
query StalePoolsDiscountedInRanking {
Trading {
Pairs(
limit: {count: 20}
orderBy: {ascending: RankingDetail_StaleMultiplier}
where: {
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
RankingDetail: {StaleMultiplier: {lt: 1}, Verdict: {is: "priced"}}
Liquidity: {Usd: {gt: 1000}}
}
) {
Block {
Time
}
Market {
Network
Name
}
Pool {
Address
}
Token {
Symbol
}
Liquidity {
Usd
UpdatedAt
Source
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
StaleMultiplier
}
}
}
}
What reserves and depth do Ethereum's leading pools hold?
DepthUsd is the quote amount, in USD, sellable within 1 % slippage. It can exceed Usd on a concentrated-liquidity pool.
query EthereumTopPoolsReservesAndDepth {
Trading {
Pairs(
limit: {count: 10}
limitBy: {by: Pool_Address, count: 1}
orderBy: {descending: Liquidity_DepthUsd}
where: {
Market: {Network: {is: "Ethereum"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
Ranking: {Position: {eq: 1}}
Liquidity: {Source: {is: "real"}, DepthUsd: {gt: 0}}
}
) {
Block {
Time
}
Market {
Name
}
Pool {
Address
}
Token {
Symbol
}
QuoteToken {
Symbol
}
Price {
Ohlc {
Close
}
}
Liquidity {
Usd
BaseReserve
QuoteReserve
QuoteReserveUsd
DepthUsd
UpdatedAt
Source
}
Ranking {
Position
Weight
}
}
}
}
How much liquidity does a currency have across chains?
query CurrencyLiquidityAcrossChains {
Trading {
Currencies(
limit: {count: 1}
orderBy: {descending: Block_Time}
where: {
Currency: {Id: {is: "bid:bitcoin"}}
Interval: {Time: {Duration: {eq: 60}}}
Block: {Time: {since_relative: {minutes_ago: 10}}}
}
) {
Block {
Time
}
Currency {
Id
Symbol
}
Price {
Average {
Mean
}
}
Liquidity {
Usd
RealShare
Source
}
}
}
}
How do I stream liquidity and verdicts for a token's pools?
The same selections work in a subscription; Block.Time carries sub-second precision on the stream.
subscription TokenPoolLiquidityStream {
Trading {
Pairs(
where: {
Token: {Id: {is: "bid:solana:So11111111111111111111111111111111111111112"}}
Interval: {Time: {Duration: {eq: 1}}}
}
) {
Block {
Time
}
Market {
Name
}
Pool {
Address
}
QuoteToken {
Symbol
}
Price {
Ohlc {
Close
}
}
Liquidity {
Usd
QuoteReserveUsd
UpdatedAt
Source
RealShare
}
Ranking {
Position
Weight
}
RankingDetail {
Verdict
StaleMultiplier
}
}
}
}
Pitfalls
Chain coverage
| Chain | Reserve data | Pools with a measured reserve (real + real_stale, pools that traded in a 5 min window) |
|---|---|---|
| Solana | real on most rows | 81 % |
| Ethereum, BSC, Arbitrum | real on most rows | 80–84 % |
| Base, Optimism, Matic | real on most rows | 60–72 % |
| Robinhood | real on most rows | small sample |
| Arc | volume only | 0 |
| Tron | volume only: no reserve events are indexed, so RealShare is 0 chain-wide | 0 |
These shares count pools that traded recently; across all pools the index knows, including quiet ones, the measured share on EVM chains is lower. DepthUsd was non-zero only on EVM pools in the sample (Uniswap v2 / v3 families); Solana rows carry 0.
Pitfalls to design around
- Two timestamps.
Block.Timeis the last write to the row (a trade or a re-rank);Liquidity.UpdatedAtis the reserve snapshot. They differ by minutes on quiet pools. Networkfilters take display names, case-sensitive:"Solana","Ethereum","Binance Smart Chain","Matic","Tron"."solana"returns nothing.- Pump.fun's curve protocol is
pump; the post-graduation AMM ispump_amm. - A retired curve keeps a non-zero
Liquidity.Usd(its last snapshot) withSource: "retired"andWeight: 0. CheckVerdict/Source, notUsd, to know it is out of the price. - Aggregates use field arguments, as elsewhere on the Trading cubes:
Liquidity { Usd(maximum: Liquidity_Usd) }, andorderBy: { descending: Liquidity_Usd }for ordering. - Subscriptions return
nullfor a whole group from a producer that does not yet emit it. Null-checkLiquidity,RankingDetailandLeadingPool; do not read a missing group as0. - History before 2026-10-19 has no liquidity. Rows older than that carry
Liquidityfields of0and volume-basedRanking.Weight.
Kafka: trading.prices
The same groups are on the trading.prices topic, defined in market/price_index.proto:
| Message | Field | Number |
|---|---|---|
PairUpdate | Liquidity Liquidity | 11 |
PairUpdate | RankingDetail RankingDetail | 12 |
TokenUpdate | Liquidity Liquidity | 6 |
TokenUpdate | RankingDetail RankingDetail | 7 |
TokenUpdate | LeadingPool LeadingPool | 8 |
CurrencyUpdate | Liquidity Liquidity | 4 |
Differences from GraphQL:
Liquidity.UpdatedAtis auint32unix second (0at token and currency level).SourceandVerdictare plain strings with the same values as above; an unranked part has an emptyVerdict.- A message from a producer that does not emit the group yet has the protobuf default — an unset message — not a zeroed one; check
HasFieldbefore reading.
On trading.trades, TradeIndex is field 4 of TradeTransaction in market/transaction.proto, read as Trade.Transaction.TradeIndex.
Related
- Price Index Algorithm: how the liquidity-weighted prices are blended across pools.
- Ranking on Pairs:
Ranking { Position Weight }. - Liquidity queries: ready-made questions (rug pull checks, best pool to trade, slippage depth).
- Trades of a transaction in execution order:
TradeIndex, released alongside these fields, on theTradescube only.
Ready to run this in production?
Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.