Repository navigation
Conversation
From the gloas fork, block production moves to `produceBlockV4`, whose `include_payload` parameter selects the stateless (payload-included) or stateful (payload-excluded) response form for self-built blocks. A distributed validator needs the **stateless** form: charon fans block production across nodes, so no single beacon node can be relied on to hold the cached envelope for the stateful flow. This sets each VC to request the stateless form where a lever exists: - **Lodestar**: `--payloadLocal=false`. Lodestar auto-selects stateless only when configured with >1 beacon node; behind charon (a single endpoint) it would default to stateful, so this sets it explicitly. - **Prysm**: `--stateless`. Off by default and only auto-forced on with multiple beacon nodes, so it is set explicitly here. - **Nimbus**: no flag exists — it requests stateless only with >1 beacon node and cannot be overridden. Documented in `nimbus/run.sh` as a known gap (status-im/nimbus-eth2#9084). - **Teku**: does not yet implement `produceBlockV4` on the validator client, so it cannot propose gloas blocks behind charon today. Documented in `compose-vc.yml` (Consensys-Incorporated/teku#11172). Note the VC image versions must be gloas-capable for these flags to be recognised; the flags are still pre-release and their names/defaults may change before the fork. category: feature ticket: none
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.
Bumps charon to `6e59dc0`, the latest `gloas` branch commit, which includes serving execution payload envelopes (ObolNetwork/charon#4765), agreeing on self-built blocks without payload (ObolNetwork/charon#4771) and aggregated builder request auths (ObolNetwork/charon#4783). Also bumps the clients to their Hoodi Glamsterdam ready releases: Lighthouse `v8.3.0`, Teku `26.10.1`, Lodestar `v1.50.0`, Prysm `v7.3.0`, Nimbus `v26.10.1`, Grandine `3.0.0-rc.1`, Nethermind `2.2.0` and Commit-Boost `v0.12.0-rc1`. Grandine and Commit-Boost are release candidates, but they are the versions listed for the Hoodi fork. Supersedes #492 and #493. The `obolnetwork/charon:6e59dc0` image is still building, so this should merge once it is published.
Passes `CHARON_BUILDER_URLS` to charon so it requests gloas execution payload bids from builders directly. The Hoodi and new Sepolia env samples set it to the nflaig and Titan builders of that network; mainnet stays empty as gloas is not scheduled there yet. Adds a `.env.sample.sepolia`, the Hoodi sample with Sepolia checkpoint sync, MEV relays and builders.
Bumps charon to `e428ac3`, the latest `gloas` branch commit, which agrees the beacon node's `Eth-Builder-Url` with gloas proposals and forwards it on publish, and adds builder source logs and metrics (ObolNetwork/charon#4786). This changes charon's agreed gloas proposal encoding, so all nodes of a cluster must be rolled to it before gloas proposals agree again. The `obolnetwork/charon:e428ac3` image is still building, so this should merge once it is published.
Bumps charon to `a58fc63`, the latest `gloas` branch commit, which forwards the agreed `Eth-Builder-Url` on publish as decided and matches it to the configured builders under RFC 3986 normalisation, so direct builder bids get their signed block forwarded and keep their execution value (ObolNetwork/charon#4787). The `obolnetwork/charon:a58fc63` image is still building, so this should merge once it is published.
# Conflicts: # compose-vc.yml # teku/run.sh
KaloyanTanev
marked this pull request as ready for review
October 21, 2026 15:52
charon edit (promoted out of alpha in ObolNetwork/charon#4788) ships in v2.0; there is no v1.12.0 image, so the scripts' default failed to pull.
charon v2.0.0-rc2 ships edit under alpha (ObolNetwork/charon#4791 reverted the promotion), so the edit scripts, their READMEs and skills go back to charon alpha edit as on main, defaulting to the v2.0.0-rc2 image.
OisinKyne
approved these changes
Oct 21, 2026
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Merge the
gloasbranch intomainfor the Hoodi Gloas fork: charonv2.0.0-rc2and Hoodi-ready clients (Lighthousev8.3.0, Teku26.10.1, Lodestarv1.50.0, Nimbusv26.10.1, Prysmv7.3.0, Grandine3.0.0-rc.1), VCs rendering their proposer settings and builders from charon'sproposer-config.json, stateful gloas block production, builder URLs and a Sepolia env sample.main's uid 1000 data dir handover (#490, #491) is merged in: Teku and Nimbus keep starting as root and drop to uid 1000 in their gloasrun.sh.