Skip to content

Add EIP: Builder Execution Requests#11760

Open
wemeetagain wants to merge 12 commits into
ethereum:masterfrom
wemeetagain:eip-builder-deposit
Open

Add EIP: Builder Execution Requests#11760
wemeetagain wants to merge 12 commits into
ethereum:masterfrom
wemeetagain:eip-builder-deposit

Conversation

@wemeetagain

Copy link
Copy Markdown
Contributor

A new EIP that gives EIP-7732 (ePBS) builders their own
execution-layer request contracts on the EIP-7685 request bus, rather than routing
builder onboarding and exit through the validator flows. Two predeploys:

Request type Contract Entrypoint Record
0x03 builder deposit (also top-up) deposit(pubkey, withdrawal_credentials, amount, signature) pubkey ++ wc ++ amount ++ signature (184 B)
0x04 builder exit exit(pubkey) source_address ++ pubkey (68 B)

Both are thin queues over a shared RequestQueue (EIP-1559-style fee, EXCESS_INHIBITOR,
end-of-block SYSTEM_ADDRESS drain), modeled on the EIP-7002/7251 request bus. Neither
performs on-chain cryptography or emits logs. Addresses, request-type bytes, and runtime
code are placeholders pending allocation and audit.

Rationale

  • Decouples builders from validators. Dedicated request types let the consensus layer
    route by type instead of inspecting withdrawal-credential prefixes, keying the validator
    and builder registries independently — which also lets a single public key be both a
    validator and a builder (a restriction this EIP removes).
  • Bounds a consensus-side DoS A builder deposit's proof-of-
    possession is verified by the consensus layer (as in EIP-7732). Delivering deposits
    through a request bus capped at MAX_REQUESTS_PER_BLOCK per block, plus the EIP-1559 fee
    on top of the 1-ETH stake, bounds the per-block verification work and the spam economics.
  • Cold-key exit. A builder's BLS key is hot (it signs bids), so exit is authorized by
    the builder's execution_address, mirroring EIP-7002's rationale for 0x01 credentials.

Draft EIP for a builder-specific deposit predeploy that verifies BLS
proof-of-possession signatures on chain via the EIP-2537 precompiles,
serving the EIP-7732 builder population. A separate top_up entrypoint
adds unverified stake to an already-registered builder.
Replace event-log delivery with the EIP-7685 request mechanism used by
EIP-7002 (withdrawals) and EIP-7251 (consolidations): two single-type
predeploys sharing a RequestQueue base, drained by a SYSTEM_ADDRESS
end-of-block system call and committed via the block requests_hash.

- BuilderDepositContract (request type 0x03): deposit() verifies the BLS
  proof-of-possession, then appends a record to its queue; no logs.
- BuilderTopUpContract (request type 0x04): unverified top_up() appends a
  record to its queue.
- No request fee: the staked value is the anti-spam gate.

BLS verification and the prior audit fixes (domain separation, sign-bit
binding, precompile gas caps) are unchanged. Dequeued records carry no
signature, since the consensus layer trusts the execution-layer check.
Tests rewritten for the queue / system-read model (14 passing). Adds
requires 7685; request-type bytes and predeploy addresses are placeholders.
…fixes

Request fee (like EIP-7002/7251): RequestQueue gains an excess/count fee
market with fake_exponential; deposit/top_up require
msg.value >= stake + fee. No EXCESS_INHIBITOR (predeploys install with
empty storage, so excess starts at the minimum fee).

Unsigned amount: the BLS proof-of-possession now commits only to the
2-field message (pubkey, withdrawal_credentials); amount_gwei is an
explicit, unsigned parameter. Signing the amount added no security (the
unverified top_up already adds unsigned stake) and would otherwise force a
signed value derived from a fee unknown at signing time. The distinct
2-field message also reinforces cross-context replay protection.

Round-2 audit fixes:
- Queue storage is now a head/tail ring over a mapping that resets both
  pointers to 0 when emptied (EIP-7002 dequeue behavior), bounding storage
  to peak in-flight depth instead of leaking a slot per request forever.
- fallback requires empty calldata, so only the system read-out / fee
  getter reach it.
- Spec: a 0x03 record for an already-registered pubkey MUST be treated as
  a top-up (credit stake, never change withdrawal credentials), making the
  replayable deposit signature harmless.
