Skip to content

v2.0.0-rc1

Pre-release
Pre-release

Choose a tag to compare

@KaloyanTanev KaloyanTanev released this 20 Oct 23:08
· 5 commits to main since this release
v2.0.0-rc1
c8f0372

v2.0.0-rc1 - 2026-10-20

Obol Logo

Warning

A new rc2 release has been published, which hardens Charon during the gloas transitions.

Warning

This is a release candidate and a required upgrade for hoodi operators only. Mainnet operators should wait for a full v2.0.0 release or newer.

This is Charon's v2.0.0-rc1 release, our first pre-release with Gloas support, ready for the upcoming Hoodi testnet hard fork. Feedback is welcome and appreciated, please use github issues or discord if you have trouble with this release.

All nodes in a cluster must run Charon v2.0.0-rc1 or newer before the Gloas fork activates on Hoodi on October 26, 2026, at 17:42:48 UTC.

Important

Please remember to update all client versions as per the minimum versions outlined in the EF's Gloas Hoodi Announcement blog.

Read the rest of the release notes for more:
Full Changelog: v1.11.1..v2.0.0-rc1

Gloas ePBS changes

Local blocks

With ePBS, a block's execution payload (the transactions and blobs) is published separately from the consensus layer block. Charon now uses this split inside the cluster: nodes run consensus on the consensus layer block and a hash of its payload only, instead of the full block with all transactions and blobs. Consensus messages stay small, so the cluster agrees on the block faster and submits it to the beacon node sooner.

The node whose beacon node built the block sends the payload to its peers after consensus, and every peer checks it against the agreed hash. The payload is then signed and published as the execution payload envelope. No configuration is needed.

P2P and direct builder blocks

Gloas has two ways to get a block from an external builder:

  • P2P builders bid over the Ethereum p2p network. Your validators advertise their fee recipient and gas limit to them by signing proposer preferences ahead of each proposal.
  • Direct builders are builder APIs that Charon requests bids from, configured with --builder-urls. Your validators authorise each of them by signing builder preferences.

Charon aggregates these signatures like any other duty, so every validator client in the cluster must sign identical data. On first start, Charon writes .charon/vc-config/proposer-config.json with your fee recipients, gas limits and builder settings. Validator clients are expected to read their proposer settings from this file. The CDVN gloas branch does this for every supported validator client: each client's run.sh converts the file into that client's own proposer config format on start.

All operators in a cluster must configure the same builders. --builder-urls, --builder-min-bid, --builder-boost-factor and --builder-max-execution-payment must be identical on every node. Charon warns and sets app_peerinfo_builder_config_mismatch if a peer's builder settings differ.

Charon only writes the file if it doesn't exist and never changes it afterwards. To change builders, edit the file and restart the validator client. An upcoming release will add a command to edit the builders in this file.

New attestation round timer

Gloas moves the attestation deadline from 4s to 3s into the slot. To make the most of the shorter window, attestations use a new round timer from the Gloas fork onwards:

Before Gloas From Gloas
Consensus starts 4s into the slot At slot start, the leader proposes as soon as its beacon node has the block
First round 1s (4s–5s) 4s (0s–4s), covering the whole block proposal interval
Following rounds 1s each 1s each (4s–5s, 5s–6s), then growing by 1s

Attestation consensus now completes as soon as the block arrives, instead of waiting for a fixed offset. If the leader is offline, there are still two more rounds before aggregation starts at 6s.

