feat(flashblocks): add state trie cache warming for witness generation #568
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.
Overview
Add background state trie cache warming feature that calculates state roots to pre-warm state trie caches before witness generation. This addresses performance issues when state root calculation is disabled.
Problem Statement
When the builder runs with
disable_state_root: true, witness generation for the state trie uses cold caches, causing slow performance (~500-2000ms). This can contribute to missed blocks during high-load periods.Solution
Proactively calculate state roots in the background after each flashblock (even though the result isn't used) to warm state trie caches. The warming process runs asynchronously and the warm caches remain available for fast witness generation.
Key Features
Configuration
New CLI flag and environment variable:
--flashblocks.enable-state-trie-warming # (default: false) FLASHBLOCKS_ENABLE_STATE_TRIE_WARMING=trueExpected Performance Impact
Implementation Details
FlashblocksArgs(crates/builder/base-builder-cli/src/flashblocks.rs:45-52)FlashblocksConfig(crates/builder/op-rbuilder/src/flashblocks/config.rs:40)StateTrieWarmermodule with background task spawning (crates/builder/op-rbuilder/src/flashblocks/state_trie_warmer.rs)spawn_blockingfor CPU-intensive workMetrics
Monitor the feature with:
op_rbuilder_state_trie_warming_started_count- Tasks startedop_rbuilder_state_trie_warming_completed_count- Tasks completed successfullyop_rbuilder_state_trie_warming_skipped_count- Tasks skipped (already warming)op_rbuilder_state_trie_warming_duration- Duration histogramop_rbuilder_state_trie_warming_error_count- Error countTesting Status
❌ NOT TESTED - This implementation has not been tested in any environment (dev, staging, or production).
Next Steps
Before considering for production:
Files Changed
crates/builder/base-builder-cli/src/flashblocks.rs- CLI flagcrates/builder/op-rbuilder/src/flashblocks/config.rs- Config fieldcrates/builder/op-rbuilder/src/flashblocks/state_trie_warmer.rs- Core warming logic (new file)crates/builder/op-rbuilder/src/flashblocks/payload.rs- Integration pointcrates/builder/op-rbuilder/src/flashblocks/mod.rs- Module exportscrates/builder/op-rbuilder/src/metrics.rs- New metrics