Skip to content

v7.1.5

Latest

Choose a tag to compare

@prestonvanloon prestonvanloon released this 17 Jun 02:41
· 16 commits to develop since this release
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]
  • Adjust timing for emitting execution_payload_available by refactoring ReceiveExecutionPayloadEnvelope. [PR]
  • Tracer now honors OTEL_SERVICE_NAME and OTEL_RESOURCE_ATTRIBUTES, and emits service.instance.id from --tracing-process-name (legacy process_name attribute retained for backward compatibility). [PR]
  • PTC members submit payload attestations as soon as the execution_payload_available event fires. [PR]
  • validator client begins to call new separate endpoints for duties post gloas instead of get duties v2. [PR]
  • Gloas: request parent payload envelopes by root in parallel with parent blocks when filling pending-block gaps. [PR]
  • Thread context through envelope VerifySignature instead of context.TODO(). [PR]
  • Change Prysm client code into "PM" as per identification document. [PR]
  • GET /eth/v1/validator/execution_payload_envelope/{slot} →. [PR]
  • Stateful self-build now works end to end: the validator client fetches the blinded. [PR]
  • POST /eth/v1/beacon/execution_payload_envelopes body shape is now selected by. [PR]
    • trueSignedBlindedExecutionPayloadEnvelope (stateful — BN reconstructs. [PR]
    • falseSignedExecutionPayloadEnvelopeContents (stateless — body carries. [PR]
  • Pluralized gloas execution payload endpoint paths to match the REST naming. [PR]
  • Check shouldOverrideFCU before computing payload attributes in saveHeadIfNeeded, avoiding expensive part. [PR]

Fixed

  • Run the (slot, builder_index) dedup before BLS signature verification in validateExecutionPayloadBidGossip. Duplicates of an already-seen bid now short-circuit without running VerifySignature. [PR]
  • Cap Gloas data column sidecar cell count by MaxBlobsPerBlockAtEpoch at pending-queue admission, and require KzgProofs length to match Column. [PR]
  • Fixed Gloas genesis block reconstruction so the body's signed_execution_payload_bid.message mirrors state.latest_execution_payload_bid, matching the body root committed to in state.latest_block_header. Without this, Prysm built a divergent genesis block (different block_root / body_root from other clients) and the validator client failed to propose at slot 1 with "parent root … does not match the latest block header signing root in state". Also initializes parent_execution_requests so the body's SSZ hash tree root can be computed. [PR]
  • Correct UpdateHead doc comment: callers must not hold the forkchoice lock; the function acquires it internally. [PR]
  • Avoid mutating the live head state when computing the Gloas late payload attribute. [PR]
  • Clear the origin checkpoint block root pointer in DeleteHistoricalDataBeforeSlot when the origin block has been pruned, so OriginCheckpointBlockRoot no longer returns a dangling root. [PR]
  • don't use statebyroot for proposer preferences gossip validation. [PR]
  • Guard against nil LatestExecutionPayloadBid and SignedExecutionPayloadBid.Message to prevent panics in Gloas envelope processing and sync logging. [PR]
  • Use HeadSlot() in computePayloadWithdrawals instead of reading s.head.slot directly, to avoid a data race with setHead. [PR]
  • Protect s.head.full write in postPayloadTasks with headLock to avoid a data race with setHead and concurrent readers. [PR]
  • /prysm/v1/validators/head/active_set_changes: ActivatedValidatorIndices now returns only validators activated in the requested epoch (previously it returned all active validators). [PR]
  • Removed unneeded parameter. [PR]
  • Match gossip subnet topics exactly so an attestation, blob, or sync committee message cannot be accepted on a wrong subnet whose topic shares a prefix. [PR]
  • Verify attestation BLS signatures in the beacon API submission path before adding them to the pool. [PR]
  • Fixed honest reorg feature in Gloas. [PR]
  • fixed a TOCTOU race in stategen.latestAncestor where a concurrent SaveFinalizedState between isFinalizedRoot and FinalizedState could return a finalized state belonging to a different block root than the one requested. [PR]
  • Gloas: prime the engine for current_slot+1 after processing a payload envelope, instead of envelope.slot+1 which is stale when the payload arrives late. [PR]
  • Reject and penalize gossip beacon blocks with an out-of-range proposer index. [PR]
  • Fix concurrent map iteration and write fatal in the data-column/blob data-availability wait by logging the slot-end warning from the wait loop instead of a timer goroutine. [PR]
  • Reclaim per-peer RPC rate-limiter leaky buckets on disconnect to prevent unbounded memory growth from connection churn. [PR]
  • Fix POST /eth/v1/beacon/states/{state_id}/validator_balances and validator_identities to accept empty body and array. [PR]
  • Bound peer-reported HeadSlot and only raise the peer-status score denominator from validated statuses. [PR]
  • Drop same-slot payload-present attestations in fork choice ProcessAttestation, matching validate_on_attestation. [PR]
  • Re-enforce validate_on_attestation's same-slot index-0 rule in OnAttestation, so pool and pending-queue attestation replays cannot credit a same-slot payload-present vote to the full node. [PR]
  • Only send a PTC attestation if the current slot's block has canonical shuffling. [PR]
  • Validate data-column sidecar column/commitment/proof counts against the per-slot blob limit when fetching sidecars by range or by root. [PR]