Skip to content

Glamsterdam devnet 3#16763

Open
terencechain wants to merge 41 commits into
developfrom
glamsterdam-devnet-3
Open

Glamsterdam devnet 3#16763
terencechain wants to merge 41 commits into
developfrom
glamsterdam-devnet-3

Conversation

@terencechain
Copy link
Copy Markdown
Collaborator

No description provided.

potuz and others added 30 commits April 28, 2026 22:12
…ssing

Drain loop in processPendingBlocks would skip blocks whose parent payload
wasn't yet available, with no mechanism to fetch it. Now kick off a
requestPayloadEnvelope on the parent root, guarded by singleflight so
concurrent calls collapse, and retry across up to 3 shuffled best peers.
PTC committee members on the same beacon node call PayloadAttestationData
at the same instant (PTC deadline). Cache the response per slot via an
atomic.Pointer and route the miss path through singleflight so the burst
collapses to a single forkchoice read.
Include BlockAccessList from eth_getBlockByHash in the reconstructed
Gloas execution payload so unblinded blocks carry the correct BAL.
Implements consensus-specs PR 5152: restores parent_beacon_block_root on
the ExecutionPayloadEnvelope so a consumer following only the envelope
topic can issue engine_newPayload without separately fetching the beacon
block. The envelope's value is asserted against
state.latest_block_header.parent_root, and the engine call now sources
it from the envelope rather than from state.
Cherry-picked from 79c8afe (proposer-side changes only).

Move ApplyParentExecutionPayload out of computePayloadWithdrawals into a
dedicated step that runs at the start of BuildBlockParallel for Gloas
blocks with a full parent. This sequences the head-state mutation
before the consensus-field builders read from it, instead of racing
them in a goroutine.

Removes the unused parallel WaitGroup in BuildBlockParallel so
consensus-field assembly runs sequentially.
Cherry-picked from 79c8afe (proposer-side changes only).

Move ApplyParentExecutionPayload out of computePayloadWithdrawals into a
dedicated step that runs at the start of BuildBlockParallel for Gloas
blocks with a full parent. This sequences the head-state mutation
before the consensus-field builders read from it, instead of racing
them in a goroutine.

Removes the unused parallel WaitGroup in BuildBlockParallel so
consensus-field assembly runs sequentially.
…OffchainLabs/prysm into apply-parent-payload-before-block-build
…gloasGenesisBlock

When starting a gloas-at-genesis chain, SaveGenesisData calls
NewGenesisBlockForState which in turn calls gloasGenesisBlock. The
resulting block is then fed into HashTreeRoot.

On this branch gloasGenesisBlock leaves
Body.SignedExecutionPayloadBid.Message.ExecutionRequestsRoot and
Body.ParentExecutionRequests nil. Both are required containers/fields
introduced in consensus-specs v1.7.0-alpha.5 (PR #5113 for
execution_requests_root on the bid, PR #5117 for parent_execution_requests
on the body). ExecutionRequestsRoot is declared as []byte with
ssz-size:"32", so the hasher fails with

  could not get genesis block root: --.ExecutionRequestsRoot
    (bytes array does not have the correct length): expected 32 and 0 found

and the beacon node exits on startup.

Initialise ExecutionRequestsRoot to a 32-byte zero slice and
ParentExecutionRequests to an empty ExecutionRequests container so the
genesis block round-trips through HashTreeRoot.

(cherry picked from commit 4bc12b0)
The tree root node (genesis or checkpoint-sync finalized block) carries
an insertion timestamp sourced from time.Now() at process startup rather
than real network arrival time. On a beacon node that starts before
MIN_GENESIS_TIME, this timestamp lands before the genesis slot start,
making SinceSlotStart reject it with "invalid timestamp" whenever
GetProposerHead or ShouldOverrideFCU is evaluated against the genesis
head (typically at slot 1 with Gloas genesis).

The tree root is never a reorg candidate anyway (GetProposerHead bails
out when parent is nil), so short-circuit arrivedEarly to true and
arrivedAfterOrphanCheck to false instead of consulting the stale
timestamp.

(cherry picked from commit ecd31a6)
Squashed cherry-pick of PR #16651 onto glamsterdam-devnet-2.
One Info log per validator request, gated to Gloas:
- Proposer: parent root, parent slot, building on empty|full
- Attester: head root, head slot, voting empty|full|pending
  (pending when head block is from the current slot)
- PTC: block root, payload empty|full

Helps diagnose fork divergence by showing exactly what each role saw
when it requested data from the beacon node.
terencechain and others added 6 commits May 6, 2026 11:57
Move "PTC request" log into the singleflight closure so it fires once
per slot instead of once per concurrent caller, and add blockRoot,
payload, and validatorIndex fields to the "Submitted payload attestation
message" log so each per-validator submit can be correlated with what
that validator saw.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Raise the global per-peer RPC rate limit (5 -> 50 req/s, burst 10 -> 100)
and remove the downscorePeer calls in both validateRequest and
validateRawRpcRequest. Exceeding our serving cap is a flow-control
signal, not a bad-peer signal — peers that sync aggressively (Lodestar,
Lighthouse) were tripping the 5-strikes bad-responses threshold within
~2 minutes of connecting and getting disconnected.

Peers still receive ErrRateLimited and back off; they just don't
accumulate bad-responses score from rate-limit hits.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants