interop: specify conditions on state-transition and safety changes #96
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Specify the "driver" component of the rollup node.
The "driver" is a concept from bedrock, except it used to be very synchronous, and parts of the functionality were under-specified or merged into derivation.
This replaces the engine-queue, and separates the jobs of the engine queue into encapsulated effects.
The derivation-process itself does not change: the existing derivation-pipeline is reused.
Effects are enacted based on conditions, and apply state-transition and/or block-safety changes.
This spec does not explicitly enshrine locks or threads, but does direct that each effect is meant to be processed asynchronously.
Tech-debt fixes
Interop specifics
With interop we introduce the notion of cross-unsafe. This requires its own safety-progression effect, and its own safety-reversal effect.
Payload-attributes, derived from L1, are first just considered unsafe. Only with the emitted initiating messages can we fully resolve intra-block message dependency cycles with other chains. Then, with that data, the block can be promoted to cross-unsafe, and then to safe.
The dependency-checks of the cross-unsafe progression step are encapsulated, and to be specified separate from the driver behavior.
#Additional context
By making it more asynchronous, and by encapsulating the effects better, we can extend it with new long-running effects without direct effects on any processing that would previously have been synchronous and relatively tangled up.
Metadata
Fix https://github.com/ethereum-optimism/protocol-quest/issues/187