Skip to main content

Overview

A squid is an indexing project built with Squid SDK to retrieve and process blockchain data from the Subsquid Network (either permissioned or decentralized instance). The Squid SDK is a set of open source Typescript libraries that retrieve, decode, transform and persist the data. It can also make the transformed data available via an API. All stages of the indexing pipeline, from the data extraction to transformation to persistence are performed on batches of blocks to maximize the indexing speed. Modular architecture of the SDK makes it possible to extend indexing projects (squids) with custom plugins and data targets.

Required squid components

Processor

Processor is the word used for

  1. The main NodeJS process of the squid.
  2. The main object (processor) of this process: its method call processor.run() is the entry point.

processor objects handle data retrieval and transformation; data persistence is handled by a separate object called Store. Squid SDK offers two processor classes:

Store

A store is an object that processors use to persist their data. Subsquid offers three store classes:

You can mix and match any store class with any processor class.

Optional squid components

Typegen

A typegen is a tool for generating utility code for technology-specific operations such as decoding. Here are the typegens available:

  • squid-evm-typegen via @subsquid/evm-typegen:
    • decodes smart contract data
    • handles direct calls to contract methods
    • exposes useful constants such as event topics and function signature hashes

Install these with --save-dev.

GraphQL server

Squids that store their data in PostgreSQL can subsequently make it available as a GraphQL API. To use this functionality, install @subsquid/graphql-server.

The server runs as a separate process. Core API is automatically derived from the database schema; it is possible to extend it with custom queries and basic access control.

Misc utilities