Hydra Indexer is a daemon that ingests raw substrate data such as events and extrinsics from a substrate chain and saves it into a Postgres database. It is typically used in conjunction with Hydra Indexer Gateway providing a GraphQL API interface.
Hydra Indexer is distributed as a set of docker containers. Please have a look at https://github.com/subsquid/hydra-template/blob/main/indexer/docker-compose.yml for an example of how to setup your own indexer instance.
The indexer is set up using the following environment variables
| Variable | Default | Required | Description |
|---|---|---|---|
| WS_PROVIDER_ENDPOINT_URI | - | Yes | Substrate API endpoint to connect |
| REDIS_URI | - | Yes | Redis instance URI |
| DB_NAME | - | Yes | Database name |
| DB_PORT | - | Yes | Database port |
| DB_HOST | - | Yes | Database host |
| DB_USER | - | Yes | Database user |
| DB_PASS | - | Yes | Database password |
| BLOCK_HEIGHT | 0 | No | Block height to start indexing. Ignored if the database already contains indexed blocks |
| TYPES_JSON | - | No | Path to a JSON file with custom types (ApiPromise.create({types: TYPES_JSON})) |
| TYPES_ALIAS | - | No | Path to a JSON file with type aliases (ApiPromise.create({typesAlias: TYPES_ALIAS})) |
| SPEC_TYPES | - | No | Path to a JSON file with spec types (ApiPromise.create({typesSpec: SPEC_TYPES})) |
| CHAIN_TYPES | - | No | Path to a JSON file with chain types (ApiPromise.create({typesChain: CHAIN_TYPES})) |
| BUNDLE_TYPES | - | No | Path to a JSON file with typesBundle (ApiPromise.create({typesChain: BUNDLE_TYPES})) |
Some optional environment variables are available for fine-tuning.
| Variable | Default | Description |
|---|---|---|
| BLOCK_CACHE_TTL_SEC | 60*60 |
TTL for processed blocks in the Redis cache |
| INDEXER_HEAD_TTL_SEC | 60*15 |
TTL for the indexer head block entry |
| WORKERS_NUMBER | 5 | Number of concurrent workers fetching the blocks |
| BLOCK_PRODUCER_FETCH_RETRIES | 3 | Number of attempts fetching each a block before throwing an error. Set to -1 for indefinite attempts |
| SUBSTRATE_API_TIMEOUT | 1000 * 60 * 5 |
Timeout in (milliseconds) for API calls |
| NEW_BLOCK_TIMEOUT_MS | 60 * 10 * 1000 |
Panic if no blockchain blocks have been received within this time |
| DB_LOGGING | error |
No |