chore(misc): Aligned with the Zesu's stateless input#3255
Conversation
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR updates the rollup_spec Python reference to replace block-RLP + Besu witness inputs with Zesu-aligned “vanilla” stateless SSZ inputs (Engine API NewPayloadRequest + witness + chain config), and refactors the l2-execution path to delegate block execution to an underlying stateless engine while keeping Linea-specific policy checks and commitments in the wrapper.
Changes:
- Add SSZ schema mirroring (Amsterdam) and strict decoding for stateless inputs, including schema-id framing handling.
- Refactor l2-execution input/output plumbing to operate over
NewPayloadRequest/ExecutionPayloadtransactions and reject non-empty EIP-7685executionRequests. - Centralize fork binding to Amsterdam and update docs + prover input drafts to reflect the new witness/wire format.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| rollup_spec/stateless_input.py | Adds remerkleable SSZ containers and strict decoding for EIP-8025 stateless inputs. |
| rollup_spec/state_transition.py | Removes in-Python execution/MPT verification and defines the engine boundary interfaces/results. |
| rollup_spec/l2_execution.py | Switches l2-execution flow to consume decoded stateless inputs and delegate execution to an engine. |
| rollup_spec/block.py | Introduces Engine API request/payload dataclasses and helpers for payload transaction handling. |
| rollup_spec/fork.py | Centralizes fork selection (Amsterdam) and re-exports fork-specific execution-spec types. |
| rollup_spec/canonical_ssz.py | Adds copied consensus-layer SSZ container definitions used by the stateless-input schema. |
| rollup_spec/rollup.py | Updates fork imports and clarifies how DA block_rlps are cross-checked post-refactor. |
| rollup_spec/requirements.txt | Pins execution-specs commit for stable fork indexing and adds remerkleable. |
| rollup_spec/Readme.md | Updates specification text to describe the new l2-execution private input and wire format. |
| rollup_spec/prover_inputs/README.md | Updates logical schema documentation for stateless SSZ payload inputs and rollup extensions. |
| rollup_spec/prover_inputs/getZkRollupProof.request.json | Updates embedded explanatory comments about DA blocks vs execution inputs. |
| rollup_spec/prover_inputs/getZkL2ExecutionProof.request.json | Replaces block-RLP examples with stateless-input SSZ + rollup-extension examples. |
| "coinbase": "0x0000000000000000000000000000000000000000", | ||
| "chainId": 59144 | ||
| "coinbase": "0x0000000000000000000000000000000000000000", | ||
| "chainId": 59144 |
There was a problem hiding this comment.
Before I forget, we have extra fields that we use to disable/enable circuits depending on the environment. This is the allowedCircuitID.
There was a problem hiding this comment.
I added it as a number to the logical schema and to the readme
AlexandreBelling
left a comment
There was a problem hiding this comment.
Added some minor comments/questions. Have not found any strong concern. Feel free to waive out the comments and to move forward with that. Please ping me on some details if you want to draw my attention on some aspects. This is a substantial PR so I might have missed some points.
Signed-off-by: Roman <4833306+Filter94@users.noreply.github.com>
Signed-off-by: Roman <4833306+Filter94@users.noreply.github.com>
Signed-off-by: Roman <4833306+Filter94@users.noreply.github.com>
Signed-off-by: Roman <4833306+Filter94@users.noreply.github.com>
100df8c to
370fe43
Compare
This PR implements issue(s) #
Checklist
PR.
Note
High Risk
This redefines the l2-execution witness boundary, fork wire encoding, and execution delegation—production guests and coordinators must match SSZ framing and Amsterdam index or proofs will fail.
Overview
Aligns the Linea rollup spec and Python reference with Zesu-style vanilla EIP-8025 stateless inputs instead of per-block
blockRlp+ Besudebug_executionWitness.l2-execution guest input is now
payloads[]: each entry hasstatelessInputSsz(0x0001 schema, optional Ere length prefix, SSZStatelessInputdecoded via newstateless_input.py+canonical_ssz.py/remerkleable) androllupExtension(forced txs only—must not be appended to the SSZ slice). Logical types inblock.pycoverNewPayloadRequest,ExecutionPayload, typedexecutionRequests, andLineaPayloadInput.run_l2_execution_guestdecodes SSZ once, delegates block execution toexecute_stateless_input(NotImplementedError= engine boundary), and keeps Linea logic: conflation checks, reject non-empty EIP-7685 requests, FTX handling againstexecutionPayload.transactions, bridge reads, PI emission.Fork moves from Osaka to Amsterdam via
fork.py(pinned execution-specs commit,ACTIVE_FORK_SSZ_INDEX= 20, documented wire mismatch vs older Zesu).state_transition.pydrops in-reference full EVM replay; witness-backedL2StateMPT reads remain for Linea-only storage/FTX checks.Rollup / DA unchanged in role:
blockRlpsstay on the blob path; l2-execution uses Engine API payloads; rollup cross-checks DA RLPs to l2-execution PIs. Docs,prover_inputsJSON/README, andrequirements.txt(remerkleable, pinnedethereum-execution) updated accordingly.Reviewed by Cursor Bugbot for commit 98e76e3. Bugbot is set up for automated code reviews on this repo. Configure here.