Skip to content

Adding Gloas changes - #28

Open
usmansaleem wants to merge 9 commits into
ethereum:mainfrom
usmansaleem:glamsterdam_changes
Open

Adding Gloas changes#28
usmansaleem wants to merge 9 commits into
ethereum:mainfrom
usmansaleem:glamsterdam_changes

Conversation

@usmansaleem

@usmansaleem usmansaleem commented May 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds five new signing types for the upcoming Gloas fork (Glamsterdam). These are client-agnostic spec additions intended for any consensus client (Teku, Lighthouse, Lodestar, Nimbus, Prysm) interacting with a remote signer such as Web3Signer.

Type Domain Signer role
EXECUTION_PAYLOAD_BID DOMAIN_BEACON_BUILDER (0x0B000000) Builder
EXECUTION_PAYLOAD_ENVELOPE DOMAIN_BEACON_BUILDER (0x0B000000) Builder
PAYLOAD_ATTESTATION_MESSAGE DOMAIN_PTC_ATTESTER (0x0C000000) PTC attester
PROPOSER_PREFERENCES DOMAIN_PROPOSER_PREFERENCES (0x0D000000) Proposer
BUILDER_REQUEST_AUTH DOMAIN_BUILDER_REQUEST_AUTH (0x0B000001) Proposer

Request shape

All five payloads are fork-versioned, following the existing BLOCK_V2 / AGGREGATE_AND_PROOF_V2 pattern:

{
  "type": "EXECUTION_PAYLOAD_BID",
  "fork_info": { ... },
  "execution_payload_bid": {
    "version": "GLOAS",
    "data": { ... }
  }
}

BUILDER_REQUEST_AUTH is the exception on fork_info: like VALIDATOR_REGISTRATION, it is signed with compute_domain(DOMAIN_BUILDER_REQUEST_AUTH) (genesis fork version, zero genesis_validators_root), so fork_info is not required. It is still version-wrapped.

Schema additions

  • ExecutionPayloadBidGloas (12 fields, incl. execution_requests_root)
  • ExecutionPayloadEnvelopeGloas (payload, execution_requests, builder_index, beacon_block_root, parent_beacon_block_root)
  • ExecutionPayloadGloas (Deneb shape + block_access_list, slot_number)
  • ExecutionRequestsGloas (deposits, withdrawals, consolidations, builder_deposits, builder_exits)
  • PayloadAttestationDataGloas (4 fields)
  • ProposerPreferencesGloas (dependent_root, proposal_slot, validator_index, fee_recipient, target_gas_limit)
  • BuilderRequestAuthGloas (data, slot)
  • BlockRequestGloas, AggregateAndProofRequestGloasGLOAS added to BLOCK_V2 and AGGREGATE_AND_PROOF_V2 (JSON shapes unchanged from Fulu; only SSZ encoding differs)

/sign endpoint's oneOf + discriminator mapping is extended with the five new types; a request example is provided for each, plus BLOCK_V2 (GLOAS) and AGGREGATE_AND_PROOF_V2 (GLOAS).

Tracks #23.

⚠️ Subject to change

Field shapes mirror the current consensus-specs gloas/ and builder-specs gloas/ containers. Other client teams should review and push back on:

  • Field names / casing.
  • Whether PROPOSER_PREFERENCES belongs in the spec at this layer or is something proposers handle locally.
  • Whether BUILDER_REQUEST_AUTH is scoped/named correctly against the current builder-specs (Gloas) BuilderRequestAuth/SignedBuilderRequestAuth containers.

Spec is published as draft and will be revised once cross-client consensus is reached.

Review history

  • @james-prysm / @JasonVranek: added BUILDER_REQUEST_AUTH per builder-specs#165 / beacon-APIs#630; synced ProposerPreferences / ExecutionPayloadEnvelope with spec.
  • @nflaig: all new payloads now version-wrapped for forward compatibility (8742bd7).
  • @james-prysm: execution_requests is now fully typed (ExecutionRequestsGloas); BLOCK_V2 and AGGREGATE_AND_PROOF_V2 accept GLOAS (8742bd7).