Feature

  • Add Gloas (ePBS) fork support #4324 (#4789)
    • Add payload attestation (PTC) duty (#4618,#4653,#4656,#4657,#4659,#4667,#4668,#4669)
    • Add proposer preferences duty (#4693,#4709)
    • Add self-built block proposals, agreed in consensus without the execution payload (#4717,#4718,#4719,#4725,#4771)
    • Add direct builder support with builder request auth aggregation and agreed builder URL (#4783,#4786)
    • Generate proposer-config.json for validator clients and warn on builder mismatch (#4700,#4704,#4784)
    • Start attestation consensus at slot start with a new round timer (#4769)
    • Apply the fork schedule at runtime with fork-aware duty timings (#4617,#4676,#4736)
    • Add fork readiness metrics, including Gloas-ready client versions (#4660,#4740)
    • Accept Gloas versioned attestations and optional committee index (#4671,#4672)
    • Stop validator registrations and fee recipient fetching from the Gloas fork (#4707,#4727)
    • Adopt the Gloas go-eth2-client fork (#4715)
  • Promote sse_reorg_duties to stable, re-resolving duties on chain reorgs by default (#4776)
  • Add p2p message size, read error and concurrency metrics #4679 (#4680)

Bug

  • Fix payload attestation data handling for missing blocks and payloads (#4732,#4735,#4739)
  • Fix Gloas validator API responses: SSZ, value headers and execution payload envelopes (#4731,#4733,#4765)
  • Serve the dependent root in v2 proposer duties (#4708)
  • Fix runtime fork schedule follow-ups (#4738)
  • Forward the agreed builder URL as decided (#4787)
  • Fix inclusion checker trim underflow at chain start (#4662)
  • Harden DKG ceremonies against dropped early bundles and transient p2p send failures (#4683,#4684)
  • Redact secrets in exported command lines (#4688)
  • Warn on validators with pending deposits in exit sign (#4702)
  • Label p2p handler metrics from the validated stream protocol (#4722)
  • Bind eth2http service lifetime to the caller context (#4772)

Refactor

  • Migrate SSZ encoding from fastssz to dynssz (#4652)
  • Model consensus round timers and their extensions (#4767)
  • Version payload attestation data and adopt its interfaces (#4658,#4663)
  • Remove unused MemDBV2 from core/aggsigdb (#4695)
  • Remove dead proposal topic from core/infosync (#4729)

Docs

  • Fix comment typos and grammar (#4768)

Test

Misc

  • Bump Go to 1.27 and go-libp2p to v0.50.0 (#4661,#4678,#4782,#4790)
  • Bump golangci-lint and fix nolintlint false autofix (#4703,#4741)
  • Credit PR authors in release notes (#4781)

Compatibility Matrix

This release of Charon is backwards compatible with Charon >= v1.0, though only v1.7 and newer are Fulu-ready.

The below matrix details a combination of beacon node (consensus layer) + validator clients and their corresponding versions the DV Labs team have tested with this Charon release. More validator and consensus clients will be added to this list as they are supported in our automated testing framework.

Legend

  • ✅: All duties succeed in testing
  • 🟡: All duties succeed in testing, except non-penalised aggregation duties
  • 🟠: Duties may fail for this combination
  • 🔴: One or more duties fail consistently
  • ⏳: Testing in progress
Validator 👉 Consensus 👇 Teku v26.10.1 Lighthouse v8.3.0 Lodestar v1.50.0 Nimbus v26.10.1 Prysm v7.3.0 Vouch v1.14.0-alpha.2 ❗
Teku v26.10.1 ❗ ⏳ ⏳ ⏳ ⏳ ⏳ ⏳
Lighthouse v8.3.0 ✅ ✅ ⏳ ⏳ ✅ ❗ ⏳
Lodestar v1.50.0 ⏳ ⏳ ⏳ ⏳ ⏳ ⏳
Nimbus v26.10.1 ⏳ ⏳ ⏳ ⏳ ⏳ ⏳
Prysm v7.3.0 ⏳ ⏳ ⏳ ⏳ ⏳ ⏳
Grandine v3.0.0-rc.1 ❗ 🔴 🔴 🔴 🔴 🔴 🔴

What's Changed

Contributors

@KaloyanTanev, @aly-obol, @b0a7, @obol-platform, @pinebit, @somasoil