Skip to main content
The Solana Portal stream serves blocks all the way to the current chain head, including blocks that have not yet been finalized. This enables real-time use cases without any extra data sources: no RPC endpoint is required, and there is no finality confirmation setting on DataSourceBuilder - the Portal itself keeps track of which blocks are final.

Indexing unfinalized blocks

To index unfinalized (“hot”) blocks and stay correct across chain reorganizations, a squid must
  1. use a Database with hot block support in its run() call. For TypeormDatabase that support is on unless explicitly disabled; state it explicitly with
  2. not cap the block range of its data source below the chain head.
With a hot-block-aware database, run() consumes the fork-aware stream of the data source. When a reorganization happens, the processor detects that the incoming blocks no longer extend the chain it has indexed, asks the Database to roll back the changes made for the orphaned blocks, then runs the batch handler on the new consensus blocks. The state of the Database reflects the current chain consensus at all times, and the batch handler code never has to deal with forks itself. With a database that lacks hot block support (e.g. the file store or TypeormDatabase with {supportHotBlocks: false}), the processor consumes the finalized stream instead and simply stops short of the unfinalized chain head.