The recommended way to run Prysm against other Ethereum consensus/execution clients is ethereum-package, a Kurtosis package that spins up a full multi-client devnet (execution + consensus + validators) with genesis generated for you.
Note
The deterministic interop key flags (--interop-num-validators,
--interop-start-index, --interop-eth1data-votes) have been removed. Use
ethereum-package instead — it provisions validator keys and genesis automatically.
Write a network_params.yaml selecting Prysm as the consensus client:
participants:
- el_type: geth
cl_type: prysm
- el_type: nethermind
cl_type: lighthouseThen launch the enclave:
kurtosis run github.com/ethpandaops/ethereum-package --args-file ./network_params.yamlKurtosis prints the RPC/API endpoints for every started service. See the ethereum-package configuration reference for the full set of options (fork schedule, validator counts, extra flags, etc.).
By default cl_type: prysm pulls the published Prysm image. To test local
changes, build and load a Docker image into your local daemon with:
bazel run //cmd/beacon-chain:oci_image_tarball
bazel run //cmd/validator:oci_image_tarballThen point the participant at the built images via cl_image and vc_image in network_params.yaml.
If you only need a genesis.ssz (e.g. for a custom harness), prysmctl still
generates one from a chain config:
curl https://raw.githubusercontent.com/ethereum/consensus-specs/refs/heads/dev/configs/minimal.yaml -o /tmp/minimal.yaml
bazel run //cmd/prysmctl --config=minimal -- \
testnet generate-genesis \
--genesis-time-delay=120 \
--num-validators=256 \
--output-ssz=/tmp/genesis.ssz \
--chain-config-file=/tmp/minimal.yaml