Skip to main content

SDK FAQ

Common questions and answers about developing with Squid SDK.

Real-World Applications

What are some real-world applications for which Squid SDK was a good fit?

Squid SDK is well-suited for a wide range of blockchain indexing applications:
  • DeFi Dashboards - Track addresses and internal transactions across multiple protocols
  • NFT Marketplaces - Index dynamic sets of NFT contracts and trading activity
  • Historical Price Feeds - Track Uniswap trades and Chainlink oracle contracts
  • Smart Contract Analysis - Mine contract deployments and analyze bytecode
  • Real-time Bots - Build bots with <1sec delay triggered by on-chain activity
Squid SDK excels at applications requiring high-performance indexing, complex data transformations, and real-time processing.

Technical Questions

How does Squid SDK handle unfinalized blocks?

The SQD Network serves finalized blocks and is typically ~1000 blocks behind the tip. Recent and unfinalized blocks are seamlessly handled by the SDK from a complementary RPC data source configured in your processor.
Potential chain reorganizations are automatically handled under the hood, ensuring data consistency.
For detailed information, see Indexing unfinalized blocks.

What is the latency for the data served by the squid?

Since the ArrowSquid release, Squid SDK can ingest unfinalized blocks directly from an RPC endpoint, making indexing real-time with minimal latency.
Configure your RPC endpoint in the processor to enable real-time indexing of the latest blocks.

How do I enable GraphQL subscriptions for local runs?

Add the --subscription flag to the serve command in your commands.json:
commands.json
{
  "commands": {
    "serve:dev": {
      "cmd": ["npx", "squid-graphql-server", "--subscription"]
    }
  }
}
See Subscriptions for detailed configuration options.

How do squids keep track of their sync progress?

Sync progress tracking depends on the data sink used: TypeORM Database: Processors using TypeormDatabase store their state in a PostgreSQL schema (not a table). By default, the schema is called squid_processor.
The schema name must be overridden in multiprocessor squids.
View sync status:
SELECT * FROM squid_processor.status;
Reset processor status:
DROP SCHEMA squid_processor CASCADE;
File-based datasets: Squids using file-based storage store their status in status.txt by default. This can be customized using database hooks.

Is there a healthcheck endpoint for the indexer?

Yes! The processor exposes Prometheus metrics at the ${process.env.PROMETHEUS_PORT}/metric endpoint.
For squids deployed to SQD Cloud, metrics are publicly exposed. See Monitoring in the Cloud for details.

Do squids have a debug mode?

Yes. Enable debug mode by setting the SQD_DEBUG environment variable:
.env
# Enable all debug messages
SQD_DEBUG=*

# Enable specific namespace (e.g., SQD Network queries)
SQD_DEBUG=sqd:processor:archive
Use specific namespaces to focus on particular components and reduce log noise during debugging.