-
Notifications
You must be signed in to change notification settings - Fork 933
Description
Description
The "transition block" is the first block in a chain that includes a non-empty ExecutionPayload. This is effectively the first merging of the proof-of-work chain into the proof-of-stake chain.
This block requires some additional verification when compared to pre- and post-transition blocks; the consensus client must check that the PoW chain has reached the terminal total difficulty and/or some other criteria.
These additional verifications are challenging during optimistic sync. We can't perform them during sync, since the execution client might not be synced enough to respond to the requests. So, we optimistically accept the transition block and promise to come back later and check it once the execution client is synced.
Presently, Lighthouse happily optimistically accepts the transition block, but it fulfills the promise to verify it. Therefore, Lighthouse needs:
- A way to cache optimistic transition blocks as we come across them during sync.
- This cache must persist across reboots, so it needs to be saved to the DB.
- A way to know that the EL is synced and it's therefore time to check all the blocks in the cache.
- Interaction with [Merged by Bors] - Retrospective invalidation of exec. payloads for opt. sync #2837 to invalidate any blocks where the tranisition fails the retrospective check (talk to @paulhauner)