Skip to content

chore(misc): Aligned with the Zesu's stateless input#3255

Open
Filter94 wants to merge 4 commits into
mainfrom
guest-program-input-adjustment
Open

chore(misc): Aligned with the Zesu's stateless input#3255
Filter94 wants to merge 4 commits into
mainfrom
guest-program-input-adjustment

Conversation

@Filter94
Copy link
Copy Markdown
Contributor

@Filter94 Filter94 commented Jun 3, 2026

This PR implements issue(s) #

Checklist

  • I wrote new tests for my new core changes.
  • I have successfully ran tests, style checker and build against my new changes locally.
  • If this change is deployed to any environment (including Devnet), E2E test coverage exists or is included in this
    PR.
  • I have informed the team of any breaking changes if there are any.

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 + Besu debug_executionWitness.

l2-execution guest input is now payloads[]: each entry has statelessInputSsz (0x0001 schema, optional Ere length prefix, SSZ StatelessInput decoded via new stateless_input.py + canonical_ssz.py / remerkleable) and rollupExtension (forced txs only—must not be appended to the SSZ slice). Logical types in block.py cover NewPayloadRequest, ExecutionPayload, typed executionRequests, and LineaPayloadInput. run_l2_execution_guest decodes SSZ once, delegates block execution to execute_stateless_input (NotImplementedError = engine boundary), and keeps Linea logic: conflation checks, reject non-empty EIP-7685 requests, FTX handling against executionPayload.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.py drops in-reference full EVM replay; witness-backed L2State MPT reads remain for Linea-only storage/FTX checks.

Rollup / DA unchanged in role: blockRlps stay on the blob path; l2-execution uses Engine API payloads; rollup cross-checks DA RLPs to l2-execution PIs. Docs, prover_inputs JSON/README, and requirements.txt (remerkleable, pinned ethereum-execution) updated accordingly.

Reviewed by Cursor Bugbot for commit 98e76e3. Bugbot is set up for automated code reviews on this repo. Configure here.

Copilot AI review requested due to automatic review settings June 3, 2026 08:24
@socket-security
Copy link
Copy Markdown

socket-security Bot commented Jun 3, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedpypi/​remerkleable@​0.1.28100100100100100

View full report

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 / ExecutionPayload transactions and reject non-empty EIP-7685 executionRequests.
  • 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.

Comment thread rollup_spec/fork.py
Comment thread rollup_spec/stateless_input.py Outdated
Comment thread rollup_spec/Readme.md
Comment thread rollup_spec/canonical_ssz.py
@Filter94 Filter94 changed the title Aligned with the Zesu's stateless input chore(misc): Aligned with the Zesu's stateless input Jun 3, 2026
"coinbase": "0x0000000000000000000000000000000000000000",
"chainId": 59144
"coinbase": "0x0000000000000000000000000000000000000000",
"chainId": 59144
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before I forget, we have extra fields that we use to disable/enable circuits depending on the environment. This is the allowedCircuitID.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added it as a number to the logical schema and to the readme

Comment thread rollup_spec/block.py
Copy link
Copy Markdown
Contributor

@AlexandreBelling AlexandreBelling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Filter94 added 4 commits June 5, 2026 17:43
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>
@Filter94 Filter94 force-pushed the guest-program-input-adjustment branch from 100df8c to 370fe43 Compare June 5, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants