·
16 commits
to develop
since this release
Immutable
release. Only release title and notes can be modified.
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_choicedump endpoint. - Beacon API: New
execution_payload,execution_payload_gossip, andhead_v2event topics (beacon-APIs #588/#590), aproposer_preferencesendpoint and SSE topic, and payload-attestation data/pool endpoints. - Performance & memory: Validator-list endpoints now stream via
ValidatorsReadOnlySeqinstead 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
PMinstead of the stalePR. Prysm already advertisedPMeverywhere 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.BatchVerifyDepositRequestSignatureswith divide-and-conquer recovery on batch verify failure. [PR] - Add
save_state_to_cold_millisecondsmetric 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_choicethat 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_gossipevent emission as per beacon-APIs#588. [PR] - Implemented EIP 8045. [PR]
- Add
execution_payloadevent 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_preferencesSSE event topic on /eth/v1/events. [PR] - REST validator client now implements
PayloadAttestationDataandSubmitPayloadAttestationagainst the beacon node/eth/v1/validator/payload_attestation_data/{slot}and/eth/v1/beacon/pool/payload_attestationsendpoints (previously returned "not implemented"). [PR] - SSZ support for GET and POST of execution payload envelope and envelope contents. [PR]
broadcast_validationquery parameter on POST execution payload envelope. [PR]- Spec-wire
WireBlindedExecutionPayloadEnvelopetypes andEth-Execution-Payload-Blinded. [PR] 202response on POST execution payload envelope when the envelope is broadcast. [PR]ProduceBlockV4returns 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_messagesteps and PTC vote checks in Gloas fork choice spec tests. [PR] - Add
head_v2event support to the beacon node event stream (beacon-APIs#590). The legacyheadevent is kept for backward compatibility. [PR]
Changed
- Replace linear scan in
BuilderIndexByPubkeywith an O(1) pubkey→index map on the state. [PR] - Update
go-libp2ptov0.44.0. [PR] - Update
go-libp2p-mplextov0.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 viaValidatorsReadOnlySeq. [PR]/eth/v1/beacon/states/{state_id}/validator_identities(JSON response): Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators viaValidatorsReadOnlySeq. [PR]/eth/v1/beacon/states/{state_id}/validator_identities(SSZ response): Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators viaValidatorsReadOnlySeq. [PR]/eth/v1/beacon/states/{state_id}/validator_count: Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators viaValidatorsReadOnlySeq. [PR]/prysm/v1/validators/head/active_set_changes: Avoid full validators list (~2.3M on mainnet) materialization by iterating over validators viaValidatorsReadOnlySeq. [PR]/healthzendpoint: 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
SignedBlockHeaderdoes not match the locally held beacon block. [PR] ActiveValidatorIndicesandActiveValidatorCount: 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) andblockChain.updateCachesPostBlockProcessing. [PR] - Avoid one interface boxing per validator in
validatorsReadOnlyValandValidatorsReadOnlySeq, and per public key inAggregateKeyFromIndicesandApplyToEveryValidator, to reduce allocations. [PR] - Adjust timing for emitting
execution_payload_availableby refactoringReceiveExecutionPayloadEnvelope. [PR] - Tracer now honors
OTEL_SERVICE_NAMEandOTEL_RESOURCE_ATTRIBUTES, and emitsservice.instance.idfrom--tracing-process-name(legacyprocess_nameattribute retained for backward compatibility). [PR] - PTC members submit payload attestations as soon as the
execution_payload_availableevent 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
VerifySignatureinstead ofcontext.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_envelopesbody shape is now selected by. [PR]- Pluralized gloas execution payload endpoint paths to match the REST naming. [PR]
- Check
shouldOverrideFCUbefore computing payload attributes insaveHeadIfNeeded, avoiding expensive part. [PR]
Fixed
- Run the
(slot, builder_index)dedup before BLS signature verification invalidateExecutionPayloadBidGossip. Duplicates of an already-seen bid now short-circuit without runningVerifySignature. [PR] - Cap Gloas data column sidecar cell count by
MaxBlobsPerBlockAtEpochat pending-queue admission, and requireKzgProofslength to matchColumn. [PR] - Fixed Gloas genesis block reconstruction so the body's
signed_execution_payload_bid.messagemirrorsstate.latest_execution_payload_bid, matching the body root committed to instate.latest_block_header. Without this, Prysm built a divergent genesis block (differentblock_root/body_rootfrom 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 initializesparent_execution_requestsso the body's SSZ hash tree root can be computed. [PR] - Correct
UpdateHeaddoc 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
DeleteHistoricalDataBeforeSlotwhen the origin block has been pruned, soOriginCheckpointBlockRootno longer returns a dangling root. [PR] - don't use statebyroot for proposer preferences gossip validation. [PR]
- Guard against nil
LatestExecutionPayloadBidandSignedExecutionPayloadBid.Messageto prevent panics in Gloas envelope processing and sync logging. [PR] - Use
HeadSlot()incomputePayloadWithdrawalsinstead of readings.head.slotdirectly, to avoid a data race withsetHead. [PR] - Protect
s.head.fullwrite inpostPayloadTaskswithheadLockto avoid a data race withsetHeadand concurrent readers. [PR] /prysm/v1/validators/head/active_set_changes:ActivatedValidatorIndicesnow 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.latestAncestorwhere a concurrentSaveFinalizedStatebetweenisFinalizedRootandFinalizedStatecould return a finalized state belonging to a different block root than the one requested. [PR] - Gloas: prime the engine for
current_slot+1after processing a payload envelope, instead ofenvelope.slot+1which 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_balancesandvalidator_identitiesto accept empty body and array. [PR] - Bound peer-reported
HeadSlotand only raise the peer-status score denominator from validated statuses. [PR] - Drop same-slot payload-present attestations in fork choice
ProcessAttestation, matchingvalidate_on_attestation. [PR] - Re-enforce
validate_on_attestation's same-slot index-0 rule inOnAttestation, 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]