Skip to content

Releases: OffchainLabs/prysm

v7.1.7

Choose a tag to compare

@prestonvanloon prestonvanloon released this 13 Jul 16:06
Immutable release. Only release title and notes can be modified.
8db5927

v7.1.7 - 2026-07-13

This patch release focuses on Beacon API interoperability, validator-client resilience, and a broad round of Gloas (ePBS) correctness and stability improvements.

Release highlights:

  • Gloas and builder APIs: Added external builder bid selection and per-builder maximum execution payments, improved payload bid and attestation validation, and strengthened missing-payload and data-column recovery paths.
  • Partial data columns: Drop messages for unsubscribed topics before SSZ decoding, preventing large partial messages for non-custodied subnets from blocking the shared gossip loop. [PR]
  • Beacon API and validator client: Added SSZ support for proposer preferences, payload attestations, and validator balances; switched REST validator clients to head_v2 with automatic legacy fallback; and added replacement hints for removed routes.
  • Resilience and failover: Re-push proposer preferences after beacon-node failover, retry failed submissions, accelerate unknown-parent recovery, and prevent startup, REST-handler, builder-registry, and peer-address edge-case failures.
  • Database startup recovery: Prevent a startup panic when the database returns a nil head block without an error; Prysm now logs the invalid head and starts fork choice from the finalized checkpoint instead. [PR]
  • Operator experience: Reduced noisy beacon-node and validator-client logs, added clearer Gloas bid-selection and envelope-publication diagnostics, documented ordered REST endpoint failover, and improved error reporting for invalid P2P IP configuration.

