diff --git a/Cargo.toml b/Cargo.toml index 0294a059f8e..8533bbf7f37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -495,33 +495,33 @@ alloy-trie = { version = "0.9.1", default-features = false } alloy-hardforks = "0.4.5" -alloy-consensus = { version = "1.1.2", default-features = false } -alloy-contract = { version = "1.1.2", default-features = false } -alloy-eips = { version = "1.1.2", default-features = false } -alloy-genesis = { version = "1.1.2", default-features = false } -alloy-json-rpc = { version = "1.1.2", default-features = false } -alloy-network = { version = "1.1.2", default-features = false } -alloy-network-primitives = { version = "1.1.2", default-features = false } -alloy-provider = { version = "1.1.2", features = ["reqwest", "debug-api"], default-features = false } -alloy-pubsub = { version = "1.1.2", default-features = false } -alloy-rpc-client = { version = "1.1.2", default-features = false } -alloy-rpc-types = { version = "1.1.2", features = ["eth"], default-features = false } -alloy-rpc-types-admin = { version = "1.1.2", default-features = false } -alloy-rpc-types-anvil = { version = "1.1.2", default-features = false } -alloy-rpc-types-beacon = { version = "1.1.2", default-features = false } -alloy-rpc-types-debug = { version = "1.1.2", default-features = false } -alloy-rpc-types-engine = { version = "1.1.2", default-features = false } -alloy-rpc-types-eth = { version = "1.1.2", default-features = false } -alloy-rpc-types-mev = { version = "1.1.2", default-features = false } -alloy-rpc-types-trace = { version = "1.1.2", default-features = false } -alloy-rpc-types-txpool = { version = "1.1.2", default-features = false } -alloy-serde = { version = "1.1.2", default-features = false } -alloy-signer = { version = "1.1.2", default-features = false } -alloy-signer-local = { version = "1.1.2", default-features = false } -alloy-transport = { version = "1.1.2" } -alloy-transport-http = { version = "1.1.2", features = ["reqwest-rustls-tls"], default-features = false } -alloy-transport-ipc = { version = "1.1.2", default-features = false } -alloy-transport-ws = { version = "1.1.2", default-features = false } +alloy-consensus = { version = "1.1.3", default-features = false } +alloy-contract = { version = "1.1.3", default-features = false } +alloy-eips = { version = "1.1.3", default-features = false } +alloy-genesis = { version = "1.1.3", default-features = false } +alloy-json-rpc = { version = "1.1.3", default-features = false } +alloy-network = { version = "1.1.3", default-features = false } +alloy-network-primitives = { version = "1.1.3", default-features = false } +alloy-provider = { version = "1.1.3", features = ["reqwest", "debug-api"], default-features = false } +alloy-pubsub = { version = "1.1.3", default-features = false } +alloy-rpc-client = { version = "1.1.3", default-features = false } +alloy-rpc-types = { version = "1.1.3", features = ["eth"], default-features = false } +alloy-rpc-types-admin = { version = "1.1.3", default-features = false } +alloy-rpc-types-anvil = { version = "1.1.3", default-features = false } +alloy-rpc-types-beacon = { version = "1.1.3", default-features = false } +alloy-rpc-types-debug = { version = "1.1.3", default-features = false } +alloy-rpc-types-engine = { version = "1.1.3", default-features = false } +alloy-rpc-types-eth = { version = "1.1.3", default-features = false } +alloy-rpc-types-mev = { version = "1.1.3", default-features = false } +alloy-rpc-types-trace = { version = "1.1.3", default-features = false } +alloy-rpc-types-txpool = { version = "1.1.3", default-features = false } +alloy-serde = { version = "1.1.3", default-features = false } +alloy-signer = { version = "1.1.3", default-features = false } +alloy-signer-local = { version = "1.1.3", default-features = false } +alloy-transport = { version = "1.1.3" } +alloy-transport-http = { version = "1.1.3", features = ["reqwest-rustls-tls"], default-features = false } +alloy-transport-ipc = { version = "1.1.3", default-features = false } +alloy-transport-ws = { version = "1.1.3", default-features = false } # op alloy-op-evm = { version = "0.24.1", default-features = false } diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 2e39ecd919f..7bc9811495d 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -1901,6 +1901,16 @@ where false } + /// Returns true if the given hash is part of the last received sync target fork choice update. + /// + /// See [`ForkchoiceStateTracker::sync_target_state`] + fn is_any_sync_target(&self, block_hash: B256) -> bool { + if let Some(target) = self.state.forkchoice_state_tracker.sync_target_state() { + return target.contains(block_hash) + } + false + } + /// Checks if the given `check` hash points to an invalid header, inserting the given `head` /// block into the invalid header cache if the `check` hash has a known invalid ancestor. /// @@ -2040,9 +2050,12 @@ where match self.insert_block(child) { Ok(res) => { debug!(target: "engine::tree", child =?child_num_hash, ?res, "connected buffered block"); - if self.is_sync_target_head(child_num_hash.hash) && + if self.is_any_sync_target(child_num_hash.hash) && matches!(res, InsertPayloadOk::Inserted(BlockStatus::Valid)) { + debug!(target: "engine::tree", child =?child_num_hash, "connected sync target block"); + // we just inserted a block that we know is part of the canonical chain, so + // we can make it canonical self.make_canonical(child_num_hash.hash)?; } } @@ -2348,11 +2361,15 @@ where // try to append the block match self.insert_block(block) { Ok(InsertPayloadOk::Inserted(BlockStatus::Valid)) => { - if self.is_sync_target_head(block_num_hash.hash) { - trace!(target: "engine::tree", "appended downloaded sync target block"); + // check if we just inserted a block that's part of sync targets, + // i.e. head, safe, or finalized + if let Some(sync_target) = self.state.forkchoice_state_tracker.sync_target_state() && + sync_target.contains(block_num_hash.hash) + { + debug!(target: "engine::tree", ?sync_target, "appended downloaded sync target block"); - // we just inserted the current sync target block, we can try to make it - // canonical + // we just inserted a block that we know is part of the canonical chain, so we + // can make it canonical return Ok(Some(TreeEvent::TreeAction(TreeAction::MakeCanonical { sync_target_head: block_num_hash.hash, })))