Optional execution proofs01 / 12

Optional execution proofs

EIP-8025 lets Ethereum clients verify payloads using execution proofs. Execution proof verification takes constant time and does not require the EL state.

Validation bottleneck: payload validity currently requires re-executionExecution proofs: give constant-time payload verificationStateless validation: no EL state is needed to check the proof\begin{array}{l} \textbf{Validation bottleneck:}\ \text{payload validity currently requires re-execution} \\ \textbf{Execution proofs:}\ \text{give constant-time payload verification} \\ \textbf{Stateless validation:}\ \text{no EL state is needed to check the proof} \end{array}

Payload validation pathSame block, different check
Today
Block import
Re-execute payload
Payload validity
EIP-8025
Block import
Verify proof
Stateless payload validity
No EL state
Constant-time check
Payload validity proof
Execution proof flow02 / 12

Execution proof flow

When a valid block is imported, a prover asks the proof engine for an execution proof, signs the proof, and publishes it to the network. Verifiers use the proof to check payload validity.

Block import: creates one payload proof requestProver: generates, signs, and publishes a SignedExecutionProofVerifier: checks payload validity by verifying that proof\begin{array}{l} \textbf{Block import:}\ \text{creates one payload proof request} \\ \textbf{Prover:}\ \text{generates, signs, and publishes a SignedExecutionProof} \\ \textbf{Verifier:}\ \text{checks payload validity by verifying that proof} \end{array}

Consensus specs modifications03 / 12

Consensus specs modifications

A small set of changes to the consensus specs is required to integrate execution proofs.

Active validator: validator index resolves to an active validatorDomain signature: the proof is signed by the active validator using the execution proof domainPayload validity: ProofEngine verifies the execution proof instead of re-executing the payload\begin{array}{l} \textbf{Active validator:}\ \text{validator index resolves to an active validator} \\ \textbf{Domain signature:}\ \text{the proof is signed by the active validator using the execution proof domain} \\ \textbf{Payload validity:}\ \text{ProofEngine verifies the execution proof instead of re-executing the payload} \end{array}

Proof generation lifecycle04 / 12

Proof generation lifecycle

A prover watches block events, builds the payload request, asks the proof node to prove it, signs the proof, and gossips it to the network.

Proof types05 / 12

Proof types

EIP-8025 introduces consensus-layer data types for execution proof verification, signing, and network transport.

PublicInput: binds verification to the exact payload request rootExecutionProof: carries proof type, proof data, and public inputSignedExecutionProof: adds validator index and signature\begin{array}{l} \textbf{PublicInput:}\ \text{binds verification to the exact payload request root} \\ \textbf{ExecutionProof:}\ \text{carries proof type, proof data, and public input} \\ \textbf{SignedExecutionProof:}\ \text{adds validator index and signature} \end{array}

The Proof Engine06 / 12

The Proof Engine

A proof engine is introduced to abstract execution proof generation, verification, and state tracking from the consensus layer.

CL side: notify payload and forkchoice events, request proofs, verify proofsProofEngine: hides proof-system implementation and storageRoot binding: request id matches the PublicInput payload root\begin{array}{l} \textbf{CL side:}\ \text{notify payload and forkchoice events, request proofs, verify proofs} \\ \textbf{ProofEngine:}\ \text{hides proof-system implementation and storage} \\ \textbf{Root binding:}\ \text{request id matches the PublicInput payload root} \end{array}

Execution proof networking07 / 12

Execution proof networking

EIP-8025 adds one proof gossip topic, two proof-sync protocols, a status handshake, and an ENR flag. Gossip and sync carry signed proofs; discovery and status choose peers.

Network object: SignedExecutionProof carries validator index, signature, and proofSync protocols: ByRange is slot-based; ByRoot is selector-basedPeer selection: ENR.eproof advertises capability; status returns block root, slot, and proof types\begin{array}{l} \textbf{Network object:}\ \text{SignedExecutionProof carries validator index, signature, and proof} \\ \textbf{Sync protocols:}\ \text{ByRange is slot-based; ByRoot is selector-based} \\ \textbf{Peer selection:}\ \text{ENR.eproof advertises capability; status returns block root, slot, and proof types} \end{array}

The guest program08 / 12

The guest program

The execution proof guest program performs stateless validation for one Engine API payload request.

Host: builds StatelessInput from payload request, witness, and chain configGuest: runs stateless new-payload validation with no local EL databaseOutput: StatelessValidationResult is the public result\begin{array}{l} \textbf{Host:}\ \text{builds StatelessInput from payload request, witness, and chain config} \\ \textbf{Guest:}\ \text{runs stateless new-payload validation with no local EL database} \\ \textbf{Output:}\ \text{StatelessValidationResult is the public result} \end{array}

Guest input standards09 / 12

Guest input standards

Standardizing StatelessInput and StatelessValidationResult gives every prover stack the same input/output test surface.

Input: multiple guests and provers share StatelessInputOutput: all implementations return StatelessValidationResultTest I/O: same input contract, same result contract, same cases\begin{array}{l} \textbf{Input:}\ \text{multiple guests and provers share StatelessInput} \\ \textbf{Output:}\ \text{all implementations return StatelessValidationResult} \\ \textbf{Test I/O:}\ \text{same input contract, same result contract, same cases} \end{array}

Terminology10 / 12

Terminology

Proof system: proves that a computation was performed correctlyExecution proof: proves stateless validation for one NewPayloadRequestProver: runs execution validation and generates an execution proofVerifier: checks an execution proof instead of re-executing the payloadGuest: the program whose execution is provenHost: prepares input, runs the guest, and packages the proofPrivate input: serialized StatelessInput, including the execution witnessExecution Witness: data used by the guest without verifier EL statePublic input: binds NewPayloadRequest, chain configuration, and validation resultProof node: external service that performs proof generation workProof engine: consensus-client interface to proof generation and verificationProof-aware peer: advertises support and participates for supported proof typesServer-Sent Events (SSE): long-lived streams for block and proof-completion events\begin{array}{l} \textbf{Proof system:}\ \text{proves that a computation was performed correctly} \\ \textbf{Execution proof:}\ \text{proves stateless validation for one NewPayloadRequest} \\ \textbf{Prover:}\ \text{runs execution validation and generates an execution proof} \\ \textbf{Verifier:}\ \text{checks an execution proof instead of re-executing the payload} \\ \textbf{Guest:}\ \text{the program whose execution is proven} \\ \textbf{Host:}\ \text{prepares input, runs the guest, and packages the proof} \\ \textbf{Private input:}\ \text{serialized StatelessInput, including the execution witness} \\ \textbf{Execution Witness:}\ \text{data used by the guest without verifier EL state} \\ \textbf{Public input:}\ \text{binds NewPayloadRequest, chain configuration, and validation result} \\ \textbf{Proof node:}\ \text{external service that performs proof generation work} \\ \textbf{Proof engine:}\ \text{consensus-client interface to proof generation and verification} \\ \textbf{Proof-aware peer:}\ \text{advertises support and participates for supported proof types} \\ \textbf{Server-Sent Events (SSE):}\ \text{long-lived streams for block and proof-completion events} \end{array}

11 / 12

FAQ

Frequently asked questions about this proposal. Select a question to open the answer.

Resources12 / 12

Resources

Consensus Layer

Kurtosis configsmock proofs1 GPU8 GPU

Execution Layer

General

Ethproofs GitHubgithub.com/ethproofs