Added

  • Accept SSZ (application/octet-stream) request bodies on POST /eth/v1/validator/proposer_preferences, matching beacon-APIs #608. [PR]
  • Add max_execution_payment to the proposer builder config, the maximum execution-layer payment a proposer will accept from a Gloas builder. [PR]
  • Submit per-builder proposer preferences and signed request auths from the validator client ahead of Gloas proposals, and forward the matching request auth in the block request. [PR]
  • Queue payload attestations received before their beacon block and process them once the block arrives. [PR]
  • Pull execution payload bids from external builders during Gloas block production, select the best of self-build, P2P, and Builder-API bids, and submit the signed block back to the winning builder. [PR]
  • Added SSZ (application/octet-stream) response support to GET and POST /eth/v1/beacon/states/{state_id}/validator_balances (beacon-APIs #622). [PR]
  • Add a proactive request for the payload if we haven't seen it by the payload time. [PR]
  • make build [<bin>...] [flags=...]: Build Prysm binaries without Bazel. [PR]
  • make run <bin> [flags=...] [-- <args>]: Build and run a Prysm binary without Bazel. [PR]
  • Add ConnectionCounter to the REST connection provider and ConnectionGeneration to the validator client interface, exposing a monotonic counter that advances on each beacon-node fallback switch (the gRPC provider already had ConnectionCounter). [PR]
  • Respond with 410 Gone and a message naming the replacement route when a Beacon API route that was removed from the spec (e.g. GET /eth/v1/beacon/blocks/{block_id}, POST /eth/v1/beacon/pool/attestations, GET /eth/v2/validator/blocks/{slot}) is requested, instead of a bare 404 Not Found. [PR]

Changed

  • Validator client submits proposer preferences as SSZ by default, falling back to JSON if the beacon node returns 415. [PR]
  • Validator client submits payload attestations as SSZ by default, falling back to JSON if the beacon node returns 415. [PR]
  • Validator client requests payload_attestation_data as SSZ, decoding either an SSZ or JSON response. [PR]
  • Retain BuilderConfig (relays, enabled, max execution payment) when upgrading proposer settings from v1 to v2 instead of dropping it. [PR]
  • Request a block's unknown parent by root immediately on gossip arrival instead of waiting for the pending-blocks queue tick. [PR]
  • REST Validator client now subscribes to the head_v2 beacon API event by default instead of the deprecated head event. If the beacon node does not support head_v2 (it rejects the subscription with HTTP 400), the validator client automatically falls back to the legacy head event, so it keeps working against older beacon nodes with no behavior change. [PR]
  • The payload_attributes event no longer includes parent_block_number from the gloas fork onwards. [PR]
  • Document that --beacon-rest-api-provider accepts comma-separated endpoints for ordered failover. [PR]
  • Cleaned up Gloas proposer flow logs: consistent verbs, self-build builder index rendering, single bid selection line with source and gwei value, and publish duration on envelope reveal. [PR]
  • Consolidated validator client submission logs: sync committee messages, sync contributions, and payload attestations are now summarized as one info line per distinct submission content per slot (with range-compressed validator indices), and the previous per-validator success logs were downgraded to debug level. [PR]
  • Run isAggregator check concurrently in validator.subscribeToSubnets method body. [PR]
  • make gen: Cache generation inputs to skip re-generating files that are already up to date. [PR]
  • Ignore instead of reject execution payload bids whose fee recipient does not match proposer preferences. [PR]
  • Update C-KZG to v2.1.8. [PR]

Removed

  • Remove the unused top-level max_execution_payment proposer-option field in favor of the per-builder BuilderConfig.max_execution_payment. [PR]
  • Removed proposer index cache. [PR]

Fixed

  • Accept SSZ (application/octet-stream) request bodies on POST /eth/v1/beacon/pool/payload_attestations. The handler already decoded SSZ, but the route only registered JSON so SSZ submissions were rejected with 415. [PR]
  • Allow SSZ responses on GET /eth/v1/beacon/pool/payload_attestations. The handler already supported SSZ, but the route's Accept negotiation only allowed JSON, making the SSZ response unreachable. [PR]
  • Request the data column sidecars needed to validate a payload envelope when we do not already have them. [PR]
  • Ignore execution payload bids that cannot be verified against the current head state instead of rejecting them. [PR]
  • Return execution_optimistic correctly for reward APIs (block, attestation, sync committee). [PR]
  • Emit the correct parent_block_hash in the Gloas payload_attributes SSE event by carrying the exact hash sent to the engine, so it matches for a full head instead of reporting the parent's hash. [PR]
  • avoid panic when event stream request creation fails #16234. [PR]
  • Stop logging skipped payload_attributes events for past proposal slots as an ERROR ("received an event it was unable to handle") in the beacon node event stream. The errPayloadAttributeExpired skip is now excused like errNotRequested, removing high-volume noise under ePBS. The event_type log field now prints the event type (%T) instead of dumping the full event struct. [PR]
  • Fixed the attestation rewards API ideal_rewards response for Electra compounding validators with effective balances above 32 ETH. [PR]
  • Submit the signed block to the winning builder even when local block processing fails after broadcast. [PR]
  • Drop partial data column messages for unsubscribed topics before the SSZ decode so the shared gossip loop is not head-of-line-blocked. [PR]
  • Recover from nil headblock in db at startup. [PR]
  • Accept builder preference submissions without the --http-mev-relay flag, gloas builders are dialed per URL from the req...
Read more

v7.1.6

Choose a tag to compare

@prestonvanloon prestonvanloon released this 01 Jul 20:51
Immutable release. Only release title and notes can be modified.
1fc4645

v7.1.6 - 2026-07-01

This patch release contains targeted gossip-validation, sync, and operator-facing improvements, alongside continued Gloas (ePBS), PeerDAS/data-column, builder API, and performance work from the release candidate.

Release highlights:

  • Gloas and builder APIs: Continued Gloas block-production separation, stateless Gloas gRPC support, builder execution request types, builder API clients, proposer preferences, execution payload bid events, and payload-attestation handling.
  • Beacon API and operator polish: Added SSZ-QL proof and length-query support, improved event-subscription error reporting, and introduced the --postpone-shutdown-for-proposals flag to defer graceful shutdown around upcoming proposal duties.
  • PeerDAS and data columns: Improved pending-column handling, sidecar validation, RPC reconstruction paths, rebroadcast behavior, bounded availability waits for Gloas data columns, and cell-level data column dissemination via the --partial-data-columns flag.
  • Stability and performance: Reduced allocations in randomness, KZG, and fork-choice paths; bounded Engine API capability growth; fixed trusted-peer address handling; and improved sync behavior around payload requests and unavailable payloads.

To learn more about how --partial-data-columns save bandwidth by exchanging selected cells and proofs, see Prysm docs

Operators are encouraged to update to this release as soon as practical.

Added

  • Add --postpone-shutdown-for-proposals flag. When set, a graceful shutdown signal (SIGINT/SIGTERM, e.g. Ctrl-C on Linux) is postponed while a validator controlled by a connected validator client still has a block proposal duty in the current or next epoch. [PR]
  • Added optional Merkle proof support to the SSZ-QL BeaconBlock query endpoint. [PR]
  • FieldTrie: Add ProveField that returns leaf and proof for given field index. [PR]
  • Emit the execution_payload_bid event on the beacon node event stream when a builder bid is received from gossip; the topic was previously subscribable but never produced. [PR]
  • Add Gloas builder API protobuf types and the request-auth signature domain. [PR]
  • Use Partial Messages for Data Column Gossip. [PR]
  • Add the Gloas builder API HTTP client and the proposer-settings max_execution_payment field. [PR]
  • Add the SubmitBuilderPreferences validator RPC, forwarding proposer builder preferences to the configured builder and caching the per-validator max execution payment. [PR]
  • SSZ-QL: support len() queries on the BeaconState and BeaconBlock query endpoints, returning the runtime length of a List (element count) or Bitlist (bit count) as an 8-byte little-endian value. [PR]
  • Add GetExecutionPayloadBid and SubmitSignedBeaconBlock to the beacon node builder service, wrapping the Gloas builder API client and selecting the per-builder request auth. [PR]
  • Fire an execution_payload_bid event when POSTing to /eth/v1/beacon/execution_payload_bids. [PR]
  • Gloas: reject execution_payload_bid gossip when the builder version is not PAYLOAD_BUILDER_VERSION, the blob KZG commitment count exceeds the per-slot limit, or prev_randao does not match the RANDAO mix. [PR]
  • Builder execution requests (EIP-8282): builders are onboarded and exited via BuilderDepositRequest/BuilderExitRequest in the Gloas ExecutionRequests, replacing the deposit-credential and voluntary-exit onboarding paths. [PR]
  • Use the HasBlobs Engine API to quickly advertise missing cells. [PR]
  • hot state db for state diff. [PR]
  • Gossip-level validation (slot, bid consistency, builder signature) on POST /eth/v1/beacon/execution_payload_envelopes for the default and broadcast_validation=gossip levels; failures return 400 and the envelope is not broadcast. [PR]
  • broadcast_validation=gossip on the block publish endpoints now verifies the proposer signature before broadcast (previously a no-op); the default level is unchanged. [PR]
  • Gloas block production falls back to a cached P2P execution payload bid when the local EL self-build is unavailable. [PR]
  • gRPC support for the --stateless gloas self-build path (previously REST-only), serving both. [PR]
  • Add a NextSlotStateReadOnly interface to allow read-only access to the next slot state. [PR]
  • SubscribedValidatorsCache tracks attached validators via beacon_committee_subscriptions for CGC and validating() computation, but has prepare_beacon_proposer populating in case of using an old validator client. [PR]
  • validator_indices field on CommitteeSubnetsSubscribeRequest (gRPC): a flat list of attached validators, independent of the (slot, committee) subnet dedup, so the BN cache tracks every attached validator. [PR]

Changed

  • Check the network size up front when computing subnet topic scoring params, replacing the per-subnet "rate is 0" warning spam with a single debug line that includes the active and required validator counts. [PR]
  • proposer settings no longer recognize the builder option post gloas and introduces a new gas_limit option for proposer preferences, supported per validator and in the default config. [PR]
  • the builder gas_limit and the new top-level gas_limit are independent signals: relay registrations keep reading builder.gas_limit pre-gloas, while proposer preferences read only the top-level gas_limit (falling back to the default config, then the chain default). [PR]
  • gas limit keymanager endpoint continues to update gas limit on a per validator basis post gloas. [PR]
  • v1 proposer settings files remain supported without modification: a deprecation warning is logged on gloas-scheduled networks and settings are upgraded automatically in the validator client at the gloas fork, promoting builder gas limits to the top level unless one is already set. Settings already on v2 are never rewritten. [PR]
  • During initial sync, check execution payload envelope data column availability synchronously and fail if columns are missing instead of blocking. [PR]
  • Double the global per-peer RPC rate limit (5 → 10 req/s, burst 10 → 20). [PR]
  • Builder API requests and responses now use SSZ encoding by default. Use --disable-builder-ssz to fall back to JSON. [PR]
  • Deprecated --enable-builder-ssz (alias --builder-ssz); SSZ is now the default for builder setups, so the flag is a no-op. [PR]
  • Optimize deterministic randomness helpers to reduce runtime overhead and allocations in crypto/random. [PR]
  • Update consensus spec tests to v1.7.0-alpha.11, aligning Gloas with the release: split ExecutionRequests into a Gloas-specific ExecutionRequestsGloas (with builder requests) leaving Electra/Fulu at three fields, add BuilderPendingPayment.proposer_index, validate execution payload bids against state.slot/PAYLOAD_BUILDER_VERSION, and set MAX_BUILDER_DEPOSIT_REQUESTS_PER_PAYLOAD to 256. [PR]
  • Remove the unused builder deposit-signature prefetch path (DepositSig cache, prefetchDepositSignatures, and BatchVerifyDepositRequestSignatures), dead since Gloas stopped onboarding builders via the validator deposit path. [PR]
  • Batch-verify builder deposit request signatures in ProcessBuilderDepositRequests instead of one BLS verification per request. [PR]
  • Split Gloas and pre-Gloas block production into separate buildBlockGloas and buildBlockFulu paths. [PR]
  • Avoid a redundant 128 KiB blob copy and heap allocation in the KZG batch verification path by copying each blob directly into the preallocated destination. [PR]
  • Avoid cloning a slice just to count it in the Gloas fork-choice best-descendant walk: updateBestDescendantConsensusNode and tips now use a hasConsensusChildren helper instead of len(allConsensusChildren(...)), removing a per-node heap allocation. [PR]
  • CGC and `validating(...
Read more

v7.1.5

Choose a tag to compare

@prestonvanloon prestonvanloon released this 17 Jun 02:41
Immutable release. Only release title and notes can be modified.
5498c83

v7.1.5 - 2026-06-16

This release is dominated by Gloas (ePBS) fork development, alongside broad performance and memory optimizations, additional Beacon API event and endpoint support, and a round of gossip-validation and concurrency hardening.

Release highlights:

  • Gloas (ePBS): End-to-end stateful self-build, execution payload envelope production and processing over REST/SSZ (including blinded envelopes), payload attestation (PTC) duties wired through fork choice and the validator client, execution payload bid gossip validation, EIP-8045, and a new Gloas-aware GET /eth/v2/debug/fork_choice dump endpoint.
  • Beacon API: New execution_payload, execution_payload_gossip, and head_v2 event topics (beacon-APIs #588/#590), a proposer_preferences endpoint and SSE topic, and payload-attestation data/pool endpoints.
  • Performance & memory: Validator-list endpoints now stream via ValidatorsReadOnlySeq instead of materializing all ~2.3M validators, builder lookups use an O(1) pubkey→index map, the committee cache updates asynchronously, and several allocation hot paths were trimmed.
  • Hardening: Exact gossip subnet-topic matching, BLS signature verification on the REST attestation submission path, proposer-index and data-column sidecar bounds checks, and reclaiming per-peer rate-limiter memory on disconnect.
  • Concurrency: Fixed several data races around head state and a TOCTOU in stategen, plus a concurrent map iteration fatal in the data-availability wait.
  • hdiff state storage: Snappy-compressed full-state snapshots and new save-state duration metrics and logs.
  • Dependencies: Updated to Go 1.26.4 and go-libp2p v0.44.0.
  • Client identification: The commit-hash block graffiti now uses Prysm's correct two-letter client code PM instead of the stale PR. Prysm already advertised PM everywhere else — the Engine API (engine_getClientVersionV1) and the Beacon API (GET /eth/v2/node/version) — so this only fixes the graffiti, bringing it in line with the rest of Prysm and the code registered in the Ethereum client identification spec (e.g. …GEabcdPMe4f6). The change takes effect when the graffiti info is refreshed.

There are no known security issues in this release. Operators can update at their convenience.

Added

  • github workflow to check generated go files. [PR]
  • GET /eth/v1/validator/payload_attestation_data/{slot}. [PR]
  • POST & GET /eth/v1/beacon/pool/payload_attestations. [PR]
  • Add helpers.BatchVerifyDepositRequestSignatures with divide-and-conquer recovery on batch verify failure. [PR]
  • Add save_state_to_cold_milliseconds metric and log the duration of saving a state to the DB during migration to cold. [PR]
  • snappy compression for saving full state snapshots in hdiff. [PR]
  • save state duration metrics and logs for hdiff. [PR]
  • Reject gossiped execution payload bids whose slot is not greater than the slot of their parent block. [PR]
  • Ignore gossiped payload attestations whose referenced block is not at data.slot. [PR]
  • New Gloas-aware fork-choice dump endpoint GET /eth/v2/debug/fork_choice that emits one entry per (root, payload_status) tuple (PENDING / EMPTY / FULL) and exposes PTC attester counts on the PENDING entry. [PR]
  • backfill: Log the start of the backfill at INFO level. [PR]
  • backfill: Log a periodic INFO summary of backfill progress. [PR]
  • Added execution_payload_gossip event emission as per beacon-APIs#588. [PR]
  • Implemented EIP 8045. [PR]
  • Add execution_payload event support as per beacon-APIs#588. [PR]
  • Debug log when ignoring a payload envelope whose slot is not the current slot. [PR]
  • Check that the block has the same shuffling before applying PB. [PR]
  • adding /eth/v1/validator/proposer_preferences POST endpoint. [PR]
  • adding proposer_preferences SSE event topic on /eth/v1/events. [PR]
  • REST validator client now implements PayloadAttestationData and SubmitPayloadAttestation against the beacon node /eth/v1/validator/payload_attestation_data/{slot} and /eth/v1/beacon/pool/payload_attestations endpoints (previously returned "not implemented"). [PR]
  • SSZ support for GET and POST of execution payload envelope and envelope contents. [PR]
  • broadcast_validation query parameter on POST execution payload envelope. [PR]
  • Spec-wire WireBlindedExecutionPayloadEnvelope types and Eth-Execution-Payload-Blinded. [PR]
  • 202 response on POST execution payload envelope when the envelope is broadcast. [PR]
  • ProduceBlockV4 returns only the beacon block when the produced block uses an. [PR]
  • Cache deposit request signature verdicts keyed by execution requests root. [PR]
  • Hook up payload_attestation_message steps and PTC vote checks in Gloas fork choice spec tests. [PR]
  • Add head_v2 event support to the beacon node event stream (beacon-APIs#590). The legacy head event is kept for backward compatibility. [PR]

Changed

  • Replace linear scan in BuilderIndexByPubkey with an O(1) pubkey→index map on the state. [PR]
  • Update go-libp2p to v0.44.0. [PR]
  • Update go-libp2p-mplex to v0.11.0. [PR]
  • Update signature batch. [PR]
  • /eth/v1/beacon/states/{state_id}/validators: Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators via ValidatorsReadOnlySeq. [PR]
  • /eth/v1/beacon/states/{state_id}/validator_identities (JSON response): Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators via ValidatorsReadOnlySeq. [PR]
  • /eth/v1/beacon/states/{state_id}/validator_identities (SSZ response): Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators via ValidatorsReadOnlySeq. [PR]
  • /eth/v1/beacon/states/{state_id}/validator_count: Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators via ValidatorsReadOnlySeq. [PR]
  • /prysm/v1/validators/head/active_set_changes: Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators via ValidatorsReadOnlySeq. [PR]
  • /healthz endpoint: Compute an average of the goroutine count instead of an instant value. [PR]
  • Reject and downscore peers that serve Fulu data column sidecars whose embedded SignedBlockHeader does not match the locally held beacon block. [PR]
  • ActiveValidatorIndices and ActiveValidatorCount: Update committe cache async. [PR]
  • Forkchoice now tracks distinct PTC attesters via a shared voted-mask bitfield; repeat votes from the same committee index overwrite the previous vote. [PR]
  • Updated go to 1.26.4. [PR]
  • Run the data availability check concurrently with payload verification and EL validation when processing execution payload envelopes. [PR]
  • Add tracing spans to epoch processing (core.state.ProcessEpoch, fulu.ProcessEpoch), committee shuffling (helpers.ShuffledIndices), the committee cache (committeeCache.AddCommitteeShuffledList) and blockChain.updateCachesPostBlockProcessing. [PR]
  • Avoid one interface boxing per validator in validatorsReadOnlyVal and ValidatorsReadOnlySeq, and per public key in AggregateKeyFromIndices and ApplyToEveryValidator, to reduce allocations. [[PR]](https://github....
Read more

v7.1.4

Choose a tag to compare

@prestonvanloon prestonvanloon released this 22 May 19:14
Immutable release. Only release title and notes can be modified.

v7.1.4 - 2026-05-22

This is a maintenance release with significant progress on the Gloas implementation alongside important production fixes and performance improvements. There are no known security issues in this release. Operators may update at their convenience.

Release highlights:

  • Gloas fork progress: PTC (payload timeliness committee) duties, payload attestation pool and gossip, proposer preferences, execution payload bid processing, builder voluntary exit handling, data column sidecar validation, observability metrics, and block proposing with P2P bids are all wired up in preparation for upcoming devnet testing.
  • Memory optimization: Validator state representation compacted from ~264 to ~128 bytes per validator, saving ~300–450 MB of heap on mainnet (~2.2M validators). This also reduces GC pressure.
  • Sync committee duties fix: Eliminated expensive state replays when computing sync committee members for the current period, which previously caused periodic CPU spikes (#16686).
  • Missed attestation fix: Newly-activated validators no longer miss their first attestation when using --enable-beacon-rest-api (#16723).
  • Monitor indices fix: Corrected head, source, and target reporting when using the --monitor-indices flag (#16801).
  • Crash fix: Resolved a nil panic in fetchOriginSidecars when the origin checkpoint block has been pruned from the DB (#16824).
  • State diffs (experimental): --enable-state-diff now supports reconstructing caches from DB via hdiff nodes. This feature is experimental and not yet recommended for production use.

Added

  • added gloas support for updated index in attestation data for gRPC and rest endpoints. [PR]
  • Add payload timeliness committee (PTC) attestation pool. [PR]
  • Add gRPC endpoints for PTC payload attestation: PayloadAttestationData and SubmitPayloadAttestation. [PR]
  • support for calling getBeaconStateV2 using pre-payload state root. [PR]
  • Added PTC duty support in DutiesV2 (ptc_slot) end-to-end, including assignment computation, role wiring, logging, and tests. [PR]
  • Validator client PTC duty actions such as signing, and publishing ptc attestations, APIs are stubbed out in this PR. [PR]
  • Add a handler for missing payloads. [PR]
  • Various modification to UpdateHead and Execution Engine paths to adapt them to Gloas. [PR]
  • replaces stub with call to grpc payload attestation apis. [PR]
  • payload_attestation_message event triggered on grpc and gossip message received. [PR]
  • Add initial Gloas observability metrics across forkchoice, blockchain, sync, payload attestation pool, validator RPC, validator client, core/gloas, and state-native. [PR]
  • gRPC endpoints for attester, proposer, and sync duties. [PR]
  • Add Gloas signed proposer preferences gossip topic, verification, cache, and P2P subscription. [PR]
  • Gloas builder voluntary exit handling logic. [PR]
  • Add gRPC endpoint SubmitSignedProposerPreferences for validators to broadcast proposer preferences. [PR]
  • Add Gloas execution payload bid gossip topic, verification, caches, and P2P subscription. [PR]
  • proposer preferences call from validator client for gloas. [PR]
  • Added support for hdiff nodes to reconstruct caches from db. Use --enable-state-diff to test this feature. [PR]
  • Use highest execution payload bid cache to select P2P bid over self-build when proposing Gloas blocks. [PR]
  • Add --disable-log-colors flag to beacon-chain and validator to suppress ANSI color codes in log output, useful when redirecting logs to a file or pipe. [PR]

Changed

  • Use InitializeFromProtoUnsafeXXX instead of InitializeFromProtoXXX when possible. [PR]
  • Performance improvement in state (MarshalSSZ): use copy() instead of byte-by-byte loop in BlockRoots, RandaoMixes, and HistoricalRoots. [PR]
  • Wire payload attestation pool into sync service and improve gossip subscriber with nil checks, structured logging, and pool insertion. [PR]
  • Implement payload attestation packing in block proposer: retrieve from pool, filter by parent slot and block root, sort deterministically, and include in Gloas blocks. [PR]
  • Remove unnecessary memory allocation while encoding in JSON at GetBeaconStateV2. [PR]
  • Removed next epoch lookahead from PTC duties. [PR]
  • Refactor Gloas data_column_sidecar gossip validation into dedicated sync and verification paths, verify against bid.blob_kzg_commitments, and dedupe by (beacon_block_root, index). [PR]
  • Return nil error when ignoring already-seen data column sidecars during gossip validation to reduce log noise. [PR]
  • Replace multi_value_slice.Slice[*ethpb.Validator] by multi_value_slice.Slice[stateutil.CompactValidator] to reduce memory usage. [PR]
  • Correct log in VerifyBlobKZGProofBatch. [PR]
  • StateByRootIfCachedNoCopy now also checks the epoch boundary state cache. [PR]
  • Use state.ReadOnlyBeaconState instead of state.BeaconState when possible. [PR]
  • gRPC for proposer preferences takes in an array in the request instead of just 1 item. [PR]
  • Include git commit hash in /eth/v1/node/version response. [PR]
  • Fix ExecutionPayloadEnvelopesByRange to only serve canonical payloads by walking the ParentBlockHash chain backward from a successor block. [PR]
  • Add ParentBlockHash field to BlindedExecutionPayloadEnvelope proto to enable the backward walk without loading full blocks. [PR]
  • Add block hash indexing for BlindedExecutionPayloadEnvelope in DB. [PR]
  • Pre-allocate validatorKeys slice in insertValidatorHashes. [PR]
  • changed grpc GetDutiesV2 to return proposer duties post fulu via the endpoint. [PR]
  • GetSyncCommitteeDuties now fetches the state at the current epoch for current and next-period requests to avoid expensive state replays. [PR]
  • getFCUArgs: skip payload attribute computation when not in regular sync, since the FCU is never sent to the engine in that case. [PR]
  • Update go-ethereum to v1.17.3. [PR]
  • pingHandler: Use service context instead of background context. [PR]
  • monitor: Move the Processed aggregated attestation log to debug. [PR]
  • Lower log level from Error to Debug when the committee cache cannot be updated in ActiveValidatorIndices. [PR]

Fixed

  • Fix file descriptor leaks in CopyFile: close both source and destination files with deferred close. [PR]
  • Fix unclosed HTTP response bodies and file descriptors in E2E test infrastructure. [PR]
  • Allow GET /eth/v1/beacon/execution_payload_envelope/{block_root} to resolve standard beacon block IDs such as slots and head, instead of requiring only a hex block root. [PR]
  • payload attestation should only need to consume on insert. [PR]
  • Fix spurious "Head changed due to attestations" log firing every tick for pre-Gloas (Fulu) blocks. [PR]
  • changed /eth/v1/beacon/execution_payload_envelope/{block_root} to /eth/v1/beacon/execution_payload_envelope/{block_id} defined in beacon apis. [PR]
  • Fix `TestProcessPendingDepo...
Read more

v7.1.3

Choose a tag to compare

@prestonvanloon prestonvanloon released this 18 Mar 17:54
Immutable release. Only release title and notes can be modified.

v7.1.3 - 2026-03-18

This release brings extensive Gloas (next fork) groundwork, a major logging infrastructure overhaul, and numerous performance optimizations across the beacon chain. A security update to go-ethereum v1.16.8 is also included. Operators are encouraged to update at their convenience.

Release highlights:

  • Logging revamp: New ephemeral debug logfile (24h retention, enabled by default), per-package loggers with CI enforcement, per-hook verbosity control (--log.vmodule), and a version banner at startup.
  • Performance: Forkchoice updates moved to background, post-Electra attestation data cached per slot, parallel data column cache warmup, reduced heap allocations in SSZ marshaling and MixInLength, and proposer preprocessing behind a feature flag.
  • Validator client: gRPC fallback now matches the REST API implementation — both connect only to fully synced nodes. The gRPC health endpoint returns an error on syncing/optimistic status.
  • Security: go-ethereum updated to v1.16.8; fixed an authentication bypass on /v2/validator/* endpoints.

There are no known security issues in this release.

Added

  • Use the head state to validate attestations for the previous epoch if head is compatible with the target checkpoint. [PR]
  • Added separate logrus hooks for handling the formatting and output of terminal logs vs log-file logs, instead of the. [PR]
  • Batch publish data columns for faster data propogation. [PR]
  • --disable-get-blobs-v2 flag. [PR]
  • Update spectests to v1.7.0-alpha.0. [PR]
  • Added basic Gloas builder support (Builder message and BeaconStateGloas builders/next_withdrawal_builder_index fields). [PR]
  • Added an ephemeral debug logfile that for beacon and validator nodes that captures debug-level logs for 24 hours. It. [PR]
  • Add a feature flag to pass spectests with low validator count. [PR]
  • Add feature flag --enable-proposer-preprocessing to process the block and verify signatures before proposing. [PR]
  • Add ProofByFieldIndex to generalize merkle proof generation for BeaconState. [PR]
  • Update spectests to v1.7.0-alpha-1. [PR]
  • Add feature flag to use hashtree instead of gohashtre. [PR]
  • Migrate to cold with the hdiff feature. [PR]
  • Adding basic fulu fork transition support for mainnet and minimal e2e tests (multi scenario is not included). [PR]
  • commitment_count_in_gossip_processed_blocks gauge metric to track the number of blob KZG commitments in processed beacon blocks. [PR]
  • Add Gloas latest execution bid processing. [PR]
  • Added shell completion support for beacon-chain and validator CLI tools. [PR]
  • add pending payments processing and quorum threshold, plus spectests and state hooks (rotate/append). [PR]
  • Add slot processing with execution payload availability updates. [PR]
  • Implement modified proposer slashing for gloas. [PR]
  • Added missing beacon config in fulu so that the presets don't go missing in /eth/v1/config/spec beacon api. [PR]
  • Close opened file in data_column.go. [PR]
  • Flag --log.vmodule to set per-package verbosity levels for logging. [PR]
  • Added a version log at startup to display the version of the build. [PR]
  • gloas block return support for /eth/v2/beacon/blocks/{block_id} and /eth/v1/beacon/blocks/{block_id}/root endpoints. [PR]
  • Add Gloas process payload attestation. [PR]
  • Initialize db with state-diff feature flag. [PR]
  • Gloas-specific timing intervals for validator attestation, aggregation, and sync duties. [PR]
  • Added new proofCollector type to ssz-query. [PR]
  • Added README for maintaining specrefs. [PR]
  • The ability to download the nightly reference tests from a specific day. [PR]
  • Set beacon node options after reading the config file. [PR]
  • Implement finalization-based eviction for CheckpointStateCache. [PR]

Changed

  • Performance improvement in ProcessConsolidationRequests: Use more performance HasPendingBalanceToWithdraw instead of PendingBalanceToWithdraw as no need to calculate full total pending balance. [PR]
  • Extend httperror analyzer to more functions. [PR]
  • Do not check block signature on state transition. [PR]
  • Notify the engine about forkchoice updates in the background. [PR]
  • Use a separate context when updating the slot cache. [PR]
  • Data column sidecars cache warmup: Process in parallel all sidecars for a given epoch. [PR]
  • Use lookahead to validate data column sidecar proposer index. [PR]
  • Summarize DEBUG log corresponding to incoming via gossip data column sidecar. [PR]
  • Added a log.go file for every important package with a logger variable containing a package field set to the package. [PR]
  • Added a CI check to ensure every important package has a log.go file with the correct package field. [PR]
  • Changed the log formatter to use this package field instead of the previous prefix field. [PR]
  • Replaced time.Sleep with require.Eventually polling in tests to fix flaky behavior caused by race conditions between goroutines and assertions. [PR]
  • changed IsHealthy check to IsReady for validator client's interpretation from /eth/v1/node/health, 206 will now return false as the node is syncing. [PR]
  • Performance improvement in state (MarshalSSZTo): use copy() instead of byte-by-byte loop which isn't required. [PR]
  • Moved verbosity settings to be configurable per hook, rather than just globally. This allows us to control the. [PR]
  • updated go ethereum to 1.16.7. [PR]
  • Use dependent root and target root to verify data column proposer index. [PR]
  • post electra we now call attestation data once per slot and use a cache for subsequent requests. [PR]
  • Avoid unnessary heap allocation while calling MixInLength. [PR]
  • Log commitments instead of indices in missingCommitError. [PR]
  • Added some defensive checks to prevent overflows in block batch requests. [PR]
  • gRPC health endpoint will now return an error on syncing or optimistic status showing that it's unavailable. [PR]
  • Sample PTC per committee to reduce allocations. [PR]
  • gRPC fallback now matches rest api implementation and will also check and connect to only synced nodes. [PR]
  • Improved node fallback logs. [PR]
  • Improved integrations with ethspecify so specrefs can be used throughout the codebase. [PR]
  • Fixed the logging issue described in #16314. [PR]

Removed

  • removed github.com/MariusVanDerWijden/FuzzyVM and github.com/MariusVanDerWijden/tx-fuzz due to lack of support post 1.16.7, only used in e2e for transaction fuzzing. [PR]
  • Remove unused delay parameter from fetchOriginDataColumnSidecars function. [PR]...
Read more

v7.1.2

Choose a tag to compare

@prestonvanloon prestonvanloon released this 07 Jan 16:51
Immutable release. Only release title and notes can be modified.
7950a24

v7.1.2 - 2026-01-07

Happy new year! This patch release is very small. The main improvement is better management of pending attestation aggregation via PR 16153.

Added

  • primitives.BuilderIndex: SSZ uint64 wrapper for builder registry indices. [PR]

Changed

  • the /eth/v2/beacon/pool/attestations and /eth/v1/beacon/pool/sync_committees now returns a 503 error if the node is still syncing, the rest api is also working in a similar process to gRPC broadcasting immediately now. [PR]
  • validateDataColumn: Remove error logs. [PR]
  • Pending aggregates: When multiple aggregated attestations only differing by the aggregator index are in the pending queue, only process one of them. [PR]

Fixed

  • Fix the missing fork version object mapping for Fulu in light client p2p. [PR]
  • Do not process slots and copy states for next epoch proposers after Fulu. [PR]

v7.1.2-rc.0

v7.1.2-rc.0 Pre-release
Pre-release

Choose a tag to compare

@prestonvanloon prestonvanloon released this 22 Dec 18:05
Immutable release. Only release title and notes can be modified.
7950a24

v7.1.2-rc.0 - 2025-12-22

Added

  • primitives.BuilderIndex: SSZ uint64 wrapper for builder registry indices. [PR]

Changed

  • the /eth/v2/beacon/pool/attestations and /eth/v1/beacon/pool/sync_committees now returns a 503 error if the node is still syncing, the rest api is also working in a similar process to gRPC broadcasting immediately now. [PR]
  • validateDataColumn: Remove error logs. [PR]
  • Pending aggregates: When multiple aggregated attestations only differing by the aggregator index are in the pending queue, only process one of them. [PR]

Fixed

  • Fix the missing fork version object mapping for Fulu in light client p2p. [PR]
  • Do not process slots and copy states for next epoch proposers after Fulu. [PR]

v7.1.1

Choose a tag to compare

@prestonvanloon prestonvanloon released this 18 Dec 16:50
Immutable release. Only release title and notes can be modified.
8191bb5

v7.1.1 - 2025-12-18

Release highlights:

  • Fixed potential deadlock scenario in data column batch verification
  • Improved processing and metrics for cells and proofs

We are aware of an issue where Prysm struggles to sync from an out of sync state. We will have another release before the end of the year to address this issue.

Our postmortem document from the December 4th mainnet issue has been published on our documentation site

Added

  • Track the dependent root of the latest finalized checkpoint in forkchoice. [PR]
  • Proposal design document to implement graffiti. Currently it is empty by default and the idea is to have it of the form GE168dPR63af. [PR]
  • Add support for detecting and logging per address reachability via libp2p AutoNAT v2. [PR]
  • Static analyzer that ensures each httputil.HandleError call is followed by a return statement. [PR]
  • Prometheus histogram cells_and_proofs_from_structured_computation_milliseconds to track computation time for cells and proofs from structured blobs. [PR]
  • Prometheus histogram get_blobs_v2_latency_milliseconds to track RPC latency for getBlobsV2 calls to the execution layer. [PR]

Changed

  • Optimise migratetocold by not doing brute force for loop. [PR]
  • e2e sync committee evaluator now skips the first slot after startup, we already skip the fork epoch for checks here, this skip only applies on startup, due to altair always from 0 and validators need to warm up. [PR]
  • Run ComputeCellsAndProofsFromFlat in parallel to improve performance when computing cells and proofs. [PR]
  • Run ComputeCellsAndProofsFromStructured in parallel to improve performance when computing cells and proofs. [PR]

Removed

  • Unnecessary copy is removed from Eth1DataHasEnoughSupport. [PR]

Fixed

  • Incorrect constructor return type #16084. [PR]
  • Fixed possible race when validating two attestations at the same time. [PR]
  • Fix missing return after version header check in SubmitAttesterSlashingsV2. [PR]
  • Fix deadlock in data column gossip KZG batch verification when a caller times out preventing result delivery. [PR]
  • Fixed replay state issue in rest api caused by attester and sync committee duties endpoints. [PR]
  • Do not error when committee has been computed correctly but updating the cache failed. [PR]
  • Prevent blocked sends to the KZG batch verifier when the caller context is already canceled, avoiding useless queueing and potential hangs. [PR]

v7.1.0

Choose a tag to compare

@prestonvanloon prestonvanloon released this 10 Dec 18:03
Immutable release. Only release title and notes can be modified.
7a70abb

v7.1.0 - 2025-12-10

This release includes several key features/fixes. If you are running v7.0.0 then you should update to v7.0.1 or later and remove the flag --disable-last-epoch-targets.

Release highlights:

  • Backfill is now supported in Fulu. Backfill from checkpoint sync now supports data columns. Run with --enable-backfill when using checkpoint sync.
  • A new node configuration to custody enough data columns to reconstruct blobs. Use flag --semi-supernode to custody at least 50% of the data columns.
  • Critical fixes in attestation processing.

A post mortem doc with full details on the mainnet attestation processing issue from December 4th is expected in the coming days.

Added

  • add fulu support to light client processing. [PR]
  • Record data column gossip KZG batch verification latency in both the pooled worker and fallback paths so the beacon_kzg_verification_data_column_batch_milliseconds histogram reflects gossip traffic, annotated with path labels to distinguish the sources. [PR]
  • Implement Gloas state. [PR]
  • Add initial configs for the state-diff feature. [PR]
  • Add kv functions for the state-diff feature. [PR]
  • Add supported version for fork versions. [PR]
  • prometheus metric gossip_attestation_verification_milliseconds to track attestation gossip topic validation latency. [PR]
  • Integrate state-diff into State(). [PR]
  • Implement Gloas fork support in consensus-types/blocks with factory methods, getters, setters, and proto handling. [PR]
  • Integrate state-diff into HasState(). [PR]
  • Added --semi-supernode flag to custody half of a super node's datacolumn requirements but allowing for reconstruction for blob retrieval. [PR]
  • Data column backfill. [PR]
  • Backfill metrics for columns: backfill_data_column_sidecar_downloaded, backfill_data_column_sidecar_downloaded_bytes, backfill_batch_columns_download_ms, backfill_batch_columns_verify_ms. [PR]
  • prometheus summary gossip_data_column_sidecar_arrival_milliseconds to track data column sidecar arrival latency since slot start. [PR]

Changed

  • Improve readability in slashing import and remove duplicated code. [PR]
  • Use dependent root instead of target when possible. [PR]
  • Changed --subscribe-all-data-subnets flag to --supernode and aliased --subscribe-all-data-subnets for existing users. [PR]
  • Use explicit slot component timing configs. [PR]
  • Downgraded log level from INFO to DEBUG on PrepareBeaconProposer updated fee recipients. [PR]
  • Change the logging behaviour of Updated fee recipients to only log count of validators at Debug level and all validator indices at Trace level. [PR]
  • Stop emitting payload attribute events during late block handling when we are not proposing the next slot. [PR]
  • Initialize the ExecutionRequests field in gossip block map. [PR]
  • Avoid redundant WithHttpEndpoint when JWT is provided. [PR]
  • Removed dead slot parameter from blobCacheEntry.filter. [PR]
  • Added log prefix to the genesis package. [PR]
  • Added log prefix to the params package. [PR]
  • WithGenesisValidatorsRoot: Use camelCase for log field param. [PR]
  • Move Origin checkpoint found in db from WARN to INFO, since it is the expected behaviour. [PR]
  • backfill metrics that changed name and/or histogram buckets: backfill_batch_time_verify -> backfill_batch_verify_ms, backfill_batch_time_waiting -> backfill_batch_waiting_ms, backfill_batch_time_roundtrip -> backfill_batch_roundtrip_ms, backfill_blocks_bytes_downloaded -> backfill_blocks_downloaded_bytes, backfill_batch_time_verify -> backfill_batch_verify_ms, backfill_batch_blocks_time_download -> backfill_batch_blocks_download_ms, backfill_batch_blobs_time_download -> backfill_batch_blobs_download_ms, backfill_blobs_bytes_downloaded -> backfill_blocks_downloaded_bytes. [PR]
  • Move the "Not enough connected peers" (for a given subnet) from WARN to DEBUG. [PR]
  • blobsDataFromStoredDataColumns: Ask the use to use the --supernode flag and shorten the error mesage. [PR]
  • Introduced flag --ignore-unviable-attestations (replaces and deprecates --disable-last-epoch-targets) to drop attestations whose target state is not viable; default remains to process them unless explicitly enabled. [PR]

Removed

  • Remove validator cross-client from end-to-end tests. [PR]
  • NUMBER_OF_COLUMNS configuration (not in the specification any more, replaced by a preset). [PR]
  • MAX_CELLS_IN_EXTENDED_MATRIX configuration (not in the specification any more). [PR]

Fixed

  • Nil check for block if it doesn't exist in the DB in fetchOriginSidecars. [PR]
  • Fix proposals progress bar count #16020. [PR]
  • Move BlockGossipReceived event to the end of gossip validation. [PR]
  • Fix state diff repetitive anchor slot bug. [PR]
  • Check the JWT secret length is exactly 256 bits (32 bytes) as per Engine API specification. [PR]
  • http_error_count now matches the other cases by listing the endpoint name rather than the actual URL requested. This improves metrics cardinality. [PR]
  • Fix array out of bounds in static analyzer. [PR]
  • fixes E2E tests to be able to start from Electra genesis fork or future forks. [PR]
  • Use head state to validate attestations for old blocks if they are compatible. [PR]

v7.0.1

Choose a tag to compare

@prestonvanloon prestonvanloon released this 08 Dec 20:09
Immutable release. Only release title and notes can be modified.

v7.0.1 - 2025-12-08

This patch release contains 4 cherry-picked changes to address the mainnet attestation processing issue from 2025-12-04. Operators are encouraged to update to this release as soon as practical. As of this release, the feature flag --disable-last-epoch-targets has been deprecated and can be safely removed from your node configuration.

A post mortem doc with full details is expected to be published later this week.

Changed

  • Move the "Not enough connected peers" (for a given subnet) from WARN to DEBUG. [PR]
  • Use dependent root instead of target when possible. [PR]
  • Introduced flag --ignore-unviable-attestations (replaces and deprecates --disable-last-epoch-targets) to drop attestations whose target state is not viable; default remains to process them unless explicitly enabled. [PR]

Fixed

  • Use head state to validate attestations for old blocks if they are compatible. [PR]