Clearing everythign down and starting from scratch Overview
This document provides step-by-step instructions for installing and running a Geth private Ethereum network, both locally (using Kind and Kurtosis) and on mqube-playground.com (the test OSS cluster).
The private Ethereum network runs using the ethpandaops/ethereum-helm-charts Helm chart.
Installation is performed via:
helm upgrade --install ...Helm values are overridden through custom values.yaml files to allow easy deployment in environments such as staging, or production using Jenkins X (JX) and helmfiles.yaml.
Youβll need two main components:
- Helm values (
values.yaml) β defines configuration for Helm installations (used in JX viahelmfiles.yaml). - Network setup files β includes
genesis.json,config.yaml,genesis.ssz, and related files defining the private chain configuration.
The default chart is configured for a global Ethereum testnet, but weβre running a private network instead.
Custom configuration files are stored in this repository under:
/network-configs
These override the defaults from the Helm chart.
We use Kurtosis β a development orchestration tool similar to Docker Compose or Helm, but designed for more complex stack setups (especially for blockchain testnets).
Kurtosis simplifies generating the configuration files needed for a local Ethereum network.
brew install kurtosis-tech/tap/kurtosis-cliKurtosis runs best with Kind (Kubernetes-in-Docker) on macOS:
brew install kind
kind create cluster --name kurtosisThen connect Kurtosis to that cluster:
kurtosis cluster set kind-kurtosis
kurtosis cluster ls
kurtosis engine statusStart or restart the Kurtosis engine:
kurtosis engine start
# or
kurtosis engine restartYou can monitor logs using:
kurtosis gatewayIf you previously set up a testnet, clean it up first:
kurtosis enclave rm -f my-testnet
kurtosis clean -aRun the official ethpandaops Ethereum package inside a new enclave:
kurtosis run --enclave my-testnet github.com/ethpandaops/ethereum-packageAfter setup, download the configuration files used/generated by Kurtosis:
kurtosis files download my-testnet el_cl_genesis_data ./out/el_cl_genesis_dataThese are the files uploaded to this repo under /network-configs, replacing the testnet files from the Helm chart.
Kurtosis doesn't produce the key files as part of the config download we do above , it doesn't actually produce them as enclave files so you can't use
kurtosis files download
You need to downloand them from the image on the cluster , there is a K8 job that runs and checks for keys and updates the validator , this often completes so you can get them from that job but only if running (which is unlikley) So the script tries to get them from there , but otherwise it gets them from the other services that the validaor job uses to build them , so either way you end up with the 64 validator keys that are then created in the secret (below) which the validaotr uses in it's init script to import and use for validation (or helm installed validator)
There are some scripts to help do this
./scripts/getKurtosisKeys.sh Then we need to create the secret itself with the JSON key files and the Password file
./scripts/createSecretFromKeys.sh
This secret is referenced from the validator init containers to import all the accounts to use for validation these accounts are the accounts used in genesis.ssz which was generated as part of the config files above
You can see the init containers logic for importing these secrets here
helm-configs/validator.yaml See the validator config for details.
If you decide it was too much to use kind and install kurtosis (I would though as it's much easier using kind and Kurtosis) you can use the docker containers they (kurtosis) use and run them directly
Docker Kurtosis Overview
Read the clearing up section , but if you want to use the config files in this repo then you can and miss the steps above , but read the clear up section to understand this and if not and your producing the config files remember to push back to main on this report or change you helm-config yaml files to use a local directoy instead of this repo
To install the Geth execution node locally or on the Playground OSS cluster:
helm upgrade --install geth-devnet ethpandaops/geth \
-f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/geth-execution.yaml \
--namespace devnet --create-namespace
π‘ Use the Helm chart directly from
ethpandaops/ethereum-helm-charts, or reference it from this repo.
On JX (e.g., staging), prefer usinghelm repo addin your Helmfile setup.
helm upgrade --install beacon-devnet ethpandaops/prysm \
-f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/beacon-chain.yaml \
--namespace devnet --create-namespace
helm upgrade --install validator-devnet ethpandaops/prysm \
-f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/validator.yaml --namespace devnet --create-namespace
These three componentsβGeth, Beacon, and Validatorβtogether form a complete Proof-of-Stake (PoS) Ethereum private network.
For more details on Prysm (Beacon & Validator):
π Prysm Documentation
π» Geth (go-ethereum) Repository
Blockscout provides an explorer interface for viewing your private network.
We deploy it on the playground OSS cluster.
Install a secret first that psotgress will use
kubectl apply -f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/blockscout-db-auth.secret.yaml --namespace devnet
helm upgrade --install blockscout-db oci://registry-1.docker.io/bitnamicharts/postgresql -n devnet -f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/block-postgresql.yaml
β οΈ When uninstalling, remember to delete the PVC to ensure a clean database reset:
kubectl delete pvc data-blockscout-db-postgresql-0 -n devnetThis ensures that your next deployment starts with a fresh, empty database.
Blockscoutβs Stats service (written in Rust) requires a manual DB creation step because it doesnβt support sslmode=disable.
Run the helper script in this repo:
export NS=devnet
./scripts/createStatsDB.shThis secret stores database credentials for the Blockscout Helm chart:
./scripts/postgress-secret-script.sh helm upgrade --install blockscout blockscout/blockscout-stack -n devnet -f https://raw.githubusercontent.com/spring-financial-group/ethereum-config-chains/main/helm-configs/blockscout-stack.yamlπ You may see warnings about environment variables being overridden β this is expected due to how the chart merges environment configs.
Once deployed, you can view your private network in Blockscout:
π https://mqube-blockscout-frontend.mqube-playground.com/
You will also be exposing the geth-node over rpc-geth-node.mqube-playground.com:
π https://rpc-geth-node.mqube-playground.com/
You can test this end point using the below
curl -sS -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \
https://rpc-geth-node.mqube-playground.com
| Component | Purpose | Helm Config |
|---|---|---|
| Geth | Execution Layer | helm-configs/geth-execution.yaml |
| Beacon | Consensus Layer (Prysm) | helm-configs/beacon.yaml |
| Validator | Proof-of-Stake Validator | helm-configs/validator.yaml |
| Blockscout | Blockchain Explorer | helm-configs/block-scout.yaml |
| PostgreSQL | Blockscout DB | helm-configs/block-postgress.yaml |
- Use Kind for local testing and mqube-playground.com for shared OSS deployments.
- Always clean up PVCs during reinstallation to avoid stale data.
- Kurtosis is optional but extremely useful for generating consistent Ethereum config files.
- Ensure all three core components (Geth, Beacon, Validator) are running before deploying Blockscout.
You'll have some pre-funded accounts (these are in genesis.json)
There are some scripts to check these in accounts scripts
Understanding Pre funded Accounts (THESE are NOT the same as the validator accounts you have above) Overview