QuantEdge Terminal

Open dataset · dataset-v1 · CC BY 4.0

Manifest order books, 11–12 September 2026

Every book state of three Manifest markets on Solana over 15.57 hours, top 15 price levels per side, and the moment each state reached each of two independent RPC providers. This is the period every measurement on the main page was made on, so those results can be checked from outside.

Markets
cbBTC/USDC · RENDER/USDC · USDT/USDC
Window (UTC)
2026-09-11 17:31:00.800740 → 2026-09-12 09:05:00
Book states
106,440
Price levels (long format)
3,193,200
Channel arrivals
212,108
Gaps inside the window
none
Formats
Parquet · CSV (gzip)

Download

The files are assets of the dataset-v1 release. Each table comes in both formats with the same rows in the same order. Take Parquet if your tools read it; it keeps types, including exact 38-digit prices.

TableParquetCSV (gzip)
levels5.8 MB11.4 MB
states8.2 MB5.3 MB
arrivals1.9 MB1.8 MB
markets1.8 KB0.4 KB
channels0.8 KB0.1 KB
coverage0.8 KB0.1 KB

SHA256SUMS lists a checksum for every file. The export is deterministic: the same rows always give the same bytes.

Tables and fields

No field is ever empty. Timestamps are UTC with microsecond precision. Prices and sizes are integers in the smallest on-chain units, exactly as the market account stores them; the next section converts them.

levels

One row per book state × side × level. Join to states on state_id.

FieldTypeMeaning
state_idint64The book state this level belongs to.
market_idint32The market, repeated from states so a single market can be filtered without a join.
sidestringbid or ask.
levelint320 is the best price on its side, then 1, 2… up to 14. Bids fall and asks rise with the level.
pricedecimal(38,0)Quote atoms per base atom, multiplied by 1018. Too large for int64: about 7.7×1020 at the cbBTC touch.
sizeint64Resting size at this price in base atoms, summed over all orders at the price.

states

One row per distinct book state. A new state is recorded when the market account changes, so the time between rows is the time the book stood still.

FieldTypeMeaning
state_idint64Identifier of the state. Unique, increasing in order of recording, not contiguous.
market_idint32The market; see markets.
slotint64The Solana slot the account update was reported for.
state_hashstringSHA-256 of the raw account bytes, hex. With slot it identifies the same state across channels.
first_seen_attimestampThe earliest arrival of this state over any channel, equal to the minimum of its arrivals.received_at.
bid_levelsint32How many bid levels the state has in levels (at most 15).
ask_levelsint32How many ask levels the state has in levels (at most 15).

arrivals

One row per state per channel that delivered it. A state missing a row for a channel was not delivered by that channel.

FieldTypeMeaning
state_idint64The state that arrived.
channel_idint32The channel it arrived over; see channels.
received_attimestampWhen the collector received it over that channel.

markets

FieldTypeMeaning
market_idint32Identifier used by the other tables.
venuestringmanifest.
addressstringThe market account on Solana mainnet; the book is this account’s state.
base_symbolstringBase token symbol, e.g. cbBTC.
quote_symbolstringQuote token symbol, USDC for all three.
base_mintstringBase token mint address.
quote_mintstringQuote token mint address.
base_decimalsint32Decimals of the base token.
quote_decimalsint32Decimals of the quote token.

channels

FieldTypeMeaning
channel_idint32Identifier used by arrivals.
namestringChannel name: helius, alchemy.
kindstringAlways real: emulated channels are never exported.
providerstringThe RPC provider behind the channel.

coverage

FieldTypeMeaning
market_idint32The market.
from_tstimestampStart of the gap-free recording window.
to_tstimestampEnd of the window.
state_countint32Number of states of this market inside the window.

From atoms to prices

With b and q the base and quote decimals from markets:

price in quote per base = price / 10^18 × 10^(b − q)
size in base tokens     = size / 10^b

For cbBTC/USDC (b = 8, q = 6) a price of 777037910000000000000 is 77,703.791 USDC per cbBTC. Keep the raw integers for any sum or difference and convert at the end: that is how the terminal stays exact.

Deep levels can sit far from the market: some cbBTC asks rest at 108 USDC and above, and their price runs to 27 digits. In CSV, price is a plain integer. A reader that guesses types turns it into a float and loses the last digits; read it as a string or a decimal (in pandas, dtype={"price": str}).

Quick start

DuckDB reads the files where they lie. The best bid and ask of cbBTC over time, in USDC:

SELECT s.first_seen_at, l.side,
       l.price / 1e18 * 10 ^ (m.base_decimals - m.quote_decimals) AS price_usdc,
       l.size / 10 ^ m.base_decimals AS size_base
FROM 'quantedge-dataset-v1-levels.parquet' l
JOIN 'quantedge-dataset-v1-states.parquet' s USING (state_id)
JOIN 'quantedge-dataset-v1-markets.parquet' m ON m.market_id = l.market_id
WHERE m.base_symbol = 'cbBTC' AND l.level = 0
ORDER BY s.first_seen_at, l.side DESC;

How far each channel lagged behind the first arrival, at the 95th percentile:

SELECT c.name, count(*) AS states,
       quantile_cont(epoch_us(a.received_at) - epoch_us(s.first_seen_at), 0.95) / 1000 AS p95_lag_ms
FROM 'quantedge-dataset-v1-arrivals.parquet' a
JOIN 'quantedge-dataset-v1-states.parquet' s USING (state_id)
JOIN 'quantedge-dataset-v1-channels.parquet' c USING (channel_id)
GROUP BY c.name;

How it was recorded

  • One collector held an accountSubscribe WebSocket subscription per market at each of two RPC providers, Helius and Alchemy, at confirmed commitment with base64 encoding.
  • Each update was keyed by (slot, SHA-256 of the account bytes) before decoding, so the same state from both providers is one row in states and two rows in arrivals.
  • The book was decoded from the Manifest market account, aggregated by price and cut to the best 15 levels per side.
  • received_at comes from the clock of the single host that ran the collector. Differences between channels are measurements; the absolute time since the on-chain event is not, and is not in the data.
  • The collector also records the coverage it had: the window is one segment per market with no gap, which is why it starts at an odd microsecond.

What it is not

  • Not the full book. The best 15 levels per side, aggregated by price; individual orders and their owners are not included.
  • Not a trade tape. Fills are not recorded, only the book states before and after.
  • Not every Solana slot. A row appears when the account changed and a provider reported it.
  • Not a provider ranking. Two providers, one host, one night; the lag depends on all three.

Licence and citation

The dataset is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0): use it for anything, including commercial work, and credit the source. The code that recorded and exported it is under the Apache License 2.0.

QuantEdge Terminal. Manifest order books, 11–12 September 2026 (dataset-v1).
https://quantedgeterminal.github.io/QuantEdge-Terminal/dataset/. CC BY 4.0.

The export is apps/dataset in the repository. It refuses a window with a gap in coverage and any channel that is not real.