Skip to content

Conversation

@shane-moore
Copy link

Changes per spec:

Added

  • process_execution_bid
    • verify_execution_payload_header_signature
    • has_builder_withdrawal_credential
    • is_builder_withdrawal_credential

Modified

  • has_compounding_withdrawal_credential

How this works

During block processing, we will no longer be verifying execution payloads but instead execution bids. These bids were submitted by in-protocol builders, and the winning bid is included in the block by the proposer.

During verification, we perform many checks to ensure the builder who submitted the bid has enough funds to cover their bid and also that the bid is for the current slot and that the bid's parent CL and EL block hashes correspond to those from previous block known in the BeaconState.

Additionally, we will add the bid's value to the state.builder_pending_payments list.

@ethDreamer
@eserilev

!builder.slashed,
ExecutionPayloadBidInvalid::BuilderSlashed(builder_index).into()
);

Copy link
Member

Choose a reason for hiding this comment

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

hmmmm so the spec is written for clarity, not efficiency. Some of this work should be avoided if the amount is zero.

Copy link
Author

Choose a reason for hiding this comment

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

So true! def will keep that more top of mind when translating from spec to a performant code base. updated in commit 5ba3d54

// Only perform payment related checks if amount > 0
if amount > 0 {
// Verify builder is not slashed
block_verify!(
Copy link
Member

@ethDreamer ethDreamer Nov 6, 2025

Choose a reason for hiding this comment

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

The spec verifies that the builder is not slashed even on self-builds (aka verifies the proposer is not slashed). This needs to be outside the amount or this could lead to a consensus fault under the right conditions.

Copy link
Author

Choose a reason for hiding this comment

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

ah, I see! makes sense since slashed proposer could technically be selected to produce block but hasn't exited yet. and we'd want to have this assert as a guard

also probably important for invalidating blocks with 0 value bids submitted by slashed off-protocol builders. since we may go the route of allowing builder api respond with a 0 value bid and an off_protocol_bid_value, then client can use that off_protocol_bid_value during bid selection

resolved in 7db4b92

Copy link
Member

@ethDreamer ethDreamer left a comment

Choose a reason for hiding this comment

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

LGTM!

@ethDreamer ethDreamer merged commit 4dfc31c into sigp:gloas-envelope-processing Nov 6, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants