slotsUpdatesSubscribe
Subscribes to fine-grained slot lifecycle events — shreds received, bank created, frozen, dead, optimistically confirmed, rooted — for every slot the node observes.
Where slotSubscribe emits one frame per processed
slot, slotsUpdatesSubscribe opens the hood: it streams a
slotsUpdatesNotification for every stage of a slot's life as the node
sees it. The type field names the stage — firstShredReceived (the first
piece of the leader's block arrived over the network), createdBank
(execution began), completed (all shreds received), frozen (the bank hash
was computed; a stats object reports transaction counts), dead (the slot
was abandoned — a skipped or failed block), optimisticConfirmation (a
supermajority of stake voted on it), and root (finalized). Each event
carries the slot, a nanosecond-scale timestamp from the node's clock, and
for createdBank the parent slot.
It takes no parameters, and it is a firehose: expect several events per slot,
i.e. ten-plus frames per second sustained. The audience is correspondingly
specialized — latency engineering and cluster observability rather than
application logic. Use it to measure block-propagation timing
(firstShredReceived → completed deltas), to detect skipped slots and
leader failures in real time via dead events, to trade on
optimisticConfirmation (which lands well before full finality), or to build
per-slot pipelines that need to distinguish "replayed" from "confirmed" from
"rooted" states precisely.
Handle it defensively. The method is flagged unstable in stock Solana:
event names and semantics can change between releases, and not every RPC
setup exposes it — Triport serves it on /ws/sol, but code written against
it is less portable than the stable families. Events describe the serving
node's pipeline, so timings differ between nodes, and during forks you will
see updates for slots that later die. There is no replay: a reconnect loses
the intervening events and you must resubscribe (session-scoped, as always).
If all you need is "a new slot happened" or "finality advanced", the far
cheaper slotSubscribe / rootSubscribe are the right
tools. Stop the stream with
slotsUpdatesUnsubscribe.
Parameters
None — params is an empty array (or omitted).
Response
Subscribe ack:
A stream of per-stage events follows, several per slot:
{
"jsonrpc": "2.0",
"method": "slotsUpdatesNotification",
"params": {
"subscription": 9932,
"result": {
"slot": 348392112,
"timestamp": 1755500001756,
"type": "optimisticConfirmation"
}
}
}A frozen event additionally carries execution stats:
{
"jsonrpc": "2.0",
"method": "slotsUpdatesNotification",
"params": {
"subscription": 9932,
"result": {
"slot": 348392112,
"timestamp": 1755500001514,
"type": "frozen",
"stats": {
"numTransactionEntries": 448,
"numSuccessfulTransactions": 1230,
"numFailedTransactions": 41,
"maxTransactionsPerEntry": 12
}
}
}
}result (on ack)integerslotsUpdatesUnsubscribe.params.result.slotintegerparams.result.timestampintegerparams.result.typestringfirstShredReceived, completed, createdBank, frozen, dead, optimisticConfirmation, or root.params.result.parentintegercreatedBank.params.result.statsobjectfrozen.params.result.errstringdead.Errors
| Code | Meaning | When it happens |
|---|---|---|
4003 | forbidden | Your tier is below pro (tier_insufficient). |
4001 | unauthorized | Missing or invalid API key on the upgrade / auth frame. |
4029 | rate_limited | Subscribe rate exceeded for your tier. |
Notes
- Firehose: several events per slot, 10+ frames/sec — consume off the socket quickly or you will build backpressure.
- Unstable API: event set and shapes may shift between Solana releases;
gate on
typevalues you know and ignore unknown ones. - Node-local view: timestamps and ordering reflect the serving node, not
a cluster-wide truth;
deadslots are normal fork noise. - Related methods:
slotsUpdatesUnsubscribe,slotSubscribe(one event per slot),rootSubscribe(finality only).