Skip to content

Conversation

@ksn6
Copy link
Contributor

@ksn6 ksn6 commented Sep 12, 2025

Problem

This PR implements fast leader handover, up to Milestone 1. See #293 for more detail.

This is still work in progress.

Milestone 1
Modify Entry to allow the dissemination of a "special reset indicator." If slot s's proposer receives a ParentReady notification with associated (s', hash) that doesn't match the block parent that is optimistically being built upon, triggering a parent change, then the proposer will disseminate this "special reset indicator." Naturally, all transactions disseminated up to the special reset (call these "optimistic transactions") will not affect state.

In Milestone 1, the proposer simply stops including further transactions. We essentially have an empty block. Launching Milestone 1 is very undesirable, since the leader from s - 1 can clearly impact block rewards for the following leader.

Milestone 2
Allow the proposer to include transactions that build upon the revised parent after the special reset.

In Milestone 2, we do NOT re-submit optimistic transactions to the scheduler. Milestone 2 is still undesirable, since e.g., transactions with high priority fee that were optimistically disseminated would now no longer be included in the block.

Milestone 3
In addition to the features in Milestone 2, we re-submit optimistic transactions to the scheduler.

@qkniep
Copy link
Contributor

qkniep commented Sep 12, 2025

The new ParentReady being for a slot s' < s-1 is not a strict requirement: Instead, the leader for slot s could have initially seen block b in slot s-1 and then see a ParentReady(s, (s-1, b')) for a different block b' != b.

@ksn6
Copy link
Contributor Author

ksn6 commented Sep 12, 2025

The new ParentReady being for a slot s' < s-1 is not a strict requirement: Instead, the leader for slot s could have initially seen block b in slot s-1 and then see a ParentReady(s, (s-1, b')) for a different block b' != b.

Yep - the way we'll be checking for this in the code is to see whether (slot, hash) for the parent we're optimistically building on is equal to (slot', hash') associated with ParentReady. If these aren't equal, then we need to issue an UpdateParent marker, assuming that slot' <= slot.

EDIT: ah, I see you're referring to the Milestones. Good catch - will update that now.

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.

2 participants