Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
505b458
wip
james-prysm May 20, 2026
d099a7d
allowing ssz for proposer envelope submission
james-prysm May 20, 2026
01839f4
make sure the validator side uses ssz for default for payload envelope
james-prysm May 21, 2026
25f7246
Merge branch 'develop' into rest-gloas-validation
james-prysm May 21, 2026
b644330
fixing proto gen
james-prysm May 21, 2026
b46ab77
changelog
james-prysm May 21, 2026
50aee36
hard error on cache miss
james-prysm May 21, 2026
a508cd3
Merge branch 'develop' into rest-gloas-validation
james-prysm May 21, 2026
a299148
fixing proto generated file
james-prysm May 21, 2026
cbbb87b
terence's comments
james-prysm May 26, 2026
9e81229
Merge branch 'develop' into rest-gloas-validation
james-prysm May 26, 2026
aebb6fe
adding header to api call + reverting unneeded fast path on state by …
james-prysm May 26, 2026
e87e9c3
require check against head state as this is submission path
james-prysm May 26, 2026
9ddc67e
Merge branch 'develop' into rest-gloas-validation
james-prysm May 26, 2026
76bdd01
fix test
james-prysm May 26, 2026
f774a0e
commenting gossip default as a todo for another pr
james-prysm May 26, 2026
6daf544
gaz
james-prysm May 26, 2026
969294f
Merge branch 'develop' into rest-gloas-validation
james-prysm May 26, 2026
fb3b1c0
Merge branch 'develop' into rest-gloas-validation
james-prysm May 27, 2026
80b8ccf
Update handlers_gloas.go
james-prysm May 27, 2026
cfca674
gofmt
james-prysm May 27, 2026
02d55e2
fixing tests
james-prysm May 27, 2026
7df1423
based on latest changes in https://github.com/ethereum/beacon-APIs/pu…
james-prysm May 28, 2026
f55d283
fixing tracing add skip lint
james-prysm May 28, 2026
f641f7d
fixing security flag on span attribute
james-prysm May 28, 2026
75f0026
pluralizing endpoints based on https://github.com/ethereum/beacon-AP…
james-prysm May 29, 2026
c1633d7
Merge branch 'develop' into rest-gloas-validation
james-prysm May 29, 2026
0d5cb60
fixing comment
james-prysm May 29, 2026
b72deaa
self review matching recent pr updates to include blinded execution p…
james-prysm May 29, 2026
271b0dc
linting
james-prysm May 29, 2026
86e4b7b
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 1, 2026
6dc65e8
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 8, 2026
d3323c8
Update proto/prysm/v1alpha1/gloas.proto
james-prysm Jun 8, 2026
432041d
jun's feedback
james-prysm Jun 8, 2026
c957444
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 8, 2026
7b0affd
missed proto update
james-prysm Jun 8, 2026
5a7c178
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 9, 2026
9cc939b
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 9, 2026
b95871b
addressing jun and satyajit's comments
james-prysm Jun 9, 2026
d4f0f07
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 10, 2026
02023db
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 10, 2026
8a1a608
Merge branch 'develop' into rest-gloas-validation
james-prysm Jun 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/server/structs/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ go_library(
"conversions_blob.go",
"conversions_block.go",
"conversions_block_execution.go",
"conversions_block_gloas.go",
"conversions_gloas.go",
"conversions_lightclient.go",
"conversions_state.go",
Expand Down
14 changes: 14 additions & 0 deletions api/server/structs/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -614,3 +614,17 @@ type SignedExecutionPayloadEnvelopeContents struct {
KzgProofs []string `json:"kzg_proofs"`
Blobs []string `json:"blobs"`
}

// BlindedExecutionPayloadEnvelope replaces the full payload with payload_root so its HTR matches the full envelope.
type BlindedExecutionPayloadEnvelope struct {
PayloadRoot string `json:"payload_root"`
ExecutionRequests *ExecutionRequests `json:"execution_requests"`
BuilderIndex string `json:"builder_index"`
BeaconBlockRoot string `json:"beacon_block_root"`
ParentBeaconBlockRoot string `json:"parent_beacon_block_root"`
}

type SignedBlindedExecutionPayloadEnvelope struct {
Message *BlindedExecutionPayloadEnvelope `json:"message"`
Signature string `json:"signature"`
}
165 changes: 0 additions & 165 deletions api/server/structs/conversions_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -3342,168 +3342,3 @@ func (p *PayloadAttestationMessage) ToConsensus() (*eth.PayloadAttestationMessag
Signature: sig,
}, nil
}

