feat(client): spawn PayloadAttestationService gated on Gloas - #1093
Conversation
|
@claude, please take a look |
|
Claude finished @shane-moore's task in 5m 49s —— View job Review
SummaryTight, well-scoped wiring change. The construction shape and arg order mirror the sibling services already in I could not independently verify the upstream LH Observations (non-blocking)
RiskEffectively zero on currently-supported networks — the gated branch is dead code wherever VerdictLGTM as a wiring-only change. None of the observations above are blocking. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## epbs #1093 +/- ##
=======================================
Coverage ? 63.90%
=======================================
Files ? 163
Lines ? 28263
Branches ? 0
=======================================
Hits ? 18061
Misses ? 10202
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Wire Lighthouse's PayloadAttestationService into client startup so locally assigned validators sign and publish PTC payload attestations. Gate the start on spec.is_gloas_scheduled() to mirror LH's validator client and avoid a perpetual idle task on networks where Gloas is not scheduled. PTC duties are already populated by the Gloas-gated poll_beacon_ptc_attesters inside the existing duties service, and sign_payload_attestation landed in sigp#1082, so this is the final wiring step. Closes sigp#1078
9e89ff6 to
a3a7c38
Compare
|
@claude, thanks for the review. Addressed: Obs 1 (no Obs 2 ( Obs 3 ( Obs 4 (no test) — Agreed; mirrors the |
|
Claude finished @shane-moore's task in 56s —— View job AcknowledgementThanks — all four are addressed and consistent with what's on the branch.
Notes on the responsesObs 1 — Storing Obs 2 — Confirmed against Obs 3 — Obs 4 — Agreed; devnet behavioral verification is the right bar for a wiring-only gated start. Nothing further from me — LGTM stands. |
jnhsigmap
left a comment
There was a problem hiding this comment.
looks good, great work on this
Problem, Evidence, and Context
Lighthouse's
PayloadAttestationServiceexists in the pinned LH but was never spawned in Anchor'sclient/, so the PTC (Payload Timeliness Committee) duty never ran. This is the final wiring step: with it, a validator holding a PTC seat under a Gloas-scheduled spec signs and publishes itsPayloadAttestationMessage.sign_payload_attestation(feat(validator_store): implement sign_payload_attestation #1082).poll_beacon_ptc_attestersin the existing duties service, so no extra duty wiring is needed.Change Overview
Construct and start LH's
PayloadAttestationServiceinClient::run, gated onspec.is_gloas_scheduled()to mirror LH's own validator client (validator_client/src/lib.rs:657). The service owns the per-slot PTC loop (fetch data at the 75% cutoff, abstain on no block, sign per validator, submit to the BN); the SSV partial-signature exchange and threshold reconstruction happen inside the existingcollect_signaturepath, invisible to the LH service.The change is one import plus one gated block.
ProposerPreferences(#1064) is left aTODO(gloas)to join the same block once implemented.Unchanged: the sign path, duty population, and every sibling service. No new types, no LH bump.
Risks, Trade-offs, and Mitigations
is_gloas_scheduled()is false wherever no Gloas fork is configured (mainnet / hoodi / holesky today), so nothing is constructed or spawned; the new path only activates under a Gloas-scheduled spec.gloas_enabled()self-gate) to avoid spawning a perpetual idle task pre-Gloas, matching LH.Validation
make cargo-fmt-check: clean.make lint(cargo clippy --workspace --tests -- -D warnings): green, zero warnings, including after rebasing onto the just-merged refactor!: gate ePBS on Ethereum Gloas fork, remove SSV Fork::CStar #1090 (Fork::CStar removal).SyncCommitteeService). Behavioral verification (the service starts and attempts PTC at the 75% cutoff under a Gloas-scheduled spec) belongs on a devnet.Rollback
Revert the single commit. No config, data, or operational impact (no-op until Gloas is scheduled).
Blockers / Dependencies
Deps #1080 and #1082 are merged. Independent of #1090 (already merged; this branch is rebased on top).