From 28406938c47c9fecb043172b669dff634fbda5cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Masip=20Ardevol?= <68732820+hecmas@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:28:50 +0100 Subject: [PATCH] chore: block recovery cleanup (#21436) --- Cargo.lock | 2 - crates/stateless/Cargo.toml | 8 --- crates/stateless/src/recover_block.rs | 71 ++------------------------- testing/ef-tests/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 79 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78fe63fef0..dd503bc12b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10897,7 +10897,6 @@ dependencies = [ "alloy-rpc-types-debug", "alloy-trie", "itertools 0.14.0", - "k256", "reth-chainspec", "reth-consensus", "reth-errors", @@ -10908,7 +10907,6 @@ dependencies = [ "reth-revm", "reth-trie-common", "reth-trie-sparse", - "secp256k1 0.30.0", "serde", "serde_with", "thiserror 2.0.18", diff --git a/crates/stateless/Cargo.toml b/crates/stateless/Cargo.toml index d79bedb76b..d826e2f375 100644 --- a/crates/stateless/Cargo.toml +++ b/crates/stateless/Cargo.toml @@ -37,11 +37,3 @@ thiserror.workspace = true itertools.workspace = true serde.workspace = true serde_with.workspace = true - -k256 = { workspace = true, optional = true } -secp256k1 = { workspace = true, optional = true } - -[features] -default = ["k256"] -k256 = ["dep:k256"] -secp256k1 = ["dep:secp256k1"] diff --git a/crates/stateless/src/recover_block.rs b/crates/stateless/src/recover_block.rs index 15db1fe55e..7fc2cb2fb8 100644 --- a/crates/stateless/src/recover_block.rs +++ b/crates/stateless/src/recover_block.rs @@ -1,7 +1,7 @@ use crate::validation::StatelessValidationError; use alloc::vec::Vec; use alloy_consensus::BlockHeader; -use alloy_primitives::{Address, Signature, B256}; +use alloy_primitives::Address; use core::ops::Deref; use reth_chainspec::EthereumHardforks; use reth_ethereum_primitives::{Block, TransactionSigned}; @@ -9,9 +9,6 @@ use reth_primitives_traits::{Block as _, RecoveredBlock}; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, Bytes}; -#[cfg(all(feature = "k256", feature = "secp256k1"))] -use k256 as _; - /// Serialized uncompressed public key #[serde_as] #[derive(Debug, Clone, Serialize, Deserialize)] @@ -76,68 +73,6 @@ fn verify_and_compute_sender( return Err(StatelessValidationError::HomesteadSignatureNotNormalized); } let sig_hash = tx.signature_hash(); - #[cfg(all(feature = "k256", feature = "secp256k1"))] - { - let _ = verify_and_compute_sender_unchecked_k256; - } - #[cfg(feature = "secp256k1")] - { - verify_and_compute_sender_unchecked_secp256k1(vk, sig, sig_hash) - } - #[cfg(all(feature = "k256", not(feature = "secp256k1")))] - { - verify_and_compute_sender_unchecked_k256(vk, sig, sig_hash) - } - #[cfg(not(any(feature = "secp256k1", feature = "k256")))] - { - let _ = vk; - let _ = tx; - let _: B256 = sig_hash; - let _: &Signature = sig; - - unimplemented!("Must choose either k256 or secp256k1 feature") - } -} -#[cfg(feature = "k256")] -fn verify_and_compute_sender_unchecked_k256( - vk: &UncompressedPublicKey, - sig: &Signature, - sig_hash: B256, -) -> Result
{ - use k256::ecdsa::{signature::hazmat::PrehashVerifier, VerifyingKey}; - - let vk = - VerifyingKey::from_sec1_bytes(vk).map_err(|_| StatelessValidationError::SignerRecovery)?; - - sig.to_k256() - .and_then(|sig| vk.verify_prehash(sig_hash.as_slice(), &sig)) - .map_err(|_| StatelessValidationError::SignerRecovery)?; - - Ok(Address::from_public_key(&vk)) -} - -#[cfg(feature = "secp256k1")] -fn verify_and_compute_sender_unchecked_secp256k1( - vk: &UncompressedPublicKey, - sig: &Signature, - sig_hash: B256, -) -> Result { - use secp256k1::{ecdsa::Signature as SecpSignature, Message, PublicKey, SECP256K1}; - - let public_key = - PublicKey::from_slice(vk).map_err(|_| StatelessValidationError::SignerRecovery)?; - - let mut sig_bytes = [0u8; 64]; - sig_bytes[0..32].copy_from_slice(&sig.r().to_be_bytes::<32>()); - sig_bytes[32..64].copy_from_slice(&sig.s().to_be_bytes::<32>()); - - let signature = SecpSignature::from_compact(&sig_bytes) - .map_err(|_| StatelessValidationError::SignerRecovery)?; - - let message = Message::from_digest(sig_hash.0); - SECP256K1 - .verify_ecdsa(&message, &signature, &public_key) - .map_err(|_| StatelessValidationError::SignerRecovery)?; - - Ok(Address::from_raw_public_key(&vk[1..])) + alloy_consensus::crypto::secp256k1::verify_and_compute_signer_unchecked(&vk.0, sig, sig_hash) + .map_err(|_| StatelessValidationError::SignerRecovery) } diff --git a/testing/ef-tests/Cargo.toml b/testing/ef-tests/Cargo.toml index d27d5bfb03..21f0076a12 100644 --- a/testing/ef-tests/Cargo.toml +++ b/testing/ef-tests/Cargo.toml @@ -28,7 +28,7 @@ reth-evm.workspace = true reth-evm-ethereum.workspace = true reth-ethereum-consensus.workspace = true reth-revm = { workspace = true, features = ["std", "witness"] } -reth-stateless = { workspace = true, features = ["secp256k1"] } +reth-stateless = { workspace = true } reth-tracing.workspace = true reth-trie.workspace = true reth-trie-db.workspace = true