Skip to content

feat: add GLOAS (Glamsterdam) signing support#1192

Draft
usmansaleem wants to merge 7 commits into
Consensys:masterfrom
usmansaleem:glamsterdam_changes
Draft

feat: add GLOAS (Glamsterdam) signing support#1192
usmansaleem wants to merge 7 commits into
Consensys:masterfrom
usmansaleem:glamsterdam_changes

Conversation

@usmansaleem
Copy link
Copy Markdown
Collaborator

Summary

Adds eth2 signing support for the upcoming Glamsterdam (ePBS) fork. Four new signing types — corresponding to the four ExternalSigner stubs in Teku (signExecutionPayloadBid, signExecutionPayloadEnvelope, signPayloadAttestationData, signProposerPreferences):

Type Domain
EXECUTION_PAYLOAD_BID BEACON_BUILDER (0x0B000000)
EXECUTION_PAYLOAD_ENVELOPE BEACON_BUILDER (0x0B000000)
PAYLOAD_ATTESTATION_MESSAGE PTC_ATTESTER (0x0C000000)
PROPOSER_PREFERENCES PROPOSER_PREFERENCES (0x0D000000)

Includes:

  • New schema POJOs under core/.../signing/eth2/schema/gloas/ (incl. ExecutionPayloadGloas extending ExecutionPayloadDeneb with block_access_list + slot_number).
  • Eth2SigningRequestBody + Eth2SignForIdentifierHandler extended with the four new cases.
  • OpenAPI: four new *Signing wrappers + four data schemas (ExecutionPayloadBid, ExecutionPayloadEnvelope, ExecutionPayloadGloas, PayloadAttestationData, ProposerPreferences) under openapi-specs/eth2/signing/.
  • Acceptance test fixtures (Eth2RequestUtils, Eth2SigningRequestBodyBuilder) updated; existing @EnumSource-parameterized BlsSigningAcceptanceTest automatically covers the new types under SpecMilestone.GLOAS.
  • Borrows the PayloadAttestationMessageSigning OpenAPI snippet from specs for glamsterdam #1159 (credit via Co-authored-by trailer).

Slashing protection intentionally not added — Teku's SlashingProtectedSigner delegates all four new methods without protection (only blocks/attestations are slashable per spec).

⚠️ Subject to change

Pinning Teku to the develop snapshot because the GLOAS signing types are still evolving since 26.4.0:

  • ExecutionPayloadBid gained a 12th field execution_requests_root.
  • ExecutionPayloadEnvelope dropped slot and state_root.
  • New ExecutionPayloadGloas payload (adds block_access_list, slot_number over Deneb).

Once Teku cuts a release that locks in these shapes, this PR should be re-pinned to that fixed version and lifted out of draft. Wire format may shift further if the upstream remote-signing-api spec (ethereum/remote-signing-api#23) lands different field names.

Test plan

  • ./gradlew spotlessApply spotlessCheck
  • ./gradlew :core:compileJava :acceptance-tests:compileTestJava
  • ./gradlew :core:test
  • Full acceptance test suite (./gradlew :acceptance-tests:acceptanceTest) — run by CI
  • Re-pin Teku to a fixed release once available
  • Cross-validate against a Teku build with the four ExternalSigner stubs implemented (Kurtosis or unit-level wire test)

Adds four new signing types for the upcoming Glamsterdam (ePBS) fork:
EXECUTION_PAYLOAD_BID, EXECUTION_PAYLOAD_ENVELOPE,
PAYLOAD_ATTESTATION_MESSAGE, and PROPOSER_PREFERENCES.

Bumps Teku to the develop snapshot as the GLOAS schemas (e.g.
ExecutionPayloadBid added execution_requests_root, ExecutionPayloadEnvelope
dropped slot/state_root, new ExecutionPayloadGloas) are still evolving
post-26.4.0. Should pin to a stable Teku version once the next release is cut.

Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 6, 2026

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.

1 participant