Skip to content

gitcoinco/grants-stack-indexer

Repository files navigation

Grants Stack Indexer

The Grants Stack Indexer is a tool that indexes blockchain events generated by Allo contracts and serves the data over HTTP in JSON format. The data is organized in a specific structure that enables easy access to different parts of the protocol. The indexer is built using Chainsauce and is designed to work with any EVM-compatible chain.

The indexer data is used by Grants Stack as a data layer.

API

Access indexed data through the GraphQL endpoint at:

https://grants-stack-indexer-v2.gitcoin.co/graphql

Use the GraphiQL Playground to inspect the schema:

https://grants-stack-indexer-v2.gitcoin.co/graphiql

Indexed chains are defined in config.ts.

Setup

Requires Node 18 minimum.

Copy .env.example to .env, review and optionally customize it.

To pick chains to index, set INDEXED_CHAINS to a comma-separated list of chain identifiers. Available chain identifiers can be found in src/config.ts.

Running in development

cp .env.example .env
docker-compose up -d
npm install
npm run build

npm run dev

# you can also pass arguments to the dev script

npm run dev -- --drop-db # drop the database before indexing
npm run dev -- --from-block=latest # start indexing from the last block
npm run dev -- --from-block=12345 # start indexing from the 12345th block
npm run dev -- --run-once # index and exit without watching for events
npm run dev -- --no-cache # disable cache
npm run dev -- --log-level=trace # set log level

Running in production

npm install
npm run build
npm run start # this will sync to the last block and then run the http server

Or use the provided Dockerfile.

Deployment

We're currently continuously deploying the main branch into Fly.

There are a few things to consider when it comes to deploying your changes:

  • Deployments resume indexing from the last indexed block, which means that your changes will only apply to new blocks, and migrations are not applied
  • If you need to change the database schema or change an event handler retroactively, you need to increment the CHAIN_DATA_VERSION constant found in src/config.ts, on deployment this will automatically create a new schema in Postgres and reindex all events. Note that deployments that reindex will take longer.