Contributing and Releases
The project is open source under the GPL-3.0 license and developed in the open at github.com/Adamant-im/ETH-transactions-storage.
Getting the Source
git clone https://github.com/Adamant-im/ETH-transactions-storage.git
cd ETH-transactions-storage
pip3 install -r requirements.txt
npm cinpm ci installs the documentation and Markdown tooling from the committed lockfile. It is not needed to run the indexer.
Branches:
masteris the released state, and is what release tags and published images are built fromdevis the integration branch, and the target for pull requests
Working on the Documentation
npm run docs:dev # local server with hot reload
npm run docs:build # production build into docs/.vitepress/dist
npm run docs:preview # serve the built siteGenerated output under docs/.vitepress/cache and docs/.vitepress/dist is git-ignored and must never be committed.
Checks
Run these before opening a pull request. They are the same commands CI runs.
npm run format:check # Prettier
npm run lint:md # markdownlint
npm run docs:build # documentation build, including link resolution
npm run lint:py # python3 -m py_compile on every module
npm test # python3 -m unittest
flake8 ethsync.py # when flake8 is available
docker build -t eth-transactions-storage:local .
docker compose config --quietnpm run format rewrites files in place when format:check fails.
Pull Requests
- Target
devunless you were asked to do otherwise - Use a Conventional Commits style title:
Type: Short summary, for exampleDocs: Document the address filter. Square-bracket prefixes such as[Docs]are reserved for issues - Follow the organization pull request sections:
## Summary,## Details,## Related issue,## Checklist,## Verification - Reference issues with closing keywords where appropriate, for example
Closes #30 - Include the commands you ran and their results in the verification section
- Everything in the repository is written in English: code, comments, documentation, commit messages, and pull request text
Organization-wide conventions live in the .github repository, with issue prefix guidance and the label catalog.
Contributors working with AI assistants should also read AGENTS.md, which records the invariants an automated change must not break.
What Not to Break
Some things are contracts rather than implementation details:
- Endpoint names, column names, and value encodings in the REST API
- The additive nature of
create_tables.sql, so it stays safe to re-run on production databases - The read-only posture of the anonymous role
- Zero telemetry. Nothing may report usage, errors, or addresses to any third party
Release Process
- Changes land on
devand are merged intomaster - The version in
package.jsonand the version string in thecreate_tables.sqlmax_blockview are updated together - A tag
vX.Y.Zis created onmasterand a GitHub Release is published from it
Publishing a release triggers two workflows:
- Docs. Builds the VitePress site and deploys it to GitHub Pages at https://eth-indexer.docs.adamant.im. Pull requests are built but never deployed, so untrusted code cannot reach the Pages environment
- Publish Docker image. Verifies the release tag is an ancestor of
master, then builds and pushesghcr.io/adamant-im/eth-transactions-storagewith an immutableX.Y.Ztag.latestmoves only for non-prerelease releases
Both workflows request the minimum permissions they need: contents: read, pages: write, and id-token: write for the documentation deployment, and contents: read and packages: write for the image publication.
Version tags are immutable. The publish workflow refuses to run if the version tag already exists in the registry, so a rerun cannot replace a published digest with a rebuild — the base image and dependency constraints resolve differently over time, and a pinned version must keep pointing at the artifact it originally pinned. To ship a correction, publish a new version.
Release notes are published at Releases.
One-Time Repository Setup
The documentation deployment depends on repository settings that no workflow can create for itself. The default GITHUB_TOKEN can neither enable Pages nor set a custom domain, so a maintainer with admin rights has to do them once, and the first deployment fails until they do.
- Settings → Pages → Source: GitHub Actions
- Settings → Pages → Custom domain:
eth-indexer.docs.adamant.im, then Save
The CNAME file in docs/public/ travels inside the Pages artifact, but GitHub ignores an artifact CNAME for Actions-based deployments — it is kept for provenance and for a fallback to branch-based publishing, not as configuration. The domain in the repository setting is the one that takes effect.
Settings → Environments →
github-pages→ Deployment branches and tags: add a tag rulev*alongside themasterbranch ruleGitHub creates this environment automatically, restricted to the default branch. A release-triggered run deploys from
refs/tags/vX.Y.Z, which that rule alone rejects, so publishing a release would fail the deployment while a push tomastersucceeded.Wait for GitHub to provision the certificate, which can take up to 24 hours, then enable Enforce HTTPS
Verify that https://eth-indexer.docs.adamant.im serves the site over valid HTTPS before announcing it
The GHCR package also needs to be made public once, after the first release publishes it.
Reporting Bugs
Open an issue with:
- The indexer version, from
/max_block - The deployment mode: Docker Compose, Docker, or systemd
- The execution client and version
- The PostgreSQL version
- Relevant log lines, with credentials removed
The troubleshooting page covers the common cases and is worth checking first.
Reporting Security Issues
Report vulnerabilities privately to devs@adamant.im instead of opening a public issue. Include reproduction steps and the affected version.
License
Copyright © 2025–2026 ADAMANT developer community
Copyright © 2020–2024 ADAMANT Foundation
Copyright © 2017–2020 ADAMANT TECH LABS LP
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
The full text is in LICENSE.
Support and Links
- Documentation: https://eth-indexer.docs.adamant.im
- Source: https://github.com/Adamant-im/ETH-transactions-storage
- Issues: https://github.com/Adamant-im/ETH-transactions-storage/issues
- Releases: https://github.com/Adamant-im/ETH-transactions-storage/releases
- Container image: https://github.com/Adamant-im/ETH-transactions-storage/pkgs/container/eth-transactions-storage
- Email: devs@adamant.im