> ## 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 [EVM Portal stream](../../reference/evm-stream) serves blocks all the way to the current chain head, including blocks that have not yet been [finalized](https://info.etherscan.com/epoch-in-ethereum/). 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 blockchain 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/evm-stream) 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 blockchain 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.

<Info>
  Networks without a Portal dataset, including local development chains, can be indexed in the same fork-aware way with the [EVM RPC data source](../../reference/evm-rpc-stream).
</Info>

<Warning>
  Database rollback does not undo external side effects such as Kafka messages or
  HTTP requests. Make those effects idempotent and reconcile provisional records
  by block height and hash, or delay irreversible actions until finality. See
  [Make external side effects reorg-safe](./tips-and-troubleshooting#make-external-side-effects-reorg-safe).
</Warning>
