Repository navigation
cl: align Gloas consensus and APIs with v1.7.0-beta.2 - #23845
Conversation
fb49d9a to
824eaba
Compare
420279a to
dc1ea69
Compare
0672c82 to
f13aae0
Compare
f779182 to
ef8a611
Compare
|
Three things to delete, one to move.
Not a finding, a fragility: |
|
Addressed the review feedback in
I retained the custom parent-exit coordinator instead of replacing it wholesale with The final delta passes the three affected package suites, focused race tests, |
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The broad consensus, fork-choice, recovery, and concurrency changes require final human review despite extensive targeted coverage.
Review effort: Balanced
Findings: None
What changed in this PR
Aligns Caplin’s Gloas implementation with consensus-specs v1.7.0-beta.0 and strengthens payload-envelope recovery and voluntary-exit handling.
Changes:
- Updates Gloas transition, fork-choice, proposer preference, bid, and attestation behavior.
- Adds checkpoint API envelope recovery and persisted-envelope revalidation.
- Hardens voluntary-exit retry, deduplication, publication, and pruning logic.
| File | Description |
|---|---|
test-fixtures.json |
Updates the consensus fixture archive to beta.0. |
cmd/utils/flags.go |
Propagates integrated checkpoint URLs. |
cmd/caplin/main.go |
Passes checkpoint URLs to standalone Caplin. |
cmd/caplin/caplincli/config.go |
Stores standalone checkpoint URLs. |
cl/transition/machine/machine.go |
Updates the payload-bid processor interface. |
cl/transition/machine/block.go |
Uses the parent header slot during processing. |
cl/transition/machine/block_gloas_test.go |
Tests parent-slot propagation. |
cl/transition/impl/eth2/operations.go |
Aligns bid and parent-payload transitions. |
cl/transition/impl/eth2/operations_gloas_test.go |
Tests parent-header settlement behavior. |
cl/spectest/consensus_tests/operations.go |
Aligns operation fixture processing. |
cl/spectest/consensus_tests/operations_test.go |
Tests spectest parent-slot selection. |
cl/pool/operations_pool.go |
Adds persistent voluntary-exit identities. |
cl/pool/operations_pool_test.go |
Tests exit identity retention and pruning. |
cl/pool/operation_pool.go |
Adds synchronized identity and pruning support. |
cl/phase1/stages/gloas_payload_test.go |
Tests persisted anchor-envelope handling. |
cl/phase1/stages/clstages.go |
Configures checkpoint API recovery endpoints. |
cl/phase1/stages/chain_tip_sync.go |
Adds bounded HTTP/P2P envelope recovery. |
cl/phase1/stages/chain_tip_sync_test.go |
Covers recovery, validation, and concurrency. |
cl/phase1/network/services/voluntary_exit_service.go |
Hardens exit validation and retries. |
cl/phase1/network/services/voluntary_exit_service_test.go |
Covers timing, eviction, and retry cases. |
cl/phase1/network/services/proposer_preferences_service.go |
Enforces Gloas boundary and shuffling rules. |
cl/phase1/network/services/proposer_preferences_service_test.go |
Tests fork-boundary and dependent-slot behavior. |
cl/phase1/network/services/payload_attestation_service.go |
Uses the shared gossip clock allowance. |
cl/phase1/network/services/payload_attestation_service_test.go |
Updates clock-boundary tests. |
cl/phase1/network/services/execution_payload_bid_service.go |
Strengthens bid and parent-exit validation. |
cl/phase1/network/services/execution_payload_bid_service_test.go |
Tests bid validation, caching, and concurrency. |
cl/phase1/network/services/execution_payload_bid_fork_test.go |
Tests the Fulu-to-Gloas boundary. |
cl/phase1/network/beacon_downloader.go |
Adds validated beacon API URL handling. |
cl/phase1/network/beacon_downloader_test.go |
Tests URL normalization and rejection. |
cl/phase1/network/backward_beacon_downloader.go |
Reuses validated API URL construction. |
cl/phase1/forkchoice/on_execution_payload.go |
Revalidates persisted envelopes lacking status. |
cl/phase1/forkchoice/on_execution_payload_test.go |
Tests persisted-envelope EL validation. |
cl/phase1/forkchoice/forkchoice.go |
Initializes anchor PTC votes as uncast. |
cl/phase1/forkchoice/forkchoice_test.go |
Tests uncast anchor votes. |
cl/clparams/config.go |
Adds checkpoint URLs to Caplin configuration. |
cl/beacon/handler/pool.go |
Makes exit publication failures observable and retryable. |
cl/beacon/handler/pool_test.go |
Tests exit API validation and publication retries. |
cl/beacon/handler/handler.go |
Adds publication deduplication state. |
cl/beacon/handler/epbs_test.go |
Tests proposer preferences at the fork boundary. |
cl/beacon/handler/block_production.go |
Uses the header slot for attestation rewards. |
cl/beacon/handler/block_production_test.go |
Tests Gloas reward parent-slot selection. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
ac1c5b7 to
676f577
Compare
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
It changes consensus-critical transitions, fork choice, gossip validation, persistence behavior, and network protocol handling across many interacting paths.
Review effort: Balanced
Findings: 1
Resolved since last review (2)
|
Updated #23845 at The remaining in-scope review items are addressed:
Local validation on the rewritten head:
The PR description now records the new base/head and the remaining deferred risks. Fresh CI is running on the rewritten head. |
yperbasis
left a comment
There was a problem hiding this comment.
Re-reviewed at 676f5778ae. The range-scan and stale-head peer-ban findings are fixed. Requesting changes for the remaining REST regression below.
Validation: all ten affected package suites and focused race tests passed. The focused REST regression test passes on base 1ca363730a and fails on this head.
There was a problem hiding this comment.
Approving at 86f9315cdb. The open items from both earlier rounds and from the ByRange comment are fixed and covered by tests; CI and local package plus race runs are green.
Residual notes, none blocking:
- REST submissions of a wall-clock-valid exit still get a 400 in the epoch-boundary window before the first block of the epoch is imported (
cl/phase1/network/services/voluntary_exit_service.go:156and:166). Stricter than the pre-PR wall-clock check; a validator client retries, so a nit. - Tip-inclusive ByRange requests still fail closed while the canonical index lags the live head; historical ranges now work during that window.
- The PR body's "Latest main rebase" section lists head
676f5778ae. - The cold-path semaphore backpressure point stays deferred, as documented under residual risk.


