> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sqd.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Unfinalized blocks and reorgs

> How Squid SDK handles unfinalized blocks and reorgs.

The [Solana Portal stream](../../reference/solana-stream/general) 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`](../../reference/data-stores/store-interface) with hot block support in its [`run()`](../../reference/batch-processor#run-and-processor) call. For [`TypeormDatabase`](../writing-to-postgres) that support is on unless explicitly disabled; state it explicitly with

   ```ts theme={"system"}
   import {run} from '@subsquid/batch-processor'
   import {TypeormDatabase} from '@subsquid/typeorm-store'

   run(dataSource, new TypeormDatabase({supportHotBlocks: true}), async ctx => {
     // ...
   })
   ```

2. not cap the block range of its [data source](../../reference/solana-stream/general) below the chain head.

With a hot-block-aware database, [`run()`](../../reference/batch-processor#finalized-and-hot-block-databases) 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](../../reference/data-stores/file-store) or `TypeormDatabase` with `{supportHotBlocks: false}`), the processor consumes the finalized stream instead and simply stops short of the unfinalized chain head.
