Conversation
`rayon` is a default feature of ethrex-blockchain, ethrex-common and ethrex-vm. The pins here set `default-features = false`, and only the `ethrex` cmd crate (deliberately not a dependency) adds it back, so the embedded node has never had it. It is not optional. ethrex gates the parallel BAL execution path on it (`crates/vm/backends/levm/mod.rs:485`) but not the caller that decides whether to create the merkleizer channel (`crates/blockchain/blockchain.rs:1026`). With a BAL supplied and both `bal_parallel_*` options at their defaults, the caller skips the channel and LEVM then drops the BAL and takes the sequential path, which needs that Sender: Error executing block: sequential execution path called without a merkleizer Sender So every `newPayload` that carries a BAL fails and the node cannot follow the head. P2P sync is unaffected because it passes no BAL. Also restores the mempool prewarm and the block warmer, both of which log or no-op when the feature is off. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
0w3n-d
added this pull request to stack #504
September 9, 2026 17:36
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Issue: none (one-line dependency fix; happy to file a
bugissue if you want it tracked)What this PR does
Adds
rayonto theethrex-blockchain,ethrex-commonandethrex-vmpins.It is a default feature of all three; our pins set
default-features = false,and only the
ethrexcmd crate — deliberately not a dependency — adds it back,so the embedded node has never had it.
Without it the node cannot follow the head on an Amsterdam chain. ethrex gates
the parallel BAL execution path on
rayon(
crates/vm/backends/levm/mod.rs:485) but not the caller that decides whetherto create the merkleizer channel (
crates/blockchain/blockchain.rs:1026). Witha BAL supplied and both
bal_parallel_*options at their defaults, the callerskips the channel, LEVM drops the BAL, and the sequential path errors with
sequential execution path called without a merkleizer Sender. EverynewPayloadthat carries a BAL fails. P2P sync is unaffected, because itpasses no BAL — which is why a simulator syncs to the head and then stalls
one block later. Observed on plataberget at block 176481.
The feature also gates the mempool prewarm (
Mempool prewarm requires the rayon feature; disabled) and the block warmer (warmer: 0.00 ms), both nowactive.
What this PR deliberately does not do
cfg-gating inconsistency is an upstream bug; this PR only stops us from
triggering it. An upstream report is worth filing separately.
ethrex-p2p,ethrex-levmorethrex-storagepins.ethrex-levmpicks uprayontransitively throughethrex-vm, andethrex-p2puses rayon unconditionally.aws-lc-rs/ccconstraint that the comment above thesepins documents.
rayonis unrelated to it.Tests
No new tests. Nothing in the suite executes an Amsterdam block with a BAL
through
add_block, so no unit test can observe this; the failure is afeature-resolution problem, not a logic one.
Verified two ways:
cargo metadatabefore and after. Before, all four ethrex crates resolvedwithout
rayon; after, all four have it. Identical under--all-features.just fmt-check,cargo clippy --all-features --no-deps -- -D warnings, andjust test(414 passed, 0 failed, 8 ignored).Still needs a redeploy on plataberget to confirm the two log lines are gone.
Note that this means the simulation role has never validated an Amsterdam block
through the engine path, so earlier sim results on this stack are not
trustworthy.
Reviewer checklist
lint,unit-test) is green🤖 Generated with Claude Code