Skip to main content
Version: FireSquid

Processor Context

BatchContext is a generic interface defined as follows:

export interface BatchContext<Store, Item> {
* access to the chain and the metadata
* @internal
_chain: Chain
log: Logger
* Handle for the data sink
store: Store
* Next batch of items to be processed, grouped into blocks
blocks: BatchBlock<Item>[]
* Signals that the processor has reached the chain head.
* The head block is always included in `.blocks`.
isHead: boolean

Note that the Item type is inferred from the processor type and configuration. Store type is inferred from the Database instance passed into the run() method.


Internal handle for direct access to the underlying chain state via RPC calls. Rarely used directly, but rather by the facade access classes generated by the typegen tools.

Interface for the target data sink. See Store Interface.


The native logger handle. See logging.


The on-chain data items (event logs and transaction call records) are grouped into blocks and canonically ordered by how the data is recorded on-chain. The shape of item objects is determined by the processor configuration done via the .addXXX() methods.

An idiomatic use of the context API is to iterate first over blocks and then over items for each block: TypeormDatabase(), async (ctx) => {
for (const block of ctx.blocks) {
for (const item of c.items) {

The canonical ordering of ctx.blocks enables efficient in-memory data processing. For example, multiple updates of the same entity can be compressed into a single database transaction.


Set to true if the processor has reached the chain head. The last block ctx.blocks is then the current chain tip.