The path
split by age
Full nodecommitted blocks, streamed as typed records
Cacherecent — from memory
File storehistorical — durable
Data servicepresents both as one stream
Gateway → REST · WebSocketaccess, quotas, routing
Why the fork existsHead-following is latency-sensitive and small; historical queries are throughput-sensitive and large. One backfill down a shared path would stall the live one.
A serving layer, not a source of truthThe kernel emits typed, attributed output, so the indexer reshapes rather than infers. A disagreement with the chain is a bug in the indexer.
Why the split exists
A single service that both followed the chain head and answered historical queries would do neither well. Head-following is latency-sensitive and small; historical queries are throughput-sensitive and large, and one large backfill would stall the live path. Separating them means backfilling a new consumer from months ago does not degrade the feed of a market maker following the head, and the two can be scaled independently — which they need, because their load profiles have nothing in common.What it is safe to rely on
Safe. Anything the indexer serves that is derived from committed blocks: fills, orders, positions, funding payments, transfers, market data. These are reshaped from chain output. Not the same thing. Anything not yet committed. An order accepted into the mempool has not been ordered, and the indexer has nothing to say about it. Absence from the indexer means not-yet-committed, not rejected. Verifiable. If an answer matters enough — a settlement dispute, an audit, an accounting reconciliation — it can be checked against the chain directly rather than taken from the indexer. Running your own full node is the strongest form of this, and is what a participant who cannot afford to be wrong should do. See Run a node.Two consumers reading the same committed range should get the same answer. If they do not, the discrepancy is in the serving path and is a bug to report — not an inherent property of reading a chain through an indexer.
Where to go next
State model
What the indexer is reading, and which representation is authoritative.
Developers
REST and WebSocket surfaces, SDKs, and tools.
Run a node
Verifying against the chain yourself, and why the set is closed.
Program services
What consumes this stream to compute derived account state.