Note: the version/data wrapper was a breaking change relative to the earlier draft validated in Consensys-Incorporated/web3signer#1192 — that implementation has been updated to match (web3signer@27431fbc, web3signer@5670340b).

Test plan

Adds four new signing types for the Glamsterdam (ePBS) fork:

  - EXECUTION_PAYLOAD_BID — signed by builders (DOMAIN_BEACON_BUILDER, 0x0B000000)
  - EXECUTION_PAYLOAD_ENVELOPE — signed by builders (DOMAIN_BEACON_BUILDER)
  - PAYLOAD_ATTESTATION_MESSAGE — signed by PTC attesters (DOMAIN_PTC_ATTESTER, 0x0C000000)
  - PROPOSER_PREFERENCES — signed by proposers (DOMAIN_PROPOSER_PREFERENCES, 0x0D000000)

Adds matching data schemas (ExecutionPayloadBid, ExecutionPayloadEnvelope,
ExecutionPayloadGloas, PayloadAttestationData, ProposerPreferences) and wires
the new wrappers into the sign endpoint's oneOf + discriminator mapping.

Tracks ethereum#23.
@james-prysm

james-prysm commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

we need to update here, instead of bid it needs to be request auth due to ethereum/beacon-APIs#630

@JasonVranek

Copy link
Copy Markdown

Raising from ACDC today ~ the updated builder spec introduces a new proposer-signed RequestAuth -> SignedRequestAuth which is signed over DOMAIN_REQUEST_AUTH = 0x0B000001

- ProposerPreferences: add dependent_root, rename gas_limit to
  target_gas_limit (Teku ProposerPreferencesSchema, teku/pull/11xxx).
- ExecutionPayloadEnvelope: add parent_beacon_block_root (Teku
  ExecutionPayloadEnvelopeSchema).
- execution_requests: note builder_deposits/builder_exits (EIP-8282,
  Gloas execution-requests additions).
- Add BuilderRequestAuth/BuilderRequestAuthSigning + BUILDER_REQUEST_AUTH
  signing type: proposer-signed request-auth message for authenticating
  per-request builder-API calls, per builder-specs (Gloas), domain
  DOMAIN_BUILDER_REQUEST_AUTH (0x0B000001).

