Skip to content
Alchemy Logo

StreamBlocks

This API is in private preview. Target September 2026; timing is subject to change.

StreamBlocks delivers raw HyperCore blocks as they are produced — every signed action the block contained, together with its execution results. This is ideal for full-chain indexers, action and response analysis, deposit and transfer monitoring, and reconciliation against your own records.

HyperCore produces a block roughly every 70 ms, and block numbers increment by exactly one. The stream reflects that directly:

  • One message per block, in order, including blocks with no activity
  • Block number is the stream sequence — there is no separate sequence counter to track
  • A missing block number is therefore an unambiguous gap
  • Blocks are delivered as passthrough — the raw block, not a normalized projection

Because the stream is dense, gap detection needs no heartbeat and no bookkeeping beyond remembering the last block you processed.

message StreamBlocksRequest {
  optional uint64 start_height = 1;
  string cursor = 2;
}

Field: start_height Type: uint64

Block number to begin streaming from. Omit to start from the current head.

Field: cursor Type: string

Resume token from a previous session. Opaque — store it and return it unmodified. Takes precedence over start_height when both are supplied.

message BlockEnvelope {
  uint64 height = 1;
  string cursor = 2;
  BlockData block = 3;
}

height: Block number and stream sequence. Compare it with the last processed block to detect a gap.

cursor: Resume position for this message. Persist it after processing.

block: The raw block.

FieldDescription
abci_block.roundBlock number. Use this as the block identifier.
abci_block.parent_roundPreceding block number, for verifying continuity.
abci_block.timeBlock timestamp.
abci_block.proposerValidator that proposed the block.
abci_block.hardforkProtocol version and the round it activated.
abci_block.signed_action_bundlesSigned actions in the block, each with signature, action type, nonce, and vault address, plus builder attribution where present.
respsExecution result per action, keyed by transaction hash, with the acting user and an ok or error status.

See raw and normalized HyperCore blocks for how these relate to the normalized objects returned by the JSON-RPC block methods.

  1. Track the block number of the last message you processed.
  2. On reconnect, send that number plus one as start_height, or send your stored cursor.
  3. If parent_round does not match your last processed block, fetch the missing range with hl_getBatchBlocks and reconcile before resuming.

Replay covers a short reconnect window, not long-range recovery. Gaps wider than that window cannot be replayed on the stream — use the block lookup methods above to fetch the missing range, then resume.

StreamBlocksJSON-RPC block methods
DeliveryPush, one message per blockRequest/response
LatencyLowest availableHigher — per-call round trip
RangeLive, plus bounded replayBounded historical lookup
Use caseContinuous indexingBackfill, gap repair, spot checks

Raw HyperCore blocks can be large, and high-activity blocks substantially more so. Configure your client's maximum receive size and processing queues accordingly.

Was this page helpful?