Skip to content

Conversation

@matthias-wright
Copy link
Collaborator

Instead of executing blocks after they have been finalized by Simplex, we will optimistically execute blocks after they have been notarized. This serves two purposes: speeds up the overall consensus and fixes an edge case.
The edge case can occur when in the same view a block B is notarized, and a nullification certificate is formed. This can happen without malicious interference, because in Simplex an honest validator may send a notarize and a nullify in the same view (this ensures liveliness). If the leader in the subsequent view already received the notarization certificate, it will build its block on the block B from the previous view. If it has only seen the nullification certificate, it will build its block on the first ancestor before block B that is either notarized or finalized.
If the leader has already seen the notarization certificate, and builds its block on top of block B, then there is a deadlock. A new block B' can only be proposed once its parent was executed, because the parent execution might alter the state that is used to create block B'. Executing blocks once they have been notarized fixes this edge case. It does require the finalizer to keep track of multiple forks at the same time, because it is possible to have two notarized blocks at the same height.

Changes:

  • Updates the syncer to push notarized blocks to the finalizer
  • Updates the finalizer to keep track of multiple forks, and orphaned notarized blocks
  • Updates the finalizer's height notifiaction mechanism so that subscribers can subscribe to a pair of height and digest (because the finalizer might execute several blocks at the same height)
  • Updates the calls to the engine API to build the same forks on the execution layer
  • Adds the head block digest (not the eth hash) to the consensus state

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