// ExecutionPayloadEnvelopeFromConsensus converts a proto envelope to the API struct.
func ExecutionPayloadEnvelopeFromConsensus(e *eth.ExecutionPayloadEnvelope) (*ExecutionPayloadEnvelope, error) {
payload, err := ExecutionPayloadGloasFromConsensus(e.Payload)
if err != nil {
return nil, err
}
var requests *ExecutionRequests
if e.ExecutionRequests != nil {
requests = ExecutionRequestsFromConsensus(e.ExecutionRequests)
}
return &ExecutionPayloadEnvelope{
Payload: payload,
ExecutionRequests: requests,
BuilderIndex: fmt.Sprintf("%d", e.BuilderIndex),
BeaconBlockRoot: hexutil.Encode(e.BeaconBlockRoot),
ParentBeaconBlockRoot: hexutil.Encode(e.ParentBeaconBlockRoot),
}, nil
}

// SignedExecutionPayloadEnvelopeFromConsensus converts a signed proto envelope to the API struct.
func SignedExecutionPayloadEnvelopeFromConsensus(e *eth.SignedExecutionPayloadEnvelope) (*SignedExecutionPayloadEnvelope, error) {
envelope, err := ExecutionPayloadEnvelopeFromConsensus(e.Message)
if err != nil {
return nil, err
}
return &SignedExecutionPayloadEnvelope{
Message: envelope,
Signature: hexutil.Encode(e.Signature),
}, nil
}

// BlockContentsGloasFromConsensus converts a proto Gloas block, envelope, and
// blob data to the API struct.
func BlockContentsGloasFromConsensus(block *eth.BeaconBlockGloas, envelope *eth.ExecutionPayloadEnvelope, kzgProofs [][]byte, blobs [][]byte) (*BlockContentsGloas, error) {
b, err := BeaconBlockGloasFromConsensus(block)
if err != nil {
return nil, err
}
env, err := ExecutionPayloadEnvelopeFromConsensus(envelope)
if err != nil {
return nil, err
}
encodedProofs := make([]string, len(kzgProofs))
for i, p := range kzgProofs {
encodedProofs[i] = hexutil.Encode(p)
}
encodedBlobs := make([]string, len(blobs))
for i, b := range blobs {
encodedBlobs[i] = hexutil.Encode(b)
}
return &BlockContentsGloas{
Block: b,
ExecutionPayloadEnvelope: env,
KzgProofs: encodedProofs,
Blobs: encodedBlobs,
}, nil
}

// ToConsensus converts the API struct to a proto ExecutionPayloadEnvelope.
func (e *ExecutionPayloadEnvelope) ToConsensus() (*eth.ExecutionPayloadEnvelope, error) {
if e == nil {
return nil, server.NewDecodeError(errNilValue, "ExecutionPayloadEnvelope")
}
payload, err := e.Payload.ToConsensus()
if err != nil {
return nil, server.NewDecodeError(err, "Payload")
}
var requests *enginev1.ExecutionRequests
if e.ExecutionRequests != nil {
requests, err = e.ExecutionRequests.ToConsensus()
if err != nil {
return nil, server.NewDecodeError(err, "ExecutionRequests")
}
}
builderIndex, err := strconv.ParseUint(e.BuilderIndex, 10, 64)
if err != nil {
return nil, server.NewDecodeError(err, "BuilderIndex")
}
beaconBlockRoot, err := bytesutil.DecodeHexWithLength(e.BeaconBlockRoot, fieldparams.RootLength)
if err != nil {
return nil, server.NewDecodeError(err, "BeaconBlockRoot")
}
parentBeaconBlockRoot, err := bytesutil.DecodeHexWithLength(e.ParentBeaconBlockRoot, fieldparams.RootLength)
if err != nil {
return nil, server.NewDecodeError(err, "ParentBeaconBlockRoot")
}
return &eth.ExecutionPayloadEnvelope{
Payload: payload,
ExecutionRequests: requests,
BuilderIndex: primitives.BuilderIndex(builderIndex),
BeaconBlockRoot: beaconBlockRoot,
ParentBeaconBlockRoot: parentBeaconBlockRoot,
}, nil
}

// ToConsensus converts the API struct to a proto SignedExecutionPayloadEnvelope.
func (e *SignedExecutionPayloadEnvelope) ToConsensus() (*eth.SignedExecutionPayloadEnvelope, error) {
if e == nil {
return nil, server.NewDecodeError(errNilValue, "SignedExecutionPayloadEnvelope")
}
msg, err := e.Message.ToConsensus()
if err != nil {
return nil, server.NewDecodeError(err, "Message")
}
sig, err := bytesutil.DecodeHexWithLength(e.Signature, fieldparams.BLSSignatureLength)
if err != nil {
return nil, server.NewDecodeError(err, "Signature")
}
return &eth.SignedExecutionPayloadEnvelope{
Message: msg,
Signature: sig,
}, nil
}

// SignedExecutionPayloadEnvelopeContentsFromConsensus builds the API struct
// used for stateless envelope publishing from native components.
func SignedExecutionPayloadEnvelopeContentsFromConsensus(signed *eth.SignedExecutionPayloadEnvelope, kzgProofs [][]byte, blobs [][]byte) (*SignedExecutionPayloadEnvelopeContents, error) {
signedJSON, err := SignedExecutionPayloadEnvelopeFromConsensus(signed)
if err != nil {
return nil, err
}
encodedProofs := make([]string, len(kzgProofs))
for i, p := range kzgProofs {
encodedProofs[i] = hexutil.Encode(p)
}
encodedBlobs := make([]string, len(blobs))
for i, b := range blobs {
encodedBlobs[i] = hexutil.Encode(b)
}
return &SignedExecutionPayloadEnvelopeContents{
SignedExecutionPayloadEnvelope: signedJSON,
KzgProofs: encodedProofs,
Blobs: encodedBlobs,
}, nil
}

// ToConsensus decodes the API struct into the signed envelope plus raw blob and
// KZG proof bytes used by the stateless publish path.
func (c *SignedExecutionPayloadEnvelopeContents) ToConsensus() (*eth.SignedExecutionPayloadEnvelope, [][]byte, [][]byte, error) {
if c == nil {
return nil, nil, nil, server.NewDecodeError(errNilValue, "SignedExecutionPayloadEnvelopeContents")
}
signed, err := c.SignedExecutionPayloadEnvelope.ToConsensus()
if err != nil {
return nil, nil, nil, server.NewDecodeError(err, "SignedExecutionPayloadEnvelope")
}
proofs := make([][]byte, len(c.KzgProofs))
for i, p := range c.KzgProofs {
proof, err := bytesutil.DecodeHexWithLength(p, 48)
if err != nil {
return nil, nil, nil, server.NewDecodeError(err, fmt.Sprintf("KzgProofs[%d]", i))
}
proofs[i] = proof
}
blobs := make([][]byte, len(c.Blobs))
for i, b := range c.Blobs {
blob, err := bytesutil.DecodeHexWithLength(b, fieldparams.BlobSize)
if err != nil {
return nil, nil, nil, server.NewDecodeError(err, fmt.Sprintf("Blobs[%d]", i))
}
blobs[i] = blob
}
return signed, proofs, blobs, nil
}
Loading
Loading