selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

ETH Transactions Storage logo

Self-host ETH Transactions Storage

v2.5.0

Ethereum transaction indexer for ETH and ERC-20 transfers

ReleaseOpen SourceGPL-3.0
Updatedlast month
LanguagePython
Setup difficultyModerate
Stars
573
Port
3000 (PostgREST read-only REST API)
Requires
Ethereum execution client, PostgreSQL, PostgREST
Docker
ghcr.io/adamant-im/eth-transactions-storage
Install with Docker Compose

What is ETH Transactions Storage?

This self-hosted Ethereum transaction indexer serves wallets, block explorers, accounting tools, and compliance systems needing per-address transaction history. It connects to any Ethereum execution client — Geth, Nethermind, Besu, or Erigon — via HTTP, WebSocket, or IPC, parses token and ether transfers, and stores them in a PostgreSQL table. A bundled PostgREST instance exposes the data as a read-only REST API supporting filters, sort order, and page navigation, eliminating the need for custom API code. An optional address filter lets operators store only transfers involving a known address list, dramatically reducing disk usage. The project provides a Docker Compose stack with PostgreSQL, PostgREST, the indexer, and an optional Geth dev node, a manual installation guide with systemd units, and a published multi-architecture container image on ghcr.io. The indexer is written in Python using web3.py and psycopg2, and is licensed under GPL-3.0. ADAMANT runs it in production for its wallets, but no ADAMANT components are required to operate it.

Should you self-host ETH Transactions Storage?

ETH Transactions Storage scores 55/100 on selfhost.directory (how scoring works) and ranks #8 of 18 in Blockchain. It has 573 GitHub stars.

It shipped 1 stable release in the past year. The latest, v2.5.0, came out on 4 September 2026.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is GPL-3.0-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is geth-ethereum (86/100, 51 451 stars). It scores higher overall, so compare the two before you pick. See ETH Transactions Storage vs geth-ethereum side by side.

Features

  • Address filtering
  • Checkpoint-based resume
  • Direct SQL access
  • Docker Compose Deployment
  • Ethereum transaction indexing
  • EVM-compatible chain support
  • Multi-Client Support
  • No telemetry or vendor lock-in
  • Read-only REST API
  • Stable API contract
  • Systemd service deployment

ETH Transactions Storage README

How to install ETH Transactions Storage

Install ETH Transactions Storage with Docker Compose

Environment variables
POSTGRES_PASSWORD, DOCKER_ETH_URL, START_BLOCK, CONFIRMATIONS_BLOCK, ETH_INDEXER_IMAGE, POSTGRES_DB, POSTGRES_USER, PGRST_DB_SCHEMA, PGRST_DB_ANON_ROLE, PGRST_DB_MAX_ROWS, PGRST_OPENAPI_SERVER_PROXY_URI

git clone https://github.com/Adamant-im/ETH-transactions-storage.git cd ETH-transactions-storage cp .env.example .env && chmod 600 .env cp filter/addresses.txt.example filter/addresses.txt && chmod 600 filter/addresses.txt

set POSTGRES_PASSWORD and DOCKER_ETH_URL in .env

docker compose up -d

Pulls published indexer image; nothing built locally. Includes PostgreSQL, PostgREST, optional Geth dev node.

How to configure ETH Transactions Storage

  • ADDRESS_FILTER_ENABLEDfalseEnable storing only transfers involving addresses from filter file

    Enable storing only transfers involving addresses from filter file

    values: true, false

  • ADDRESS_FILTER_FILEfilter/addresses.txtPath to monitored-address list (one address per line)

    Path to monitored-address list (one address per line)

  • CONFIRMATIONS_BLOCK0Number of newest blocks to stay behind chain head

    Number of newest blocks to stay behind chain head

  • DB_NAMEPostgreSQL database name or full connection URI

    PostgreSQL database name or full connection URI

  • DOCKER_ETH_URLws://publicnode:8546RPC endpoint passed to container as ETH_URL

    RPC endpoint passed to container as ETH_URL

  • ETH_INDEXER_IMAGEghcr.io/adamant-im/eth-transactions-storage:latestIndexer container image (pin version for production)

    Indexer container image (pin version for production)

  • ETH_URLEthereum RPC endpoint (http, https, ws, wss, or IPC path)

    Ethereum RPC endpoint (http, https, ws, wss, or IPC path)

  • LOG_FILEPath to log file (empty = stdout)

    Path to log file (empty = stdout)

  • PERIOD20Seconds to sleep between synchronization passes

    Seconds to sleep between synchronization passes

  • PGRST_DB_ANON_ROLEweb_anonRole used for unauthenticated requests

    Role used for unauthenticated requests

  • PGRST_DB_MAX_ROWS10000Hard cap on rows returned per request

    Hard cap on rows returned per request

  • PGRST_DB_SCHEMApublicSchema exposed by PostgREST

    Schema exposed by PostgREST

  • PGRST_OPENAPI_SERVER_PROXY_URIhttp://127.0.0.1:3000Public base URL advertised in OpenAPI description

    Public base URL advertised in OpenAPI description

  • POSTGRES_DBapp_dbDatabase name created by db service

    Database name created by db service

  • POSTGRES_PASSWORDPassword for POSTGRES_USER (required)

    Password for POSTGRES_USER (required)

  • POSTGRES_USERapp_userDatabase role created by db service

    Database role created by db service

  • START_BLOCK1First block to index (only on empty deployment)

    First block to index (only on empty deployment)

ETH Transactions Storage releases & version history

More in Blockchain

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…