- Fixed stale entrypoint signatures in the contract header comment.

Tests: 20 passing (17 without EIP-2537), incl. fee dynamics, queue reset,
and fallback-calldata regressions. Vectors regenerated for the 2-field
signing message.
Add the SSZ container definitions BuilderDepositRequest (pubkey,
withdrawal_credentials, amount) and BuilderTopUpRequest (pubkey, amount)
to the spec, matching the EIP-7002/7251 style and tying the 88/56-byte
record serialization to what the contract appends; note the absence of a
signature/index field versus the EIP-6110 DepositRequest.

Reduce the "Consensus-layer processing of records" rules to normative
statements that reference the new objects by name; the replayability
rationale lives in Security Considerations.
Add BuilderWithdrawalContract (request type 0x05, EIP-7002-style) for builder partial withdrawals and full exits, and broaden the draft to the full builder lifecycle (renamed to "Builder Execution Requests").
Switch from fork-time installation to a presigned deployment transaction plus an EXCESS_INHIBITOR that blocks requests until the first end-of-block system call, matching EIP-7002/7251. Updates the spec, the RequestQueue reference contract, and the tests.
The builder deposit contract no longer verifies BLS; it carries the signature for the consensus layer to verify, bounded by the per-block cap. Top-up folds into the deposit request (0x03, register-or-credit) and the withdrawal/exit contract becomes exit-only (0x04), authorized by execution_address. Adds a normative "Changes to EIP-7732" section (remove the process_deposit_request and process_voluntary_exit builder branches; keep onboard_builders_from_pending_deposits for genesis). Updates the spec, contracts, and tests; deletes the BLS machinery and py_ecc fixtures.
…t precondition (review 2)

Resolves the second adversarial review of the redesigned EIP. Builder deposits reuse DOMAIN_DEPOSIT (document the benign cross-class signature interchange instead of asserting a non-existent domain separation); give the exact process_deposit_request inert-return for a 0x03-prefix deposit plus a post-fork deposit-routing transition window so in-flight pre-fork deposits are not stranded; align the exit predicate to gloas is_active_builder and document consumed-not-retried; correct the PoP message to the 3-field DepositMessage; name the EIP-7804 0x03 collision; add Spam/state-growth and Locked-funds security notes. Spec-only; contracts and tests unchanged.
…ition window (review 3)

Resolves the third adversarial review of the redesigned EIP. Require a builder first deposit to carry a 0x03-prefixed withdrawal_credentials (a consensus-layer check mirroring process_deposit_request), so a registered builder always has a well-formed execution_address and validator and builder deposits no longer cross-register; the cross-class Security note is rewritten accordingly and now records that DOMAIN_DEPOSIT is chain- and fork-agnostic. Drop the post-fork deposit-routing transition window in favour of a single deterministic cutover: the genesis snapshot onboards pending builder deposits, and from the fork onward every 0x03-credentialed validator-contract deposit is dropped (a late straggler is re-onboarded via the builder deposit contract). Document the exited-builder top-up (credited stake is non-reactivatable and sweeps to the execution_address) and the custodial-split exit standoff (a bidding operator can hold the pending balance non-zero and block the execution_address holder from exiting). Spec-only; contracts and tests unchanged.
@wemeetagain wemeetagain requested a review from eth-bot as a code owner June 3, 2026 16:38
@github-actions github-actions Bot added c-new Creates a brand new proposal s-draft This EIP is a Draft t-core labels Jun 3, 2026
@eth-bot

eth-bot commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

File EIPS/eip-8282.md

Requires 1 more review from Editors: @g11tech, @jochem-brouwer, @lightclient, @samwilsn

@eth-bot eth-bot added e-consensus Waiting on editor consensus e-review Waiting on editor to review labels Jun 3, 2026
@github-actions github-actions Bot added the w-ci Waiting on CI to pass label Jun 3, 2026
Comment thread EIPS/eip-8282.md
Comment thread EIPS/eip-draft_builder_requests.md Outdated
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

The commit ff4ff86 (as a parent of fe4d5ef) contains errors.
Please inspect the Run Summary for details.

@github-actions github-actions Bot removed the w-ci Waiting on CI to pass label Jun 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c-new Creates a brand new proposal e-consensus Waiting on editor consensus e-review Waiting on editor to review s-draft This EIP is a Draft t-core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants