avalanche-indexer

module
v1.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2026 License: BSD-3-Clause

README

Avalanche Indexer

A Go monorepo for indexing and processing Avalanche blockchain data. It includes reusable packages and runnable services under cmd/.

Monorepo layout

  • cmd/ — runnable services (e.g., blockfetcher)
  • pkg/ — shared libraries (e.g., slidingwindow)
  • Dockerfile — multi-binary image build that can run any service via APP
  • Makefile — build, test, lint targets

Requirements

  • Go 1.24+
  • Make
  • Docker (optional, for container builds)

Build

Build all services:

make build-all

Build a specific service:

APP=blockfetcher make build-app

Artifacts are placed in bin/.

Test and lint

make unit-test
make lint

Docker

This repo uses a single multi-binary Docker image. At runtime, select which binary to run with the APP environment variable.

Build all services into one image:

docker build -t indexer:latest .

Optionally, build a single service for faster builds:

docker build -t indexer:blockfetcher --build-arg APP=blockfetcher .

Run a service (example: blockfetcher):

bin/blockfetcher run \
  --evm-chain-id 43114 \
  --bc-id "11111111111111111111111111111111LpoYY" \
  --rpc-url wss://api.avax-test.network/ext/bc/C/ws \
  --start-height 0 \
  --concurrency 16 \
  --backfill-priority 4 \
  --blocks-ch-capacity 200 \
  --max-failures 5 \
  --kafka-brokers localhost:9092 \
  --kafka-topic blocks \
  --verbose

See each service’s README for its full flag/env reference.

Services

  • blockfetcher — fetches blocks from a Coreth-compatible RPC and processes them via a sliding window.
    • See cmd/blockfetcher/README.md
  • consumerindexer — consumes and indexes blockchain data from Kafka (blocks or traces mode).
    • See cmd/consumerindexer/README.md

Local Development Setup

This project includes a Docker Compose configuration for local development with:

  • Apache Kafka (KRaft mode, no Zookeeper)
  • Provectus Kafka UI
  • ClickHouse (with Tabix UI)
Quick Start
# Start all services
docker compose up -d

# View logs
docker compose logs -f

# Stop services
docker compose down

# Stop and remove volumes
docker compose down -v
Services & Ports
Service Port Description
Kafka 9092 External client access (from host)
Kafka 9093 Internal access (container-to-container)
Kafka UI 8080 Web UI for Kafka management
ClickHouse 8123 HTTP interface
ClickHouse 9000 Native protocol
Tabix 8082 ClickHouse web UI
Connecting from Host Applications
# Kafka bootstrap server
localhost:9092

# Kafka UI
http://localhost:8080

# ClickHouse
http://localhost:8123

# Tabix (ClickHouse UI)
http://localhost:8082
Connecting from Other Docker Containers

Add your container to the kafka-network network and use:

# Kafka bootstrap server
kafka:9093

# ClickHouse
clickhouse:8123
Kafka UI Features

The Kafka UI is pre-configured with:

  • Cluster: local-kafka pointing to the local Kafka broker
  • Dynamic Config: Enabled (DYNAMIC_CONFIG_ENABLED=true) — allows adding/editing clusters via the UI

Access the UI at http://localhost:8080 to:

  • View and create topics
  • Browse messages
  • Manage consumer groups

Examples

Block Fetcher

Start ingestion from specific block (no checkpoint):

# spin up containers (checkpoints table will be created)
docker-compose up -d

# build applications
make build-all

# run block fetcher for Fuji testnet starting from block 48662238 using default checkpoints table
./bin/blockfetcher run -r wss://api.avax-test.network/ext/bc/C/ws -C 43113 -b 9 -B 5 -c 10 -s 48662238

The checkpoints can be checked using UI at http://localhost:8082 To login use these values:

name: dev (can be any other name)
host: http://127.0.0.1:8123
login: default

Select default in ClickHouse Server tab (on the left).

checkpoint records can be added manually:

INSERT INTO default.checkpoints (chain_id, mode, lowest_unprocessed_block, timestamp) 
VALUES (43114, 'blocks', 48662238, 1767903034)

Note: Checkpoints include a mode field ('blocks' or 'traces') to allow running both modes in parallel for the same chain without conflicts.

Start ingestion from checkpoint:

# run block fetcher for Fuji testnet starting from latest un-ingested 
# block in default checkpoints table
./bin/blockfetcher run -r wss://api.avax-test.network/ext/bc/C/ws -C 43113 -b 9 -B 5 -c 10

Contributing

  • Open an issue or pull request
  • Run make unit-test and make lint before submitting

License

See LICENSE.

Directories

Path Synopsis
cmd
blockfetcher command
consumerindexer command
pkg
kafka/messages
Package messages provides types for Kafka messages, along with conversion functions from libevm types.
Package messages provides types for Kafka messages, along with conversion functions from libevm types.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL