Skip to content
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
70 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
0c4dbbb
introducing blinded envelope to grpc to match rest
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
75ae564
Merge branch 'rest-gloas-validation' into grpc-stateless-gloas
james-prysm Jun 10, 2026
2ff2fbf
fixing test error
james-prysm Jun 10, 2026
d0cc0c4
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 10, 2026
eedc6fd
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 11, 2026
e62ddb5
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 11, 2026
e99f00f
moving conversions back to server structs
james-prysm Jun 11, 2026
ef2097f
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 12, 2026
717750f
fixing bazel
james-prysm Jun 12, 2026
57e0e87
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 12, 2026
6587b74
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 15, 2026
fdef65f
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 17, 2026
0d8573d
addressing jun's comment
james-prysm Jun 17, 2026
bbe9669
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 22, 2026
28b35a5
fixing proto
james-prysm Jun 22, 2026
fa81454
addressing jun's comments
james-prysm Jun 22, 2026
6276da1
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 22, 2026
38ef2ed
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 22, 2026
4da6bea
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 26, 2026
e9baf29
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 26, 2026
02ff815
fixing issues from merge and addressing jun's comments
james-prysm Jun 26, 2026
aca69a2
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 26, 2026
38d694b
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 26, 2026
6b12166
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 29, 2026
f321a8e
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 29, 2026
f8f93cd
make gen proto
james-prysm Jun 29, 2026
8961c3b
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 29, 2026
149eb7b
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 29, 2026
8f26cce
Merge branch 'develop' into grpc-stateless-gloas
james-prysm Jun 29, 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