7.5 KiB
Ethereum statediff infrastructure projects
This document lists all projects involved in the Ethereum state-diffing infrastructure maintained by Vulcanize/Cerc. The infrastructure consists of 20 repositories spanning core plugins, utilities, IPLD/database layers, RPC servers, and supporting tools.
Core plugin components
plugeth
Geth fork with plugin architecture for extending Ethereum client functionality without modifying core code.
Dependencies: none
Used by: plugeth-statediff
plugeth-utils
Utility library providing shared functionality for plugeth plugins.
Dependencies: none
Used by: plugeth-statediff, plugeth
plugeth-statediff
Core state-diffing plugin that extracts Ethereum state changes between blocks as a plugeth plugin.
Dependencies:
- plugeth
- plugeth-utils
Used by:
- eth-statediff-service
- ipld-eth-db-validator
- Integration tests (via stack-orchestrator)
Utility tools
eth-testing
Ethereum testing utilities and helpers.
Dependencies: geth directly
Used by:
- eth-statediff-service
- ipld-eth-state-snapshot
eth-iterator-utils
Iterator utilities for traversing Ethereum state tries, including PrefixBoundIterator and SubtrieIterators.
Dependencies: geth directly
Used by: eth-ipfs-state-validator
eth-dump-genblock
Tool to generate genesis blocks from Geth configuration files.
Dependencies: geth directly
eth-statediff-compliance
Tooling to verify correctness and benchmark performance of statediff results.
Dependencies: geth directly
Used by: plugeth-statediff integration tests
IPLD and database abstraction layer
ipld-eth-db
Postgres database schemas and utilities for storing Ethereum IPLD objects.
Dependencies: none (defines schemas)
Used by:
- ipld-eth-statedb
- ipld-eth-server
- All services that index or query Ethereum data
ipfs-ethdb
Implementation of ethdb interfaces for Ethereum data stored in IPFS/Postgres.
Dependencies: none (interface definitions)
Used by:
- ipld-eth-statedb
- ipld-eth-db-validator
- eth-ipfs-state-validator
ipld-eth-statedb
StateDB implementations for different access patterns (direct_by_leaf, trie_by_cid). Provides state access backed by IPFS/Postgres instead of LevelDB.
Dependencies:
- plugeth-statediff (for state diffing)
- ipfs-ethdb (for database access)
Used by:
- eth-ipfs-state-validator
- ipld-eth-server
- ipld-eth-db-validator
RPC server and validation
ipld-eth-server
JSON-RPC server providing Ethereum RPC endpoints backed by indexed IPLD objects in Postgres.
Dependencies:
- eth-ipfs-state-validator
- ipld-eth-statedb
Used by:
- ipld-eth-db-validator (for verification)
- chain-chunker (for verification)
- External clients querying indexed data
eth-ipfs-state-validator
Validates completeness and correctness of IPFS-backed Ethereum state data.
Dependencies:
- ipld-eth-statedb
- eth-iterator-utils
Used by: ipld-eth-server
Standalone services
ipld-eth-db-validator
Validates indexed Ethereum IPLD objects stored in Postgres database.
Dependencies:
- ipfs-ethdb
- ipld-eth-server
- ipld-eth-statedb
- plugeth-statediff
eth-statediff-service
Standalone service for performing state diffing on a geth database.
Dependencies:
- eth-testing
- plugeth-statediff
Used by: chain-chunker
ipld-eth-state-snapshot
Extracts Ethereum state at specific block heights for offline processing.
Dependencies: eth-testing
Used by: chain-chunker
chain-chunker
Orchestrates offline statediffing and data import pipeline.
Dependencies:
- eth-statediff-service
- ipld-eth-state-snapshot
- ipld-eth-server (for verification)
Supporting infrastructure
lighthouse
Ethereum consensus client (beacon chain) used in test networks, forked to apply minor patches.
Dependencies: none (external dependency)
Used by: fixturenet-eth-stacks
stack-orchestrator
Deployment tool for setting up, building, and deploying Docker-based service stacks.
Used by: Integration tests for plugeth-statediff and other services
fixturenet-eth-stacks
Stack-orchestrator stack definitions for deploying local Ethereum testnets for development and integration testing. Contains two main stacks:
- fixturenet-eth: Basic geth + lighthouse testnet
- fixturenet-plugeth: Full state-diffing integration stack with plugeth, indexing, and RPC server
Dependencies:
- stack-orchestrator (deployment tool)
- lighthouse (consensus client)
- plugeth (for fixturenet-plugeth stack)
- plugeth-statediff (for fixturenet-plugeth stack)
- ipld-eth-db (for fixturenet-plugeth stack)
- ipld-eth-server (for fixturenet-plugeth stack)
Used by: Integration tests and development workflows for plugeth-statediff and related services
system-tests
End-to-end system integration tests.
Used by: Integration tests for plugeth-statediff
Dependency graph overview
Foundational layer:
plugeth-utils → plugeth → plugeth-statediff
Database/IPLD layer:
ipld-eth-db (schemas)
ipfs-ethdb (interfaces) → ipld-eth-statedb
Server layer:
eth-ipfs-state-validator + ipld-eth-statedb → ipld-eth-server
Services layer:
plugeth-statediff + eth-testing → eth-statediff-service
eth-testing → ipld-eth-state-snapshot
eth-statediff-service + ipld-eth-state-snapshot + ipld-eth-server → chain-chunker
Validation:
multiple deps → ipld-eth-db-validator
Utilities:
geth → eth-testing, eth-iterator-utils, eth-dump-genblock, eth-statediff-compliance
Integration testing:
lighthouse + plugeth + plugeth-statediff + ipld-eth-db + ipld-eth-server
→ fixturenet-eth-stacks (deployed via stack-orchestrator)
Update order for Ethereum fork upgrades
When updating for a new Ethereum fork or other major change, follow this sequence:
-
Utility tools (can be done in parallel):
- eth-testing
- eth-iterator-utils
- eth-dump-genblock
- eth-statediff-compliance
-
Core plugin stack (sequential):
- plugeth-utils
- plugeth
- plugeth-statediff
-
IPLD/database layer:
- ipfs-ethdb
- ipld-eth-statedb
-
Validation and server:
- eth-ipfs-state-validator
- ipld-eth-server
-
Standalone services:
- ipld-eth-db-validator
- eth-statediff-service
- ipld-eth-state-snapshot
- chain-chunker
-
Supporting infrastructure:
- stack-orchestrator (config updates as needed)
- fixturenet-eth-stacks (stack definition updates if needed)
- system-tests
See plugeth-statediff-upgrade-guide.md for a more comprehensive guide.