feat: add trueblocks support#1404
Conversation
barnabasbusa
left a comment
There was a problem hiding this comment.
this looks a bit too vibe cody, even for me
|
Pushed
Net diff vs the original commit: -219/+28 lines across 7 files (launcher trimmed from ~280 → 162 lines). On the End-to-end re-tested with the new image + simplified launcher on an Erigon + Lighthouse devnet: |
|
Pushed
Also filed TrueBlocks/trueblocks-khedra#22 — khedra would be the cleaner long-term answer (single-process daemon+scraper), but its startup requires a reachable mainnet RPC returning chainId 1, which doesn't fit hermetic devnets. If that lands we can migrate. |
## Summary Adds an `ethpandaops/trueblocks` image build (`chifra` from `TrueBlocks/trueblocks-core`). Consumed by [ethpandaops/ethereum-package#1404](ethpandaops/ethereum-package#1404) to run the chifra daemon as a kurtosis additional service. TrueBlocks stopped publishing official Docker images after `v5.0.0`. ## Files | File | Purpose | | --- | --- | | `trueblocks/Dockerfile` | Multi-stage build, `golang:1.25.1-bookworm` → `debian:bookworm-slim`, ENTRYPOINT chifra | | `.github/workflows/build-push-trueblocks.yml` | Manual build workflow (modeled on `build-push-slashoor.yml`) | | `branches.yaml` | Adds `trueblocks: [main, v5.9.3]` | | `platforms.yaml` | Adds `trueblocks: [linux/amd64, linux/arm64]` | | `generate_config.py` | Adds `'trueblocks': 'TrueBlocks/trueblocks-core'` to `DEFAULT_REPOS` | | `README.md` | Tooling workflows list addition | The image also ships chifra's bundled per-chain configs (`allocs.csv` etc.) from `src/other/install/per-chain/`. ## Test plan - [x] Local build via `docker buildx build --file ./trueblocks/Dockerfile <source>` against `v5.9.3` — succeeds, image is 139 MB. - [x] End-to-end via [ethereum-package#1404](ethpandaops/ethereum-package#1404) on an Erigon + Lighthouse devnet: chifra daemon comes up, `/status` returns `isArchive: true`, `trueblocksVersion: GHC-TrueBlocks//5.9.3`; `/blocks`, `/list`, `/chunks` all respond. - [ ] Trigger the workflow once after merge to publish the first `ethpandaops/trueblocks:v5.9.3` and `ethpandaops/trueblocks:main` tags. --------- Signed-off-by: Chase Wright <chase.wright@ethereum.org> Co-authored-by: Barnabas Busa <barnabas.busa@ethereum.org>
Summary
Adds
trueblocksas anadditional_servicesoption that runs chifra daemon — the TrueBlocks REST API — against a participant EL on container port 8080. Per-chaintrueBlocks.tomlis rendered for the active network (network_params.network/network_id), andallocs.csvis pre-staged for unknown chains sochifra's archive check passes. Image is published from ethpandaops/eth-client-docker-image-builder#384.The package runs
chifra daemononly. The scraper isn't started automatically — POST/scrapeon the daemon (or runchifra scrapeagainst the same data dir) when you want to build the local Unchained Index. The other chifra endpoints (/status,/blocks,/receipts,/transactions,/traces,/logs) work without an index — they're chifra-flavored RPC pass-through.Configuration
Devnet example:
Notes
chifra'sIsNodeArchivedoes a CSV-vs-RPC consistency check rather than a real archive probe, so it returnsfalseon chains we don't ship a bundledallocs.csvfor. The launcher works around it by writing a self-consistentallocs.csvfor the active chain in a one-shotplan.run_shbootstrap (probes the first prefund's actual block-0 balance, drops the rendered toml in alongside the image's bundled per-chain configs, stores the result as a files artifact mounted into the daemon container). Filed upstream: TrueBlocks/trueblocks-core#4044.We considered khedra (the official
chifra daemon+chifra scrapeunified successor) but its startupConfigured()check requires a reachable mainnet RPC returning chainId 1, which doesn't fit hermetic devnets. Filed upstream: TrueBlocks/trueblocks-khedra#22 — if a headless mode lands, we can migrate.Test plan
/statusreturnsisArchive: true, isTracing: true, trueblocksVersion: GHC-TrueBlocks//5.9.3;/blocks?blocks=0returns genesis;/list?addrs=<prefund>returns appearances after aPOST /scrape;/chunks?mode=indexreflects the new chunk.kurtosis lint --formatclean;kurtosis run --dry-runclean.