Summary
Align Caplin's Gloas consensus behavior and Beacon/Builder APIs with
consensus-specsv1.7.0-beta.2, including the missing beta.0 prerequisites required to reach the beta.2 target correctly.The branch was rebased onto current
mainat1ca363730a90ef2419d98f0150e1961d1eb27d84and reduced from 51 changed files to 37. Operational hardening that is not required for beta.2 has moved to two stacked follow-ups.Main changes
post.ssz_snappyand apply per-case fork config overlaysScope split
Both follow-ups remain stacked on this branch and need rebasing onto this rewritten head before their next review.
Latest main rebase
1ca363730a90ef2419d98f0150e1961d1eb27d8486f9315cdbaf3a00d2847352dbe54a0e2b6bd50aValidation
go test ./cl/phase1/network/services ./cl/phase1/forkchoice ./cl/sentinel/handlers ./cl/beacon/handler -count=1go test -tags=spectest ./cl/spectest -run '^Test$/^mainnet$/^gloas$' -count=1make lint(two clean consecutive runs)make erigon integrationThe previous review's actionable failures and concurrency findings are covered by focused regression tests. GitHub CI passes on head
86f9315cdbaf3a00d2847352dbe54a0e2b6bd50a.Devnet 11 experiment
The retained experiment used an older head with embedded Caplin and 15 active Lighthouse validator keys. Attestations and payload attestations were observed, but no proposer duty occurred before the public endpoints and discovered peers became unavailable. The beta.2 head has not been redeployed to the stopped devnet.
Residual risk and deferred work
ResourceUnavailableethereum/consensus-specs#5563,ethereum/consensus-specs#5586, andethereum/consensus-specs#5125remains outside this delta