Store is a generic interface exposed by DataHandlerContext at .store. It is used in the batch handler to persist data. Its concrete type is inferred from the Database argument of the run() processor method:
Database implementation supplied here defines the store and the way the processor persists its status. Squid SDK supports Database implementations for:
Support for more databases and analytics storage will be added in the future.
Custom Database
A custom implementation of the Database interface is the recommended solution for squids with multiple data sinks and/or for non-transactional or non-relational databases. In such a case, the inferred Store facade exposed to the handlers may provide multiple targets for persisting the data. Database.transact should handle potential edge-cases when writes to either of the data sinks fail.
In order to implement a custom data sink adapter, it suffices to implement the Database interface:
HotTxInfo describes a fork-aware update:
transactHot2() lets the database group several consecutive blocks into one store transaction. Each callback receives a half-open [blockSliceStart, blockSliceEnd) range of indexes into info.newBlocks. Calling cb(store, 0, info.newBlocks.length) processes the entire update as one slice. An adapter may call the callback more than once when it needs smaller transactions.
The processor maps the same slice of fetched blocks into the handler. The database implementation is responsible for rolling back to baseHead, invoking the callback for the blocks it commits, and persisting the resulting finalized and unfinalized heads atomically where the storage system supports transactions.
The interface above is the compatibility surface used by chain-specific processors such as
@subsquid/evm-processor: deprecated transactHot() remains required and transactHot2() is optional. The Portal-native @subsquid/batch-processor interface requires transactHot2() and does not include the deprecated fallback.- persisting the indexing status
- opening and rolling back the transaction (if applicable)
- (Transactional) Postgres-based TypeormDatabase
- (Non-transactional) File-based database