Skip to content

A full-stack for indexing DEX trades on Solana using Yellowstone GRPC and Timescale.

License

Notifications You must be signed in to change notification settings

primodiumxyz/dex-indexer-stack

Repository files navigation

DEX Indexer stack

A full-stack for indexing DEX trades and tokens on Solana with high performance and low latency.

This monorepo is composed of two libraries available from npm, as well as examples and documentation. The libraries are:

It is also responsible for building and publishing Docker images for both the indexer and databases to the GitHub Container Registry, that can be used for running the two packages in production, e.g. inside an AWS ECS instance. You will find examples on how to use them in the resources.

These images are available at:

See the dedicated README in each package for detailed documentation.

Table of contents

Introduction

Overview

The DEX Indexer and DEX GraphQL packages compose the entire stack for indexing trades and tokens, managing the database in which the data is stored, and querying it through a type-safe GraphQL API.

The example dashboard and example server expose the way it is intended to query and interact with the database.

The codebase is structured as a pnpm monorepo with the following structure:

examples - "Example integrations with the indexer stack"
├── dashboard - "A React explorer for top-ranked tokens by 30-min volume, with price and candlestick charts"
└── server - "A Fastify server that exposes endpoints and performs periodic tasks on the database"
packages - "Libraries that compose the indexer stack"
│── indexer - "The indexer for Solana DEX trades and token metadata"
└── gql - "The GraphQL client and Hasura/Timescale databases management framework"
resources - "Examples and resources for running and understanding the stack"

Installation

This monorepo uses pnpm as its package manager. First, install node, then npm, then install pnpm.

npm install -g pnpm

This repository is tested with node version 23.5.0 and pnpm version 9.15.2.

Then, clone the repository and install the necessary npm packages with the following from the root folder:

git clone https://github.com/primodiumxyz/dex-indexer-stack.git
cd dex-indexer-stack
pnpm i

Environment

To set the current environment variables for both local development and production, copy /.env.example to a new /.env.

cp .env.example .env

See the example environment file for information on each variable.

Dependencies

This stack—or specifically the indexer—requires some external services to request and subscribe to onchain data.

  • Yellowstone GRPC for streaming transactions with low latency
  • Jupiter for fetching token prices (/prices)
  • DAS API for fetching token metadata in the Metaplex standard (/getAssets)

All of these are available from QuickNode through add-ons, which is the recommended way to run the indexer.

Otherwise, Hasura and Timescale will be run locally during development, and can be either self-hosted or cloud-hosted with their respective offerings.

Development

Running the stack

First, install Docker Desktop, or any other preferred Docker alternative. OrbStack is a good and efficient alternative for Mac users.

Running the following in the root directory of this monorepo will spin up both the indexer and databases/interfaces.

pnpm dev

To run the examples, run the following as well:

pnpm dev:examples
# or just one of the examples
pnpm dev:examples:dashboard
pnpm dev:examples:server

Testing and building

To build both the indexer and GraphQL packages, run the following:

pnpm build

And to test all packages, run the following:

pnpm test

Contributing

If you wish to contribute to the package, please open an issue first to make sure that this is within the scope of the repository, and that it is not already being worked on.

License

This project is licensed under the MIT License - see LICENSE for details.

About

A full-stack for indexing DEX trades on Solana using Yellowstone GRPC and Timescale.

Resources

License

Stars

Watchers

Forks

Packages