You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This introduces the EngineState and EngineControl interfaces, to read and interact with the engine.
The interfaces are minimal & created to avoid external engine state such as forkchoice-state arguments as much as possible.
In the future I would like to split the EngineQueue into two parts:
The actual EngineQueue stage with just buffered safe attributes, unsafe payloads, and forkchoice update flag.
The Engine, which will implement the engine-control interface, extended with the finality signal function as optional thing.
Finality signals are otherwise unrelated to the derivation since the input is not stable, and by doing it this way we can keep the engine updated without conflicts.
This will also split the largest stage, which is great for testability and readability.
To keep this PR scope small, I just modified the engine queue for initial EngineControl support,
but in the next PRs of this stack I expand on it by adding optional engine metering and cleaning up the sequencer code path by using this.
By using a handle to an EngineControl, the sequener code does not have to maintain its own engine state anymore, and we avoid lots of potential inconsistencies,
as well as making the sequencer a lot more testable by not binding it straight to an Engine-API client.
Minor functional change: a payload result that fails to be converted into a block-ref is now handled with a reset instead of temporary error just in case, because the payload data is static so a temporary error doesn't make sense.
Tests
No notable functionality changes, same engine-queue codepath is already tested.
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
This introduces the
EngineStateandEngineControlinterfaces, to read and interact with the engine.The interfaces are minimal & created to avoid external engine state such as forkchoice-state arguments as much as possible.
In the future I would like to split the
EngineQueueinto two parts:EngineQueuestage with just buffered safe attributes, unsafe payloads, and forkchoice update flag.Engine, which will implement the engine-control interface, extended with the finality signal function as optional thing.Finality signals are otherwise unrelated to the derivation since the input is not stable, and by doing it this way we can keep the engine updated without conflicts.
To keep this PR scope small, I just modified the engine queue for initial
EngineControlsupport,but in the next PRs of this stack I expand on it by adding optional engine metering and cleaning up the sequencer code path by using this.
By using a handle to an
EngineControl, the sequener code does not have to maintain its own engine state anymore, and we avoid lots of potential inconsistencies,as well as making the sequencer a lot more testable by not binding it straight to an Engine-API client.
Minor functional change: a payload result that fails to be converted into a block-ref is now handled with a reset instead of temporary error just in case, because the payload data is static so a temporary error doesn't make sense.
Tests
No notable functionality changes, same engine-queue codepath is already tested.
Full PR stack: