fix: enable pool on TTD during initial sync #9329
Open
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.
PR description
The issue was because we only enabled the txn pool after initial sync completed. In a Holesky shadow fork, initial sync can remain “not done” even after Merge, so the pool stayed disabled while we still imported/produced blocks. Result: empty blocks despite network activity. To fix this I enabled the txn pool as soon as TTD is reached (post-merge), even if initial sync isn’t complete. Now also I subscribe to the 'TTD-reached' event so the pool flips on immediately when that happens and keeping P2P txn gossip handlers gated on “in-sync” exactly as before.
Why this fixes the issue
After TTD, block building relies on the tx pool. With the pool enabled, locally submitted transactions can be accepted and included, so we stop producing empty blocks during the shadow fork window. Gossip stays off until we’re in-sync, so we don’t risk propagating/accepting out-of-sync traffic. Safety is unchanged; we only allow local acceptance and block inclusion.
Fixed Issue(s)
fixes #9240
Thanks for sending a pull request! Have you done the following?
doc-change-requiredlabel to this PR if updates are required.Locally, you can run these tests to catch failures early:
./gradlew spotlessApply./gradlew build./gradlew acceptanceTest./gradlew integrationTest./gradlew ethereum:referenceTests:referenceTests