EIP-8025#569
Conversation
Restructure the EIP-8025 endpoints to mirror the actual reference
implementation in `eth-act/lighthouse`:
- GET path: drop the `proofs/` segment.
`/eth/v1/beacon/proofs/execution_proofs/{block_id}`
-> `/eth/v1/beacon/execution_proofs/{block_id}`
- POST path: move under `beacon/`, drop the dedicated `Prover` tag.
`/eth/v1/prover/execution_proofs`
-> `/eth/v1/beacon/execution_proofs`
- POST body: validator-signed proofs wrapped in an object, matching
lighthouse's `SubmitExecutionProofsRequest { proofs: Vec<...> }`.
Drop `ProofGenId` and `GeneratedProof` (no longer used at the HTTP
layer; proof-engine integration is internal to the EL via the
Engine API).
- Signed-proof shape: `ProverSignedExecutionProof { prover_pubkey, .. }`
-> `SignedExecutionProof { validator_index, .. }`. Lighthouse signs
proofs with the validator's BLS key and identifies the signer by
validator index, not by a separate prover pubkey.
- `proof_data` max: 300 KiB -> 400 KiB, matching `MaxProofSize` in
lighthouse and the consensus-specs PR ethereum/consensus-specs#5162.
`redocly lint` passes; `swagger-cli bundle` resolves all refs cleanly.
The rebase onto upstream/master auto-resolved beacon-node-oapi.yaml
in favor of upstream, dropping the EIP-8025 path and component
entries. Restore them so the spec resolves to the new
apis/beacon/execution_proofs/*.yaml endpoints and types/eip8025/*.yaml
components.
Also add `KiB` to wordlist.txt to fix the spellcheck failure on
types/eip8025/execution_proof.yaml ("max 400 KiB ...").
- Attribute proof verification to the proof engine (not the EE). - Replace "silently dropped" with "ignored" for SYNCING/NOT_SUPPORTED. - Clarify that get_execution_proofs returns SignedExecutionProof objects. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Distinguish "client sent something wrong" (400) from "this BN instance hasn't enabled the EIP-8025 feature" (501 Not Implemented). - Add 501 response refs to both endpoints, pointing at the existing NotImplementedError component. - Document the contract in each endpoint's description: "Beacon nodes running without an attached proof engine MUST return 501 Not Implemented." - Revert the 400 descriptions and example back to client-side-only semantics, matching the precedent set by validator/*_selections.yaml. Lighthouse code change to follow as a separate PR. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jsign
left a comment
There was a problem hiding this comment.
LGTM, just left some nits for your consideration.
| Retrieves signed execution proofs for a given block id. | ||
| Depending on `Accept` header it can be returned either as JSON or as bytes serialized by SSZ. | ||
|
|
||
| Proofs are returned as an ordered list of `SignedExecutionProof` objects signed by validators. |
There was a problem hiding this comment.
Nit: worth saying ordered by which field?
There was a problem hiding this comment.
Good catch. I decided to remove the ordered term, as it surfaces an implementation detail from the lighthouse proof engine, but the proof engine is specifically specified as implementation-dependent in the consensus specs. I have now added terminology to explicitly state that clients MUST NOT depend on the order.
| "406": | ||
| $ref: "../../../beacon-node-oapi.yaml#/components/responses/NotAcceptable" |
There was a problem hiding this comment.
Worth explaining more here or in description when this happens?
I suspect it is related to the Accept field in the request?
There was a problem hiding this comment.
You are correct its related to the Accept field. The convention in these specs across all methods is to just have a bare $ref, so I think we should maintain that standard here.
Co-authored-by: Ignacio Hagopian <jsign.uy@gmail.com>
Adds the EIP-8025 beacon-node HTTP API: a
GETfor retrieving execution proofs by block id, and aPOSTfor validators to submit signed execution proofs which the node verifies, stores, and gossips. Both endpoints live under/eth/v1/beacon/execution_proofs.Aligned with the
eth-act/lighthousereference implementation.MAX_PROOF_SIZEis 400 KiB to match the consensus-specs bump in ethereum/consensus-specs#5162.Related CL specs: ethereum/consensus-specs#5055 (refactor, merged), ethereum/consensus-specs#5162 (size bump, merged). Original CL PR: ethereum/consensus-specs#4828 (merged).