Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minimal ePBS with forward inclusion lists and PTC #1

Open
wants to merge 57 commits into
base: dev
Choose a base branch
from
Open

minimal ePBS with forward inclusion lists and PTC #1

wants to merge 57 commits into from

Conversation

potuz
Copy link
Owner

@potuz potuz commented Aug 7, 2023

Eventually this PR will become a full ePBS implementation. Main ingredients are

  • In protocol staked builders.
  • All Max EB changes from this PR including execution layer trigerable exits.
  • Forced inclusion lists.

Some design notes as the PR advances will be put in this file

EDIT: some items are outdated as we finalize the design of ILs. For example we will commit the summary to the beacon block and gossip only the transactions, this simplifies a bit some of the containers in this PR that are currently signed envelopes.

Notice that the whole thing is broken by the construct if index < len(validators) else.
specs/_features/epbs/beacon-chain.md Outdated Show resolved Hide resolved
specs/_features/epbs/beacon-chain.md Show resolved Hide resolved
specs/_features/epbs/beacon-chain.md Outdated Show resolved Hide resolved
potuz added 5 commits August 22, 2023 13:18
- Added handlers for execution payloads and checks inclusion lists
  availability on consensus blocks
if slot > message_block.slot:
return False
(ancestor_root, is_ancestor_full) = get_ancestor(store, message_root, slot)
return (root == ancestor_root) and (is_payload_preset == is_ancestor_full)

Choose a reason for hiding this comment

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

Suggested change
return (root == ancestor_root) and (is_payload_preset == is_ancestor_full)
return (root == ancestor_root) and (is_payload_present == is_ancestor_full)

- Proposer for slot N submits a signed block and in parallel broadcasts pairs of `summaries` and `transactions` to be included at the beginning of slot N+1. `transactions` are just list of transactions that this proposer wants included at the most at the beginning of N+1. `Summaries` are lists consisting on addresses sending those transactions and their gas limits. The summaries are signed, the transactions aren't. An honest proposer is allowed to send many of these pairs that aren't committed to its beacon block so no double proposing slashing is involved.
- Validators for slot N will consider the block for validation only if they have seen at least one pair (summary, transactions). They will consider the block invalid if those transactions are not executable at the start of slot N and if they don't have at least 12.5% higher `maxFeePerGas` than the current slot's `maxFeePerGas`.
- The builder for slot N reveals its payload together with a signed summary of the proposer of slot N-1. Along the summary, the builder includes a list of transactions indices (in strictly increasing order) of the previous payload of slot N-1, that satisfy some entry in the signed inclusion list summary. The payload is considered only valid if the following applies
- For each index `i` in the payload's `inclusion_list_exclusions`, check that the ith transaction `tx[i]` of the payload for `N-1` satisfies some transaction `T[i]` of the current inclusion list. Here `T[i]` is the first entry in the payload's inclusion list that is satisfied by `tx[i]`. This `T[i]` is removed from the inclusion list summary.

Choose a reason for hiding this comment

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

It should be payload of "last full block" here instead of N-1 I believe.

Copy link
Owner Author

Choose a reason for hiding this comment

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

correct, I was trying to keep it simple in the description, but yeah, it has to be of the parent payload. Hopefully the forkchoice and beacon-chain changes do reflect this :)


*Note:* This specification is built upon [Deneb](../../deneb/beacon-chain.md) and is under active development.

This feature adds new staked consensus participants called *Builders* and new honest validators duties called *payload timeliness attestations*. The slot is divided in **four** intervals as opposed to the current three. Honest validators gather *signed bids* from builders and submit their consensus blocks (a `SigneddBeaconBlock`) at the beginning of the slot. At the start of the second interval, honest validators submit attestations just as they do previous to this feature). At the start of the third interval, aggregators aggregate these attestations (exactly as before this feature) and the honest builder reveals the full payload. At the start of the fourth interval, some honest validators selected to be members of the new **Payload Timeliness Committee** attest to the presence of the builder's payload.
Copy link

Choose a reason for hiding this comment

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

Suggested change
This feature adds new staked consensus participants called *Builders* and new honest validators duties called *payload timeliness attestations*. The slot is divided in **four** intervals as opposed to the current three. Honest validators gather *signed bids* from builders and submit their consensus blocks (a `SigneddBeaconBlock`) at the beginning of the slot. At the start of the second interval, honest validators submit attestations just as they do previous to this feature). At the start of the third interval, aggregators aggregate these attestations (exactly as before this feature) and the honest builder reveals the full payload. At the start of the fourth interval, some honest validators selected to be members of the new **Payload Timeliness Committee** attest to the presence of the builder's payload.
This feature adds new staked consensus participants called *Builders* and new honest validators duties called *payload timeliness attestations*. The slot is divided in **four** intervals as opposed to the current three. Honest validators gather *signed bids* from builders and submit their consensus blocks (a `SignedBeaconBlock`) at the beginning of the slot. At the start of the second interval, honest validators submit attestations just as they do previous to this feature). At the start of the third interval, aggregators aggregate these attestations (exactly as before this feature) and the honest builder reveals the full payload. At the start of the fourth interval, some honest validators selected to be members of the new **Payload Timeliness Committee** attest to the presence of the builder's payload.

Copy link
Owner Author

Choose a reason for hiding this comment

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

had to read this like 10 times to find it


## Genesis

### Modified `initialize_beacon_statre_from_eth1`
Copy link

Choose a reason for hiding this comment

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

Suggested change
### Modified `initialize_beacon_statre_from_eth1`
### Modified `initialize_beacon_state_from_eth1`

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.

4 participants