Skip to content

vc: render builder config for prysm and lodestar - #488

Merged
KaloyanTanev merged 2 commits into
kalo/proposer-configfrom
kalo/builder-config-vc
Oct 5, 2026
Merged

KaloyanTanev merged 2 commits into
kalo/proposer-configfrom
kalo/builder-config-vc

Conversation

@KaloyanTanev

@KaloyanTanev KaloyanTanev commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Consumes the default_config.builder section of charon's canonical proposer config (ObolNetwork/charon#4704). The Prysm wrapper merges min_bid, builder_boost_factor, max_execution_payment and builders[] into its v2 settings, inherited per key from default_config. The Lodestar wrapper renders its settings-file builder section (boost_factor, min_bid, max_execution_payment, builders[] in keymanager JSON format), and passes --allowDangerousTrustedPayments when max_execution_payment is above 0, without which Lodestar v1.49.0 refuses to start.

Teku is deferred: its gloas builder parameters are hidden global --Xbuilder-* flags, with the proposer-config file extension explicitly deferred upstream. Nimbus and Lighthouse are blocked on their unreleased builder config files (status-im/nimbus-eth2#8994, sigp/lighthouse#9807). Stacked on #486.

@KaloyanTanev KaloyanTanev self-assigned this Sep 18, 2026
@KaloyanTanev
KaloyanTanev marked this pull request as ready for review September 21, 2026 08:30
… payment

Lodestar refuses to start with a max_execution_payment above 0 unless --allowDangerousTrustedPayments is set.
@KaloyanTanev
KaloyanTanev force-pushed the kalo/builder-config-vc branch from 18c212f to 6357411 Compare October 5, 2026 16:25
@sonarqubecloud

sonarqubecloud Bot commented Oct 5, 2026

Copy link
Copy Markdown

@KaloyanTanev
KaloyanTanev merged commit 4a623da into kalo/proposer-config Oct 5, 2026
2 checks passed
@KaloyanTanev
KaloyanTanev deleted the kalo/builder-config-vc branch October 5, 2026 16:30
KaloyanTanev added a commit that referenced this pull request Oct 5, 2026
Wires the charon-generated proposer config (ObolNetwork/charon#4700,
`vc-config/proposer-config.json` next to the cluster lock) into the four
validator clients, so every VC holds the cluster fee recipient and gas
limit. From the gloas fork VCs sign these values into proposer
preferences, so they must match across the cluster
(ObolNetwork/charon#4692).

Each VC mounts `.charon` read-only and its `run.sh` waits up to 120s for
`proposer-config.json` before rendering the client's native format from
charon's sparse schema:
- Teku and Prysm get thin custom images adding `jq`. Teku renders
`--validators-proposer-config`, falling back to the zero-address default
fee recipient without the file.
- Prysm renders v2 settings (`version: 2`, top-level `gas_limit`). At
the gloas fork Prysm drops the legacy `builder.gas_limit`, so a v1 file
would sign a different gas limit than the other VCs.
- Lodestar renders its settings `.yml` via `node`. Nimbus writes
per-validator `suggested_fee_recipient.hex` and
`suggested_gas_limit.json` after key import.

VCs don't wait for charon's healthcheck: `/readyz` stays unready until a
VC connects, so a `service_healthy` dependency never starts them.
`.charon` is mounted rather than `vc-config`, since Docker would
otherwise create a root-owned `vc-config` before charon writes it. The
Nimbus image tag gets a `-jq` suffix so a plain `docker compose up -d`
rebuilds it instead of reusing the old image without `jq`.

Also bumps the stack to the latest releases and pins charon to the
latest gloas commit `9affa0d`, since only the gloas build writes the
proposer config: Nethermind 2.1.0, Reth v2.7.0, Lighthouse v8.2.3, Teku
26.9.1, Lodestar v1.49.0, Prysm v7.2.0, Nimbus v26.10.0, Commit-Boost
v0.10.1, Prometheus v3.15.0, Grafana 13.2.3, Alloy v1.20.1, cAdvisor
v0.60.6, Loki 3.7.8, Tempo 3.1.0. Tempo 3 drops the
`ingester`/`compactor` config, so `tempo.yaml` moves retention to the
backend scheduler and worker. node-exporter moves to
`prom/node-exporter`, since `bitnamilegacy` is frozen at 1.9.1.
Nethermind 2.x upgrades existing databases in place but needs AVX2: it
dies with SIGILL on CPUs or VMs without it.

Also aligns the VC services: all scripts take the beacon endpoint from
`BEACON_NODE_ADDRESS`, Prysm `exec`s the validator and binds metrics on
`0.0.0.0`, Teku enables metrics on `8008`, the Prometheus example
scrapes all VCs, and service definitions follow one key order.

Tested by starting every service at its new version with its compose
flags (no flag or config errors), and running Teku, Nimbus, Lodestar and
Prysm against a stub beacon node with a proposer config holding a
diverging validator: each applied the per-validator values. Lighthouse
follows in #487, builder config in #488.
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.

2 participants