diff --git a/Cargo.lock b/Cargo.lock index d690cf536..7cbb3e937 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -130,9 +130,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95d76a38cae906fd394a5afb0736aaceee5432efe76addfd71048e623e208af" +checksum = "e6228abfc751a29cde117b0879b805a3e0b3b641358f063272c83ca459a56886" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -206,9 +206,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c66eec1acdd96b39b995b8f5ee5239bc0c871d62c527ae1ac9fd1d7fecd455" +checksum = "d46eb5871592c216d39192499c95a99f7175cb94104f88c307e6dc960676d9f1" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -283,9 +283,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb848c43f6b06ae3de2e4a67496cbbabd78ae87db0f1248934f15d76192c6a" +checksum = "38f35429a652765189c1c5092870d8360ee7b7769b09b06d89ebaefd34676446" dependencies = [ "alloy-rlp", "arbitrary", @@ -600,9 +600,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661c516eb1fa3294cc7f2fb8955b3b609d639c282ac81a4eedb14d3046db503a" +checksum = "3b2395336745358cc47207442127c47c63801a7065ecc0aa928da844f8bb5576" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -614,9 +614,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecbabb8fc3d75a0c2cea5215be22e7a267e3efde835b0f2a8922f5e3f5d47683" +checksum = "9ed5047c9a241df94327879c2b0729155b58b941eae7805a7ada2e19436e6b39" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -632,9 +632,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16517f2af03064485150d89746b8ffdcdbc9b6eeb3d536fb66efd7c2846fbc75" +checksum = "5dee02a81f529c415082235129f0df8b8e60aa1601b9c9298ffe54d75f57210b" dependencies = [ "const-hex", "dunce", @@ -647,9 +647,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07ebb0c1674ff8cbb08378d7c2e0e27919d2a2dae07ad3bca26174deda8d389" +checksum = "f631f0bd9a9d79619b27c91b6b1ab2c4ef4e606a65192369a1ee05d40dcf81cc" dependencies = [ "serde", "winnow", @@ -657,9 +657,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e448d879903624863f608c552d10efb0e0905ddbee98b0049412799911eb062" +checksum = "c2841af22d99e2c0f82a78fe107b6481be3dd20b89bfb067290092794734343a" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -1018,9 +1018,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998282f8f49ccd6116b0ed8a4de0fbd3151697920e7c7533416d6e25e76434a7" +checksum = "e26a9844c659a2a293d239c7910b752f8487fe122c6c8bd1659bf85a6507c302" dependencies = [ "brotli", "flate2", @@ -1498,9 +1498,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] @@ -2011,6 +2011,12 @@ dependencies = [ "itertools 0.10.5", ] +[[package]] +name = "critical-section" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" + [[package]] name = "crossbeam-channel" version = "0.5.13" @@ -5131,6 +5137,10 @@ name = "once_cell" version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "oorandom" @@ -5413,9 +5423,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.13" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -8393,7 +8403,6 @@ dependencies = [ "itertools 0.13.0", "metrics", "notify", - "once_cell", "parking_lot 0.12.3", "rand 0.8.5", "rayon", @@ -10256,9 +10265,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20e7b52ad118b2153644eea95c6fc740b6c1555b2344fdab763fc9de4075f665" +checksum = "ebfc1bfd06acc78f16d8fd3ef846bc222ee7002468d10a7dce8d703d6eab89a3" dependencies = [ "paste", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index ac0ab2d39..2068f02bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -497,7 +497,9 @@ notify = { version = "6.1.1", default-features = false, features = [ "macos_fsevent", ] } nybbles = "0.2.1" -once_cell = "1.19" +once_cell = { version = "1.19", default-features = false, features = [ + "critical-section", +] } parking_lot = "0.12" paste = "1.0" rand = "0.8.5" diff --git a/crates/chainspec/src/lib.rs b/crates/chainspec/src/lib.rs index 424b2b77c..81aadb834 100644 --- a/crates/chainspec/src/lib.rs +++ b/crates/chainspec/src/lib.rs @@ -11,6 +11,12 @@ extern crate alloc; +use once_cell as _; +#[cfg(not(feature = "std"))] +pub(crate) use once_cell::sync::{Lazy as LazyLock, OnceCell as OnceLock}; +#[cfg(feature = "std")] +pub(crate) use std::sync::{LazyLock, OnceLock}; + /// Chain specific constants pub(crate) mod constants; pub use constants::MIN_TRANSACTION_GAS; @@ -34,9 +40,9 @@ pub use spec::{ DepositContract, ForkBaseFeeParams, DEV, HOLESKY, MAINNET, SEPOLIA, }; -/// Simple utility to create a `OnceCell` with a value set. -pub fn once_cell_set(value: T) -> once_cell::sync::OnceCell { - let once = once_cell::sync::OnceCell::new(); +/// Simple utility to create a thread-safe sync cell with a value set. +pub fn once_cell_set(value: T) -> OnceLock { + let once = OnceLock::new(); let _ = once.set(value); once } diff --git a/crates/chainspec/src/spec.rs b/crates/chainspec/src/spec.rs index e43e0bc78..f78fcbb61 100644 --- a/crates/chainspec/src/spec.rs +++ b/crates/chainspec/src/spec.rs @@ -6,7 +6,7 @@ use alloy_genesis::Genesis; use alloy_primitives::{address, b256, Address, BlockNumber, B256, U256}; use alloy_trie::EMPTY_ROOT_HASH; use derive_more::From; -use once_cell::sync::{Lazy, OnceCell}; + use reth_ethereum_forks::{ ChainHardforks, DisplayHardforks, EthereumHardfork, EthereumHardforks, ForkCondition, ForkFilter, ForkFilterKey, ForkHash, ForkId, Hardfork, Hardforks, Head, DEV_HARDFORKS, @@ -24,10 +24,10 @@ use reth_primitives_traits::{ }; use reth_trie_common::root::state_root_ref_unhashed; -use crate::{constants::MAINNET_DEPOSIT_CONTRACT, once_cell_set, EthChainSpec}; +use crate::{constants::MAINNET_DEPOSIT_CONTRACT, once_cell_set, EthChainSpec, LazyLock, OnceLock}; /// The Ethereum mainnet spec -pub static MAINNET: Lazy> = Lazy::new(|| { +pub static MAINNET: LazyLock> = LazyLock::new(|| { let mut spec = ChainSpec { chain: Chain::mainnet(), genesis: serde_json::from_str(include_str!("../res/genesis/mainnet.json")) @@ -55,7 +55,7 @@ pub static MAINNET: Lazy> = Lazy::new(|| { }); /// The Sepolia spec -pub static SEPOLIA: Lazy> = Lazy::new(|| { +pub static SEPOLIA: LazyLock> = LazyLock::new(|| { let mut spec = ChainSpec { chain: Chain::sepolia(), genesis: serde_json::from_str(include_str!("../res/genesis/sepolia.json")) @@ -80,7 +80,7 @@ pub static SEPOLIA: Lazy> = Lazy::new(|| { }); /// The Holesky spec -pub static HOLESKY: Lazy> = Lazy::new(|| { +pub static HOLESKY: LazyLock> = LazyLock::new(|| { let mut spec = ChainSpec { chain: Chain::holesky(), genesis: serde_json::from_str(include_str!("../res/genesis/holesky.json")) @@ -106,7 +106,7 @@ pub static HOLESKY: Lazy> = Lazy::new(|| { /// /// Includes 20 prefunded accounts with `10_000` ETH each derived from mnemonic "test test test test /// test test test test test test test junk". -pub static DEV: Lazy> = Lazy::new(|| { +pub static DEV: LazyLock> = LazyLock::new(|| { ChainSpec { chain: Chain::dev(), genesis: serde_json::from_str(include_str!("../res/genesis/dev.json")) @@ -182,13 +182,13 @@ pub struct ChainSpec { /// /// This is either stored at construction time if it is known using [`once_cell_set`], or /// computed once on the first access. - pub genesis_hash: OnceCell, + pub genesis_hash: OnceLock, /// The header corresponding to the genesis block. /// /// This is either stored at construction time if it is known using [`once_cell_set`], or /// computed once on the first access. - pub genesis_header: OnceCell
, + pub genesis_header: OnceLock
, /// The block at which [`EthereumHardfork::Paris`] was activated and the final difficulty at /// this block. @@ -665,7 +665,7 @@ impl From for ChainSpec { Self { chain: genesis.config.chain_id.into(), genesis, - genesis_hash: OnceCell::new(), + genesis_hash: OnceLock::new(), hardforks: ChainHardforks::new(ordered_hardforks), paris_block_and_final_difficulty, deposit_contract, @@ -898,7 +898,7 @@ impl ChainSpecBuilder { ChainSpec { chain: self.chain.expect("The chain is required"), genesis: self.genesis.expect("The genesis is required"), - genesis_hash: OnceCell::new(), + genesis_hash: OnceLock::new(), hardforks: self.hardforks, paris_block_and_final_difficulty, deposit_contract: None, @@ -2217,7 +2217,7 @@ Post-merge hard forks (timestamp based): let spec = ChainSpec { chain: Chain::mainnet(), genesis: Genesis::default(), - genesis_hash: OnceCell::new(), + genesis_hash: OnceLock::new(), hardforks: ChainHardforks::new(vec![( EthereumHardfork::Frontier.boxed(), ForkCondition::Never, @@ -2235,7 +2235,7 @@ Post-merge hard forks (timestamp based): let spec = ChainSpec { chain: Chain::mainnet(), genesis: Genesis::default(), - genesis_hash: OnceCell::new(), + genesis_hash: OnceLock::new(), hardforks: ChainHardforks::new(vec![( EthereumHardfork::Shanghai.boxed(), ForkCondition::Never, diff --git a/crates/ethereum-forks/Cargo.toml b/crates/ethereum-forks/Cargo.toml index 7eb58b15f..08a0bc98d 100644 --- a/crates/ethereum-forks/Cargo.toml +++ b/crates/ethereum-forks/Cargo.toml @@ -41,5 +41,10 @@ proptest.workspace = true default = ["std", "serde", "rustc-hash"] arbitrary = ["dep:arbitrary", "dep:proptest", "dep:proptest-derive"] serde = ["dep:serde"] -std = ["thiserror-no-std/std", "rustc-hash/std"] +std = [ + "alloy-chains/std", + "alloy-primitives/std", + "thiserror-no-std/std", + "rustc-hash/std", +] rustc-hash = ["dep:rustc-hash"] diff --git a/crates/ethereum-forks/src/hardfork/dev.rs b/crates/ethereum-forks/src/hardfork/dev.rs index 87abd68f2..068e29070 100644 --- a/crates/ethereum-forks/src/hardfork/dev.rs +++ b/crates/ethereum-forks/src/hardfork/dev.rs @@ -1,12 +1,17 @@ use alloc::vec; use alloy_primitives::U256; -use once_cell::sync::Lazy; + +use once_cell as _; +#[cfg(not(feature = "std"))] +use once_cell::sync::Lazy as LazyLock; +#[cfg(feature = "std")] +use std::sync::LazyLock; use crate::{ChainHardforks, EthereumHardfork, ForkCondition}; /// Dev hardforks -pub static DEV_HARDFORKS: Lazy = Lazy::new(|| { +pub static DEV_HARDFORKS: LazyLock = LazyLock::new(|| { ChainHardforks::new(vec![ (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)), (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)), diff --git a/crates/optimism/chainspec/Cargo.toml b/crates/optimism/chainspec/Cargo.toml index e13b95056..30590d4e8 100644 --- a/crates/optimism/chainspec/Cargo.toml +++ b/crates/optimism/chainspec/Cargo.toml @@ -43,4 +43,13 @@ op-alloy-rpc-types.workspace = true [features] default = ["std"] -std = [] \ No newline at end of file +std = [ + "alloy-chains/std", + "alloy-genesis/std", + "alloy-primitives/std", + "op-alloy-rpc-types/std", + "reth-chainspec/std", + "reth-ethereum-forks/std", + "reth-primitives-traits/std", + "reth-optimism-forks/std", +] diff --git a/crates/optimism/chainspec/src/base.rs b/crates/optimism/chainspec/src/base.rs index 3d986b3bc..7aa26bf9a 100644 --- a/crates/optimism/chainspec/src/base.rs +++ b/crates/optimism/chainspec/src/base.rs @@ -1,18 +1,17 @@ //! Chain specification for the Base Mainnet network. -use alloc::sync::Arc; +use alloc::{sync::Arc, vec}; use alloy_chains::Chain; use alloy_primitives::{b256, U256}; -use once_cell::sync::Lazy; use reth_chainspec::{once_cell_set, BaseFeeParams, BaseFeeParamsKind, ChainSpec}; use reth_ethereum_forks::EthereumHardfork; use reth_optimism_forks::OptimismHardfork; -use crate::OpChainSpec; +use crate::{LazyLock, OpChainSpec}; /// The Base mainnet spec -pub static BASE_MAINNET: Lazy> = Lazy::new(|| { +pub static BASE_MAINNET: LazyLock> = LazyLock::new(|| { OpChainSpec { inner: ChainSpec { chain: Chain::base_mainnet(), diff --git a/crates/optimism/chainspec/src/base_sepolia.rs b/crates/optimism/chainspec/src/base_sepolia.rs index 5b85f5a6b..b992dcaba 100644 --- a/crates/optimism/chainspec/src/base_sepolia.rs +++ b/crates/optimism/chainspec/src/base_sepolia.rs @@ -1,18 +1,17 @@ //! Chain specification for the Base Sepolia testnet network. -use alloc::sync::Arc; +use alloc::{sync::Arc, vec}; use alloy_chains::Chain; use alloy_primitives::{b256, U256}; -use once_cell::sync::Lazy; use reth_chainspec::{once_cell_set, BaseFeeParams, BaseFeeParamsKind, ChainSpec}; use reth_ethereum_forks::EthereumHardfork; use reth_optimism_forks::OptimismHardfork; -use crate::OpChainSpec; +use crate::{LazyLock, OpChainSpec}; /// The Base Sepolia spec -pub static BASE_SEPOLIA: Lazy> = Lazy::new(|| { +pub static BASE_SEPOLIA: LazyLock> = LazyLock::new(|| { OpChainSpec { inner: ChainSpec { chain: Chain::base_sepolia(), diff --git a/crates/optimism/chainspec/src/dev.rs b/crates/optimism/chainspec/src/dev.rs index 4724e2801..cb8163dfc 100644 --- a/crates/optimism/chainspec/src/dev.rs +++ b/crates/optimism/chainspec/src/dev.rs @@ -4,18 +4,17 @@ use alloc::sync::Arc; use alloy_chains::Chain; use alloy_primitives::U256; -use once_cell::sync::Lazy; use reth_chainspec::{once_cell_set, BaseFeeParams, BaseFeeParamsKind, ChainSpec}; use reth_optimism_forks::DEV_HARDFORKS; use reth_primitives_traits::constants::DEV_GENESIS_HASH; -use crate::OpChainSpec; +use crate::{LazyLock, OpChainSpec}; /// OP dev testnet specification /// /// Includes 20 prefunded accounts with `10_000` ETH each derived from mnemonic "test test test test /// test test test test test test test junk". -pub static OP_DEV: Lazy> = Lazy::new(|| { +pub static OP_DEV: LazyLock> = LazyLock::new(|| { OpChainSpec { inner: ChainSpec { chain: Chain::dev(), diff --git a/crates/optimism/chainspec/src/lib.rs b/crates/optimism/chainspec/src/lib.rs index 5ebc18f67..a18614240 100644 --- a/crates/optimism/chainspec/src/lib.rs +++ b/crates/optimism/chainspec/src/lib.rs @@ -6,6 +6,7 @@ issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" )] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] +#![cfg_attr(not(feature = "std"), no_std)] extern crate alloc; @@ -16,14 +17,17 @@ mod dev; mod op; mod op_sepolia; +use alloc::{vec, vec::Vec}; use alloy_chains::Chain; use alloy_genesis::Genesis; use alloy_primitives::{Parity, Signature, B256, U256}; pub use base::BASE_MAINNET; pub use base_sepolia::BASE_SEPOLIA; +use core::fmt::Display; use derive_more::{Constructor, Deref, From, Into}; pub use dev::OP_DEV; -use once_cell::sync::OnceCell; +#[cfg(not(feature = "std"))] +pub(crate) use once_cell::sync::Lazy as LazyLock; pub use op::OP_MAINNET; pub use op_sepolia::OP_SEPOLIA; use reth_chainspec::{ @@ -33,7 +37,8 @@ use reth_chainspec::{ use reth_ethereum_forks::{ChainHardforks, EthereumHardfork, ForkCondition, Hardfork}; use reth_network_peers::NodeRecord; use reth_primitives_traits::Header; -use std::fmt::Display; +#[cfg(feature = "std")] +pub(crate) use std::sync::LazyLock; /// Chain spec builder for a OP stack chain. #[derive(Debug, Default, From)] @@ -345,7 +350,6 @@ impl From for OpChainSpec { inner: ChainSpec { chain: genesis.config.chain_id.into(), genesis, - genesis_hash: OnceCell::new(), hardforks: ChainHardforks::new(ordered_hardforks), paris_block_and_final_difficulty, base_fee_params: optimism_genesis_info.base_fee_params, diff --git a/crates/optimism/chainspec/src/op.rs b/crates/optimism/chainspec/src/op.rs index 4e8b13005..8c0da5320 100644 --- a/crates/optimism/chainspec/src/op.rs +++ b/crates/optimism/chainspec/src/op.rs @@ -1,19 +1,18 @@ //! Chain specification for the Optimism Mainnet network. -use alloc::sync::Arc; +use alloc::{sync::Arc, vec}; use alloy_chains::Chain; use alloy_primitives::{b256, U256}; -use once_cell::sync::Lazy; use reth_chainspec::{once_cell_set, BaseFeeParams, BaseFeeParamsKind, ChainSpec}; use reth_ethereum_forks::EthereumHardfork; use reth_optimism_forks::OptimismHardfork; use reth_primitives_traits::constants::ETHEREUM_BLOCK_GAS_LIMIT; -use crate::OpChainSpec; +use crate::{LazyLock, OpChainSpec}; /// The Optimism Mainnet spec -pub static OP_MAINNET: Lazy> = Lazy::new(|| { +pub static OP_MAINNET: LazyLock> = LazyLock::new(|| { OpChainSpec { inner: ChainSpec { chain: Chain::optimism_mainnet(), diff --git a/crates/optimism/chainspec/src/op_sepolia.rs b/crates/optimism/chainspec/src/op_sepolia.rs index 9d453c805..d3243ebd5 100644 --- a/crates/optimism/chainspec/src/op_sepolia.rs +++ b/crates/optimism/chainspec/src/op_sepolia.rs @@ -1,19 +1,18 @@ //! Chain specification for the Optimism Sepolia testnet network. -use alloc::sync::Arc; +use alloc::{sync::Arc, vec}; use alloy_chains::{Chain, NamedChain}; use alloy_primitives::{b256, U256}; -use once_cell::sync::Lazy; use reth_chainspec::{once_cell_set, BaseFeeParams, BaseFeeParamsKind, ChainSpec}; use reth_ethereum_forks::EthereumHardfork; use reth_optimism_forks::OptimismHardfork; use reth_primitives_traits::constants::ETHEREUM_BLOCK_GAS_LIMIT; -use crate::OpChainSpec; +use crate::{LazyLock, OpChainSpec}; /// The OP Sepolia spec -pub static OP_SEPOLIA: Lazy> = Lazy::new(|| { +pub static OP_SEPOLIA: LazyLock> = LazyLock::new(|| { OpChainSpec { inner: ChainSpec { chain: Chain::from_named(NamedChain::OptimismSepolia), diff --git a/crates/optimism/hardforks/src/dev.rs b/crates/optimism/hardforks/src/dev.rs index 07f88d3f8..328ef501c 100644 --- a/crates/optimism/hardforks/src/dev.rs +++ b/crates/optimism/hardforks/src/dev.rs @@ -1,9 +1,13 @@ use alloy_primitives::U256; -use once_cell::sync::Lazy; use reth_ethereum_forks::{ChainHardforks, EthereumHardfork, ForkCondition}; +#[cfg(not(feature = "std"))] +use once_cell::sync::Lazy as LazyLock; +#[cfg(feature = "std")] +use std::sync::LazyLock; + /// Dev hardforks -pub static DEV_HARDFORKS: Lazy = Lazy::new(|| { +pub static DEV_HARDFORKS: LazyLock = LazyLock::new(|| { ChainHardforks::new(vec![ (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)), (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)), diff --git a/crates/primitives/src/transaction/mod.rs b/crates/primitives/src/transaction/mod.rs index 3622b9531..62bef1607 100644 --- a/crates/primitives/src/transaction/mod.rs +++ b/crates/primitives/src/transaction/mod.rs @@ -13,10 +13,14 @@ use alloy_primitives::{Bytes, TxHash}; use alloy_rlp::{Decodable, Encodable, Error as RlpError, Header}; use core::mem; use derive_more::{AsRef, Deref}; -use once_cell::sync::Lazy; +use once_cell as _; +#[cfg(not(feature = "std"))] +use once_cell::sync::Lazy as LazyLock; use rayon::prelude::{IntoParallelIterator, ParallelIterator}; use serde::{Deserialize, Serialize}; use signature::{decode_with_eip155_chain_id, with_eip155_parity}; +#[cfg(feature = "std")] +use std::sync::LazyLock; pub use error::{ InvalidTransactionError, TransactionConversionError, TryFromRecoveredTransactionError, @@ -72,8 +76,8 @@ pub type TxHashOrNumber = BlockHashOrNumber; // Expected number of transactions where we can expect a speed-up by recovering the senders in // parallel. -pub(crate) static PARALLEL_SENDER_RECOVERY_THRESHOLD: Lazy = - Lazy::new(|| match rayon::current_num_threads() { +pub(crate) static PARALLEL_SENDER_RECOVERY_THRESHOLD: LazyLock = + LazyLock::new(|| match rayon::current_num_threads() { 0..=1 => usize::MAX, 2..=8 => 10, _ => 5, diff --git a/crates/rpc/rpc-eth-api/src/helpers/block.rs b/crates/rpc/rpc-eth-api/src/helpers/block.rs index 5d8496abd..9993b477a 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/block.rs @@ -110,6 +110,7 @@ pub trait EthBlocks: LoadBlock { /// Helper function for `eth_getBlockReceipts`. /// /// Returns all transaction receipts in block, or `None` if block wasn't found. + #[allow(clippy::type_complexity)] fn block_receipts( &self, block_id: BlockId, @@ -118,6 +119,7 @@ pub trait EthBlocks: LoadBlock { Self: LoadReceipt; /// Helper method that loads a bock and all its receipts. + #[allow(clippy::type_complexity)] fn load_block_and_receipts( &self, block_id: BlockId, diff --git a/crates/rpc/rpc-eth-api/src/helpers/call.rs b/crates/rpc/rpc-eth-api/src/helpers/call.rs index ff6e93006..cb5c4e79a 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/call.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/call.rs @@ -61,6 +61,7 @@ pub trait EthCall: Call + LoadPendingBlock { /// The transactions are packed into individual blocks. Overrides can be provided. /// /// See also: + #[allow(clippy::type_complexity)] fn simulate_v1( &self, payload: SimulatePayload, diff --git a/crates/storage/provider/Cargo.toml b/crates/storage/provider/Cargo.toml index 048353452..7ef827a37 100644 --- a/crates/storage/provider/Cargo.toml +++ b/crates/storage/provider/Cargo.toml @@ -56,13 +56,14 @@ metrics.workspace = true # misc auto_impl.workspace = true itertools.workspace = true -notify = { workspace = true, default-features = false, features = ["macos_fsevent"] } +notify = { workspace = true, default-features = false, features = [ + "macos_fsevent", +] } parking_lot.workspace = true dashmap = { workspace = true, features = ["inline"] } strum.workspace = true # test-utils -once_cell = { workspace = true, optional = true } reth-ethereum-engine-primitives = { workspace = true, optional = true } alloy-consensus = { workspace = true, optional = true } @@ -79,20 +80,22 @@ parking_lot.workspace = true tempfile.workspace = true assert_matches.workspace = true rand.workspace = true -once_cell.workspace = true eyre.workspace = true alloy-consensus.workspace = true [features] -optimism = ["reth-primitives/optimism", "reth-execution-types/optimism", "reth-optimism-primitives"] +optimism = [ + "reth-primitives/optimism", + "reth-execution-types/optimism", + "reth-optimism-primitives", +] serde = ["reth-execution-types/serde"] test-utils = [ "reth-db/test-utils", "reth-nippy-jar/test-utils", "reth-trie/test-utils", "reth-chain-state/test-utils", - "once_cell", "reth-ethereum-engine-primitives", "alloy-consensus", ] diff --git a/crates/storage/provider/src/test_utils/blocks.rs b/crates/storage/provider/src/test_utils/blocks.rs index f7928319b..e6a886187 100644 --- a/crates/storage/provider/src/test_utils/blocks.rs +++ b/crates/storage/provider/src/test_utils/blocks.rs @@ -5,7 +5,7 @@ use alloy_primitives::{ b256, hex_literal::hex, map::HashMap, Address, BlockNumber, Bytes, Log, Parity, Sealable, TxKind, B256, U256, }; -use once_cell::sync::Lazy; + use reth_db::tables; use reth_db_api::{database::Database, models::StoredBlockBodyIndices}; use reth_primitives::{ @@ -14,7 +14,7 @@ use reth_primitives::{ }; use reth_trie::root::{state_root_unhashed, storage_root_unhashed}; use revm::{db::BundleState, primitives::AccountInfo}; -use std::str::FromStr; +use std::{str::FromStr, sync::LazyLock}; /// Assert genesis block pub fn assert_genesis_block( @@ -61,7 +61,7 @@ pub fn assert_genesis_block( // StageCheckpoints is not updated in tests } -pub(crate) static TEST_BLOCK: Lazy = Lazy::new(|| SealedBlock { +pub(crate) static TEST_BLOCK: LazyLock = LazyLock::new(|| SealedBlock { header: SealedHeader::new( Header { parent_hash: hex!("c86e8cc0310ae7c531c758678ddbfd16fc51c8cef8cec650b032de9869e8b94f")