Skip to content

Wire charon proposer config into validator clients - #486

Open
KaloyanTanev wants to merge 9 commits into
mainfrom
kalo/proposer-config
Open

KaloyanTanev wants to merge 9 commits into
mainfrom
kalo/proposer-config

Conversation

@KaloyanTanev

@KaloyanTanev KaloyanTanev commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Wires the charon-generated proposer configuration (ObolNetwork/charon#4700, vc-config/proposer-config.json next to the cluster lock) into the four validator clients, so VCs hold the cluster fee recipient and gas limit — required from the gloas fork, where VCs sign these values into proposer preferences (ObolNetwork/charon#4692).

  • All VC services mount the vc-config directory read-only and wait for charon to be healthy. Directory mounts are safe with any charon version: a missing directory is auto-created empty, and files charon writes later propagate into running containers.
  • Teku moves to a run.sh entrypoint (like the other VCs): it uses the proposer config when present, otherwise falls back to today's zero-address default fee recipient.
  • Prysm reads the file directly; Lodestar via a copy to .yml (it rejects .json file extensions); Nimbus renders per-validator suggested_fee_recipient.hex + suggested_gas_limit.json files after key import. All degrade gracefully with a warning when the file is absent.

Verified empirically: Teku parses the charon-generated file and falls back cleanly without it; Lodestar rejects .json and accepts the .yml copy; the Nimbus renderer tested against a real generated file for both validator-directory naming conventions. Safe to run with any CHARON_VERSION; with pre-#4700 charon everything behaves exactly as today. Lighthouse follows in a separate PR as a new profile.

Also aligns the VC services while touching them: all scripts take the beacon endpoint from BEACON_NODE_ADDRESS, prysm execs the validator (graceful shutdown) and binds its metrics on 0.0.0.0, teku enables metrics on its default 8008, the prometheus example scrapes all VCs, and compose service definitions follow one key order.

Update: charon's file is now a canonical sparse schema (default_config holds majority values, entries only carry diverging fields, no pre-gloas legacy fields), so every wrapper renders its client's native format from it: Teku and Prysm get thin custom images adding jq and render their proposer config at start, Lodestar renders via node, and Nimbus resolves per-validator values with the default fallback.

@KaloyanTanev KaloyanTanev self-assigned this Sep 16, 2026
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant