Repository navigation
feat: eip-8025 - #10384
Draft
spiral-ladder wants to merge 20 commits into
Draft
feat: eip-8025#10384spiral-ladder wants to merge 20 commits into
spiral-ladder wants to merge 20 commits into
Conversation
Adds the eip8025 SSZ namespace (ProofData, ProofType, PublicInput, ExecutionProof, ExecutionProofEnvelope, SignedExecutionProofEnvelope), MAX_PROOF_SIZE, STATELESS_INPUT_SCHEMA_ID, DOMAIN_EXECUTION_PROOF and MAX_SIGNED_EXECUTION_PROOF_ENVELOPE_SIZE, the envelope signature set, a ProofEngine interface with a noop default, the per-block proof cache (spec Store.execution_proofs plus the Seen dedup sets) and validate_execution_proof_gossip as validateGossipExecutionProof. Gossip topic wiring, ENR eproof, the API and the lodestar-z backed engine follow in later commits.
…m over the beacon API Adds NativeProofEngine over the lodestar-z ere verifier (loaded at runtime, selected by --chain.executionProofVerifiers <proofType>:<zkvm>:<programVkPath>), POST /eth/v1/beacon/execution_proofs (beacon-APIs#660), network.publishExecutionProof, verifier metrics, and a discovery preference for eproof peers when this node is execution proof-aware.
Member
Author
|
pretty big PR, progressively splitting this up for reviewability |
wemeetagain
pushed a commit
that referenced
this pull request
Oct 14, 2026
**Motivation** extracted from #10384 for reviewability implements the ssz types for eip-8025 See spec: https://github.com/ethereum/consensus-specs/blob/e42b24931bd08e638016e02b5e63ede3d463cfff/specs/_features/eip8025/beacon-chain.md **Description** Adds the EIP-8025 SSZ types as a standalone change: - ProofData, ProofType, PublicInput, ExecutionProof, ExecutionProofEnvelope, and SignedExecutionProofEnvelope. - Progressive SSZ merkleization for proof data and public input. - Type exports and constants for the 4 MiB proof limit, public-input schema, and signed-envelope size. - Tests for merkleization, size limits, public-input serialization, and JSON round trips. **AI Assistance Disclosure** sol 6.1
Use the exact lodestar-z verifier commit directly from NativeProofEngine and update the node startup caller. Preserve the ProofEngine API, serialized public-input contract, result metrics, and timer cleanup. Align proof construction with the merged bigint chainId type. Add real native verification and metrics regressions, an explicit pinned fixture downloader, ignored fixture data, and CI setup. Bound the entire download, including its response body. The raw verification helper is shared by the production engine and the generic ere fixture tests, without adding a second engine class.
Follow the separate Vitest project pattern used by spec and compliance suites. Move the fixture-dependent native tests out of the default unit project and add pnpm test:8025 at the root and beacon-node package. Keep ordinary EIP-8025 unit tests in test:unit without fixture downloads. Give the native suite its own CI job and document the explicit download step. Use eip8025 as the internal project name because the CLI parses a numeric-only project selector as a number. Verify 123 targeted unit tests with fixtures absent, all 14 native tests from both working directories, missing-fixture errors, type checks, lint, formatting, and frozen install.
Contributor
Performance Report🚀🚀 Significant benchmark improvement detected
Full benchmark results
|
consensus-specs #5762 fixes ProofType 1..7 to one guest program, zkVM and verification key digest each, and makes all seven supported. Move the table into @lodestar/params, derive the zkVM from the proof type instead of the CLI, and check the configured key's SHA-256 against the table when the native engine registers it. Gossip now REJECTs only unassigned types; an assigned type this node holds no key for is IGNOREd, since it can be neither confirmed nor refuted. The ere fixture tests register with the binding directly because their keys are not spec assignments.
… Sepolia setup The spec table's key digests are the ere-guests v0.17.0 keys, while Sepolia provers (zkboost v0.19.1) sign for ere-guests v0.19.0 keys and five proof types the spec has not assigned. Accept <proofType>:<zkvm>:<verificationKeyPath> to assign a type explicitly, skipping the table and its digest check, and treat explicitly assigned types as supported on gossip. Add a run guide with the Sepolia key files per proof type.
…tive engine Download zkboost v0.19.1's stateless-validator fixture proofs and the ere-guests v0.19.0 keys they verify against next to ere's own fixtures, and run them through NativeProofEngine with explicit proof type assignments. Pin ere's fixtures to the v0.19.6 tag the next lodestar-z verifier is built from; the test:8025 project stays red until the catalog follows.
The provers active on Sepolia run eth-act/lighthouse with the ERE v0.17.2 verifier and zkboost 0.12.0 on the ere-guests v0.17.0 keys, which are the spec digests, so types 1 to 7 go through the digest-checked form and only the zkboost v0.19.1 additions (types 8 to 12) are assigned explicitly.
Covers building the branch, building lodestar-z with the ERE v0.19.6 verifier until a release carries it and why the whole pnpm store entry must be replaced, fetching both key generations, the start command, how to check proof topic peers and verify counters, peering with outbound-only provers, and the failure modes seen while bringing nodes up on a VPN host and on a public Linux host.
With the ERE v0.19.2 verifier of lodestar-z 2.2.0, CI verified the OpenVM and SP1 proofs from the v0.19.6 provers and failed only the ZisK ones, so the notes now blame ZisK release skew instead of SP1 and ZisK alike.
…proofs The proofs on Sepolia commit to hash_tree_root(NewPayloadRequest) as the execution-specs stateless validator computes it: a plain container whose versioned_hashes is a ProgressiveList, which ere-guests, zkboost and eth-act/lighthouse share. The consensus spec hashes a ProgressiveContainer over the bounded Deneb list, so every live proof failed with public_input_mismatch. Derive both roots from the imported payload, let the engine accept a proof that proves either, and report which convention matched on the verify result metric. The Lighthouse unit-test vector for an empty Gloas payload pins the execution-specs root.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
implements eip-8025, this should replace our optional proofs branch which implements an outdated spec
Description
WIP
AI Assistance Disclosure
Planning, implementation by fable
Cross-checked with sol 6.1 orchestration