Addresses review feedback from @james-prysm and @JasonVranek on this PR:
the original draft only covered a builder-signed bid/envelope; the
updated builder-specs/beacon-APIs/keymanager-APIs trio (builder-specs#165,
beacon-APIs#630, keymanager-APIs#88) also requires the proposer to sign a
BuilderRequestAuth to authenticate itself to a builder, separate from and
prior to any bid.
…estAuth

Same rationale as web3signer@0da4d26a: state the genesis-domain mechanic
directly instead of comparing to the unrelated, deprecated
ValidatorRegistrationV1 flow.
Comment thread signing/schemas.yaml
@james-prysm

Copy link
Copy Markdown
Collaborator

block_v2 should support gloas too ( right now only fulu)

Comment thread signing/schemas.yaml Outdated
@usmansaleem usmansaleem linked an issue Sep 2, 2026 that may be closed by this pull request
3 tasks
Address review feedback on Glamsterdam signing types:

- Wrap all five new payloads in a version-discriminated request
  ({version: GLOAS, data}) matching BLOCK_V2 / AGGREGATE_AND_PROOF_V2,
  so future forks can evolve shapes without new type identifiers.
- Replace untyped execution_requests object with ExecutionRequestsGloas
  (deposits, withdrawals, consolidations, builder_deposits, builder_exits).
- Add GLOAS variant to BLOCK_V2 and AGGREGATE_AND_PROOF_V2.
- Add request examples for every new type and the GLOAS variants.
- Normalise byte-type descriptions to existing Bytes<N>/SSZ hexadecimal
  convention.
james-prysm
james-prysm previously approved these changes Sep 3, 2026

@james-prysm james-prysm left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me I think

@james-prysm
james-prysm dismissed their stale review September 3, 2026 17:12

actually hold on might have some feedback, still reviewing

@james-prysm james-prysm left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

never mind actually I think this is ok

pull Bot pushed a commit to Hawthorne001/prysm that referenced this pull request Sep 4, 2026
**What type of PR is this?**

 Feature


**What does this PR do? Why is it needed?**

adds the following types to web3signer

| Type | Domain | Signer role |
|---|---|---|
| `EXECUTION_PAYLOAD_ENVELOPE` | `DOMAIN_BEACON_BUILDER` (0x0B000000) |
Builder |
| `PAYLOAD_ATTESTATION_MESSAGE` | `DOMAIN_PTC_ATTESTER` (0x0C000000) |
PTC attester |
| `PROPOSER_PREFERENCES` | `DOMAIN_PROPOSER_PREFERENCES` (0x0D000000) |
Proposer |
| `BUILDER_REQUEST_AUTH` | `DOMAIN_BUILDER_REQUEST_AUTH` (0x0B000001) |
Proposer |



**Which issues(s) does this PR fix?**

implements ethereum/remote-signing-api#28

**Other notes for review**

**Acknowledgements**

- [x] I have read
[CONTRIBUTING.md](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md).
- [x] I have included a uniquely named [changelog fragment
file](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md#maintaining-changelogmd).
- [x] I have added a description with sufficient context for reviewers
to understand this PR.
- [ ] I have tested that my changes work as expected and I added a
testing plan to the PR description (if applicable).

@nflaig nflaig left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, just some minor comments

Comment thread signing/schemas.yaml Outdated
Comment thread signing/paths/sign.yaml Outdated
Comment thread signing/schemas.yaml Outdated
Comment thread signing/schemas.yaml Outdated
…t example

- Drop 'Glamsterdam'/ePBS/EIP references from schema descriptions in
  favor of 'Gloas', per nflaig review comments.
- ExecutionPayloadEnvelopeGloas description now covers proposer
  self-builds in addition to builder-signed envelopes.
- Remove spec-history note from ExecutionPayloadGloas description.
- Recompute the AGGREGATE_AND_PROOF_V2 (GLOAS) example signingRoot;
  it previously matched the Fulu/Electra value verbatim, which is
  inaccurate due to Gloas's progressive container SSZ encoding.
  Verified against Teku's AttestationGloasSchema via a throwaway
  acceptance test in web3signer.
@usmansaleem usmansaleem changed the title Adding Glamsterdam changes Adding Gloas changes Sep 14, 2026

@rolfyone rolfyone left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

nflaig added a commit to ChainSafe/lodestar that referenced this pull request Sep 14, 2026
…0071)

Aligns the external signer client with the Glamsterdam additions to the
remote signing api (ethereum/remote-signing-api#28). All new gloas
payloads are `version`-wrapped like `BLOCK_V2` and
`AGGREGATE_AND_PROOF_V2`, and the PTC signing type is named after the
message the validator produces, consistent with `ATTESTATION` and
`SYNC_COMMITTEE_MESSAGE` which also carry only the signed data.

- rename `PAYLOAD_ATTESTATION` to `PAYLOAD_ATTESTATION_MESSAGE`, body
key `payload_attestation_message`
- wrap `execution_payload_envelope`, `payload_attestation_message`,
`proposer_preferences` and `builder_request_auth` in `{version, data}`,
version is the fork at the message slot
- add web3signer e2e cases for the four signing types, skipped until the
test image supports gloas

The same request shapes are implemented in
Consensys-Incorporated/web3signer#1192.
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.

Gloas Signing Support

5 participants