CTrain
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# EIP-7732 Amendment: Pipelining without Optionality Conor McMenamin, Nethermind Research This note is a checkpoint of a recent design I've been cooking which removes [optionality in EIP-7732](https://collective.flashbots.net/t/the-free-option-problem-in-epbs/5115). This amendment requires that a beacon proposer of slot `N` include the execution paylod header of slot `N-1`, attestation for slot `N-1`, and (KZG) commitments to the blobs that will be included in slot `N`. Later in slot `N`, the execution payload and blob DA for slot `N` is attested to by a Payload Timeliness Committee (PTC), meaning the proposer for slot `N` only needs to commit to the execution payload for slot `N` in the seconds before this PTC deadline, reducing optionality. As the PTC deadline is for the execution payload and the blob DA, optionality is effectively removed. Pipelining of execution and payload propagation is preserved, by only requiring attestors to re-execute the payload from slot `N` by the attestation deadline, which occurs in slot `N+1`. This provides [Beacon block deadline slot `N`, PTC deadline slot N] for propagating the payloads, and [PTC deadline slot `N`, attestation deadline slot `N+1`] for re-execution by attestors. This is illustrated in the diagram below, with example deadline durations specified -- the exact deadline timings are open to optimization. ![image](https://hackmd.io/_uploads/rk0oph9Yxe.png) # Design Intuition To give the intuition of why this design should work, I'll go through the key deadlines with some example timings (inline with propagation-execution timelines from existing 7732 proposals) and flow of attesting to a (beacon block, execution block, blob DA) triple for a slot `N`. - (`Slot N, t_0=0s` after slot `N` starts): **Slot Start**. - (`Slot N, t_1=1.5s` after slot `N` starts): **Beacon Block Propagation Deadline**: Attestors will attest to this at the attestation deadline. The beacon block contains: - The execution payload header of slot `N-1`. - The attestations from slot `N-1`, which attest to the execution payload of slot `N-2`, and the beacon block of slot `N-1`. - Commitments to the blobs for slot `N` ([flavours of PEPC here](https://ethresear.ch/t/unbundling-pbs-towards-protocol-enforced-proposer-commitments-pepc/13879), H/T Lin) - (`Slot N, t_2=6s`): **Attestation Deadline**: Attestors attest to: - Beacon block for slot `N` timeliness and validity. - Execution payload for slot `N` validity. See [Open Question](https://hackmd.io/Edm2IAouSOmHBmRvHdju2A#Open-Questions) #1 for more on this. - (`Slot N, t_3=8.5s`): **PTC Deadline** or **Payload Deadline**: PTC attest to the timeliness and availability of the execution payload and blob DA for slot `N`. - (`Slot N+1, t_4=13.5s` after slot` N` starts): **Beacon Block Propagation Deadline**. - (Slot N+1, t_5=18s after slot N starts): **Attestation Deadline**. ## Key Properties ### Pipelining With the above design, there is: - `t_3-t_0` for blob propagation, with the final part of this window for execution payload propagation (crossover of propagation windows is part of the original 7732 design too). - `t_5-t_3` for execution. As these windows don't crossover for a given slot's execution payload, there is full pipelining of execution and propagation. Importantly, while re-execution is happening for slot `N`'s execution payload, blobs for slot `N+1` can be propagated as their DA does not need to be attested to at the same time as the attestations for slot `N`'s execution payload. Using the example times provided, this is approximately the same time for propagation and execution as the current 7732 design. ### No Optionality There is no early commitment of the execution payload, so there is no optionality to be gained on the execution layer. For the DA "layer", as long as centralized-sequenced L2s dominate the L2 space and MEV is dominant on L1, both of which hold true today, optionality is effectively removed in the above amendmended 7732 design. Although blobs are being committed `t_3-t_1` before the blobs need to be delivered, blobs are likely not a source of optionality that we need to be concerned about. Almost all blobs are being provided as DA for L2s, and almost all L2s are centrally sequenced -- with the blob contents committed long before the blob arrives on L1. For non-centralized sequenced L2s, there is some optionality. However, these are a minority of blobs today. # Open Questions This checkpointed design still has unanswered questions that I haven't had time to tackle: 1. How do we handle an invalid yet timely execution payload included in a beacon block? i. We allow forking of execution payloads, separate to consensus chain forks. This is very similar to [7886](https://eips.ethereum.org/EIPS/eip-7886#chain-state-tracking) and [Lin's 7732 amendment](https://hackmd.io/@linoscope/pipelining-only-epbs#Comparison-with-Delayed-Execution-EIP-7886). ii. The cleanest way to handle this would be to invalidate the beacon block. This would give the beacon proposer of slot N+1 only [PTC deadline slot N, Slot N+1 start] to re-execute the execution payload of slot N. With a strict pipelining requirement, this is unacceptable. 2. Are KZG commitments to the blobs for slot N necessary in the beacon block for slot N? My understanding is yes, so the PTC and attestors know what to download e.g. all information to be download must reference these original commitments. This may not be the most efficient way of doing this. 3. Do the original fork-choice weights hold up here? 4. Will the beacon proposer for slot N propagate his or her own blobs, or outsource this through "blob-Boost" -- MEV-Boost for blobs? The more blobs, the higher this requirement becomes for a beacon proposer. ## Motivation Optionality in the [current implementation of 7732](https://eips.ethereum.org/EIPS/eip-7732), as of 26/08/2025, stands as a potential "[P0 bug](https://x.com/mikeneuder/status/1948911395028041941)"-- critical -- as acknowledged by Mike, one of the original 7732 authors. In response to this, Lin, my fellow protocol researcher at Nethermind, [proposed an amendment removing the free option from 7732.](https://hackmd.io/@linoscope/pipelining-only-epbs) ## Acknowledgements Thanks to Lin Oshitani, Ahmad Bitar, and Potuz for their helpful discussions on the topic. Discussions != endorsements.

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully