Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add SealedBlock in reth-primitives-traits #13735

Merged
merged 107 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
4fd867c
feat: add SealedBlock in reth-primitives-traits
mattsse Jan 8, 2025
0fc2211
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 8, 2025
49cfe7c
add arbitrary
mattsse Jan 8, 2025
b737144
chore: add default
mattsse Jan 8, 2025
680e9ae
impl deref
mattsse Jan 8, 2025
6768f31
misc
mattsse Jan 8, 2025
6d15432
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 8, 2025
f59cee1
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 9, 2025
c080738
chore: integrate Test trait for sealed types
mattsse Jan 9, 2025
acbd85f
chore: integrate Test trait for sealed types
mattsse Jan 9, 2025
383849d
Merge branch 'matt/use-test-trait-fns' into matt/introduce-sealed-blo…
mattsse Jan 9, 2025
f36777c
test-utils
mattsse Jan 9, 2025
0bdb013
add recovered block type
mattsse Jan 9, 2025
a4cb795
chore: add a bunch of constructors
mattsse Jan 9, 2025
6b563ab
chore: add a bunch of constructors
mattsse Jan 9, 2025
46dd767
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 9, 2025
4af78d3
chore: add arbitrary
mattsse Jan 9, 2025
020e6c6
impl bincode compat
mattsse Jan 9, 2025
ed70cbe
impl bincode compat
mattsse Jan 9, 2025
43e5eae
add default
mattsse Jan 9, 2025
1cffb51
add num hash
mattsse Jan 9, 2025
4b4079e
add bidrectionals
mattsse Jan 9, 2025
61c6b3a
add aliases
mattsse Jan 9, 2025
d8e218a
add helpers
mattsse Jan 9, 2025
2c693b3
add rlp
mattsse Jan 9, 2025
684b69e
misc
mattsse Jan 9, 2025
7e036b8
misc
mattsse Jan 9, 2025
1f6ce03
misc
mattsse Jan 9, 2025
1abb27e
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 9, 2025
28e7e54
add test utils
mattsse Jan 9, 2025
f158d97
rename functions
mattsse Jan 9, 2025
916593a
add aliases
mattsse Jan 9, 2025
cb922dc
make all compile
mattsse Jan 9, 2025
7c8e61f
migrate a few crates
mattsse Jan 9, 2025
0c390e1
migrate consensus
mattsse Jan 9, 2025
17abe0f
migrate p2p
mattsse Jan 9, 2025
cd46b9d
some progress
mattsse Jan 9, 2025
8529cc3
bincompat block
mattsse Jan 9, 2025
eb11602
bincompat block
mattsse Jan 9, 2025
29b393d
bincompat block
mattsse Jan 9, 2025
c34dbf6
rename
mattsse Jan 9, 2025
a3c2493
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 10, 2025
5a1d4e8
add test fns
mattsse Jan 10, 2025
2117d89
port more things
mattsse Jan 10, 2025
026501c
migrate downloaders
mattsse Jan 10, 2025
e63fe61
transition more
mattsse Jan 10, 2025
c064b2d
transition more
mattsse Jan 10, 2025
c0e9d72
migrate more
mattsse Jan 10, 2025
0b75179
make it compile
mattsse Jan 10, 2025
cd75030
make it compile
mattsse Jan 10, 2025
d44e671
migrate pool
mattsse Jan 10, 2025
ef4a3ca
migrate eth evm
mattsse Jan 10, 2025
d06c860
migrate op evm
mattsse Jan 10, 2025
e4bbb25
migrate rpc
mattsse Jan 10, 2025
c33c43e
migrate exex types
mattsse Jan 10, 2025
7b4e638
migrate exex
mattsse Jan 10, 2025
b462b49
migrate stages
mattsse Jan 10, 2025
61e6ae7
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 10, 2025
51654d5
migrate downloaders
mattsse Jan 10, 2025
82ffabe
migrate more
mattsse Jan 10, 2025
12f2f39
migrate benches
mattsse Jan 10, 2025
4588326
migrate builder
mattsse Jan 10, 2025
252f6b1
make it compile
mattsse Jan 10, 2025
a304712
make it compile
mattsse Jan 10, 2025
6872112
make it compile
mattsse Jan 10, 2025
2d43dc1
make it compile
mattsse Jan 10, 2025
e9d7ae4
make it compile
mattsse Jan 10, 2025
5fe5cc0
rustfmt
mattsse Jan 10, 2025
f55b6f4
lazy hashing
mattsse Jan 10, 2025
e315b6a
lazy hashing
mattsse Jan 10, 2025
de52f09
lazy hashing
mattsse Jan 10, 2025
8df9856
deprecate legacy naming
mattsse Jan 10, 2025
376b331
deprecate legacy naming
mattsse Jan 10, 2025
d78f8fc
retire Bodyext
mattsse Jan 10, 2025
2ea2153
split sealed block
mattsse Jan 10, 2025
e8f2cfa
embedd sealed in recovered
mattsse Jan 10, 2025
5318b13
embedd sealed in recovered
mattsse Jan 10, 2025
6764fc0
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 11, 2025
72649c3
disable bincode
mattsse Jan 11, 2025
a7ce621
fix bincode
mattsse Jan 11, 2025
54915b8
fix test fns
mattsse Jan 11, 2025
ad7d8f6
make it compile
mattsse Jan 11, 2025
aea3c94
rm block fn
mattsse Jan 11, 2025
dc9d1f4
chore: docs
mattsse Jan 11, 2025
4c2d7a4
rm clones
mattsse Jan 11, 2025
b656b2b
rm clones
mattsse Jan 11, 2025
619620a
rm clones
mattsse Jan 11, 2025
39728dd
docs
mattsse Jan 11, 2025
8e4cb0b
fixes
mattsse Jan 11, 2025
5649fbf
naming
mattsse Jan 11, 2025
7b68cc7
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 11, 2025
2fe6d51
relax static
mattsse Jan 11, 2025
dd1d623
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 11, 2025
4692c06
simplify compat
mattsse Jan 11, 2025
3ad1e78
simplify compat
mattsse Jan 11, 2025
22282d1
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 11, 2025
2b4fa8e
chore: add sealed conversion
mattsse Jan 11, 2025
1b8ea45
chore: unify naming
mattsse Jan 11, 2025
1d18749
rm redundant where
mattsse Jan 11, 2025
9d581e8
add sealable from impls
mattsse Jan 11, 2025
e12e149
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 13, 2025
72c451f
rm redundantbounds
mattsse Jan 13, 2025
b1077ea
rename
mattsse Jan 13, 2025
990cc33
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 14, 2025
71a485c
hide engineservice docs
mattsse Jan 14, 2025
4a81de2
Merge branch 'main' into matt/introduce-sealed-block-in-reth-primitiv…
mattsse Jan 14, 2025
5f2d659
cleanup
mattsse Jan 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
461 changes: 227 additions & 234 deletions Cargo.lock

Large diffs are not rendered by default.

21 changes: 19 additions & 2 deletions bin/reth-bench/src/bench/new_payload_fcu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ use crate::{
valid_payload::{call_forkchoice_updated, call_new_payload},
};
use alloy_primitives::B256;
use alloy_provider::Provider;
use alloy_provider::{network::AnyRpcBlock, Provider};
use alloy_rpc_types_engine::ForkchoiceState;
use clap::Parser;
use csv::Writer;
use reth_cli_runner::CliContext;
use reth_node_core::args::BenchmarkArgs;
use reth_primitives::SealedBlock;
use reth_primitives_traits::SealedHeader;
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::time::Instant;
use tracing::{debug, info};
Expand Down Expand Up @@ -46,7 +47,7 @@ impl Command {
let block_res =
block_provider.get_block_by_number(next_block.into(), true.into()).await;
let block = block_res.unwrap().unwrap();
let block: SealedBlock = block.try_into().unwrap();
let block = from_any_rpc_block(block);
let head_block_hash = block.hash();
let safe_block_hash = block_provider
.get_block_by_number(block.number.saturating_sub(32).into(), false.into());
Expand Down Expand Up @@ -161,3 +162,19 @@ impl Command {
Ok(())
}
}

// TODO(mattsse): integrate in alloy
pub(crate) fn from_any_rpc_block(block: AnyRpcBlock) -> SealedBlock {
let block = block.inner;
let block_hash = block.header.hash;
let block = block.try_map_transactions(|tx| tx.try_into()).unwrap();

SealedBlock::from_sealed_parts(
SealedHeader::new(block.header.inner.into_header_with_defaults(), block_hash),
reth_primitives::BlockBody {
transactions: block.transactions.into_transactions().collect(),
ommers: Default::default(),
withdrawals: block.withdrawals.map(|w| w.into_inner().into()),
},
)
}
4 changes: 2 additions & 2 deletions bin/reth-bench/src/bench/new_payload_only.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use crate::{
bench::{
context::BenchContext,
new_payload_fcu::from_any_rpc_block,
output::{
NewPayloadResult, TotalGasOutput, TotalGasRow, GAS_OUTPUT_SUFFIX,
NEW_PAYLOAD_OUTPUT_SUFFIX,
Expand All @@ -16,7 +17,6 @@ use clap::Parser;
use csv::Writer;
use reth_cli_runner::CliContext;
use reth_node_core::args::BenchmarkArgs;
use reth_primitives::SealedBlock;
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::time::Instant;
use tracing::{debug, info};
Expand Down Expand Up @@ -46,7 +46,7 @@ impl Command {
let block_res =
block_provider.get_block_by_number(next_block.into(), true.into()).await;
let block = block_res.unwrap().unwrap();
let block: SealedBlock = block.try_into().unwrap();
let block = from_any_rpc_block(block);

next_block += 1;
sender.send(block).await.unwrap();
Expand Down
19 changes: 7 additions & 12 deletions bin/reth/src/commands/debug_cmd/build_block.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//! Command for debugging block building.
use alloy_consensus::TxEip4844;
use alloy_consensus::{BlockHeader, TxEip4844};
use alloy_eips::{
eip2718::Encodable2718,
eip4844::{env_settings::EnvKzgSettings, BlobTransactionSidecar},
Expand All @@ -24,10 +24,8 @@ use reth_execution_types::ExecutionOutcome;
use reth_fs_util as fs;
use reth_node_api::{BlockTy, EngineApiMessageVersion, PayloadBuilderAttributes};
use reth_node_ethereum::{consensus::EthBeaconConsensus, EthEvmConfig, EthExecutorProvider};
use reth_primitives::{
BlockExt, EthPrimitives, SealedBlockFor, SealedBlockWithSenders, SealedHeader, Transaction,
TransactionSigned,
};
use reth_primitives::{EthPrimitives, SealedBlock, SealedHeader, Transaction, TransactionSigned};
use reth_primitives_traits::Block as _;
use reth_provider::{
providers::{BlockchainProvider, ProviderNodeTypes},
BlockHashReader, BlockReader, BlockWriter, ChainSpecProvider, ProviderFactory,
Expand Down Expand Up @@ -86,7 +84,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
fn lookup_best_block<N: ProviderNodeTypes<ChainSpec = C::ChainSpec>>(
&self,
factory: ProviderFactory<N>,
) -> RethResult<Arc<SealedBlockFor<BlockTy<N>>>> {
) -> RethResult<Arc<SealedBlock<BlockTy<N>>>> {
let provider = factory.provider()?;

let best_number =
Expand Down Expand Up @@ -241,17 +239,14 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
consensus.validate_header(block.sealed_header())?;
consensus.validate_block_pre_execution(block)?;

let senders = block.senders().expect("sender recovery failed");
let block_with_senders =
SealedBlockWithSenders::<BlockTy<N>>::new(block.clone(), senders).unwrap();
let block_with_senders = block.clone().try_recover().unwrap();

let state_provider = blockchain_db.latest()?;
let db = StateProviderDatabase::new(&state_provider);
let executor =
EthExecutorProvider::ethereum(provider_factory.chain_spec()).executor(db);

let block_execution_output =
executor.execute(&block_with_senders.clone().unseal())?;
let block_execution_output = executor.execute(&block_with_senders)?;
let execution_outcome =
ExecutionOutcome::from((block_execution_output, block.number));
debug!(target: "reth::cli", ?execution_outcome, "Executed block");
Expand All @@ -262,7 +257,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
hashed_post_state.clone(),
)?;

if state_root != block_with_senders.state_root {
if state_root != block_with_senders.state_root() {
eyre::bail!(
"state root mismatch. expected: {}. got: {}",
block_with_senders.state_root,
Expand Down
6 changes: 3 additions & 3 deletions bin/reth/src/commands/debug_cmd/execution.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Command for debugging execution.

use crate::{args::NetworkArgs, utils::get_single_header};
use crate::{api::BlockTy, args::NetworkArgs, utils::get_single_header};
use alloy_eips::BlockHashOrNumber;
use alloy_primitives::{BlockNumber, B256};
use clap::Parser;
Expand Down Expand Up @@ -64,7 +64,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
&self,
config: &Config,
client: Client,
consensus: Arc<dyn Consensus<Error = ConsensusError>>,
consensus: Arc<dyn Consensus<BlockTy<N>, Error = ConsensusError>>,
provider_factory: ProviderFactory<N>,
task_executor: &TaskExecutor,
static_file_producer: StaticFileProducer<ProviderFactory<N>>,
Expand Down Expand Up @@ -172,7 +172,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
let Environment { provider_factory, config, data_dir } =
self.env.init::<N>(AccessRights::RW)?;

let consensus: Arc<dyn Consensus<Error = ConsensusError>> =
let consensus: Arc<dyn Consensus<BlockTy<N>, Error = ConsensusError>> =
Arc::new(EthBeaconConsensus::new(provider_factory.chain_spec()));

// Configure and build network
Expand Down
45 changes: 20 additions & 25 deletions bin/reth/src/commands/debug_cmd/in_memory_merkle.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
//! Command for debugging in-memory merkle trie calculation.

use crate::{
api::BlockTy,
args::NetworkArgs,
utils::{get_single_body, get_single_header},
};
use alloy_consensus::BlockHeader;
use alloy_eips::BlockHashOrNumber;
use backon::{ConstantBuilder, Retryable};
use clap::Parser;
Expand All @@ -18,9 +20,9 @@ use reth_evm::execute::{BlockExecutorProvider, Executor};
use reth_execution_types::ExecutionOutcome;
use reth_network::{BlockDownloaderProvider, NetworkHandle};
use reth_network_api::NetworkInfo;
use reth_node_api::{BlockTy, NodePrimitives};
use reth_node_api::NodePrimitives;
use reth_node_ethereum::{consensus::EthBeaconConsensus, EthExecutorProvider};
use reth_primitives::{BlockExt, EthPrimitives};
use reth_primitives::{EthPrimitives, SealedBlock};
use reth_provider::{
providers::ProviderNodeTypes, AccountExtReader, ChainSpecProvider, DatabaseProviderFactory,
HashedPostStateProvider, HashingWriter, LatestStateProviderRef, OriginalValuesKnown,
Expand Down Expand Up @@ -135,33 +137,27 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
let client = fetch_client.clone();
let chain = provider_factory.chain_spec();
let consensus = Arc::new(EthBeaconConsensus::new(chain.clone()));
let block = (move || get_single_body(client.clone(), header.clone(), consensus.clone()))
.retry(backoff)
.notify(
|err, _| warn!(target: "reth::cli", "Error requesting body: {err}. Retrying..."),
)
.await?;
let block: SealedBlock<BlockTy<N>> = (move || {
get_single_body(client.clone(), header.clone(), consensus.clone())
})
.retry(backoff)
.notify(|err, _| warn!(target: "reth::cli", "Error requesting body: {err}. Retrying..."))
.await?;

let state_provider = LatestStateProviderRef::new(&provider);
let db = StateProviderDatabase::new(&state_provider);

let executor = EthExecutorProvider::ethereum(provider_factory.chain_spec()).executor(db);
let block_execution_output = executor.execute(
&block
.clone()
.unseal::<BlockTy<N>>()
.with_recovered_senders()
.ok_or(BlockValidationError::SenderRecoveryError)?,
)?;
let execution_outcome = ExecutionOutcome::from((block_execution_output, block.number));
let block_execution_output = executor.execute(&block.clone().try_recover()?)?;
let execution_outcome = ExecutionOutcome::from((block_execution_output, block.number()));

// Unpacked `BundleState::state_root_slow` function
let (in_memory_state_root, in_memory_updates) = StateRoot::overlay_root_with_updates(
provider.tx_ref(),
state_provider.hashed_post_state(execution_outcome.state()),
)?;

if in_memory_state_root == block.state_root {
if in_memory_state_root == block.state_root() {
info!(target: "reth::cli", state_root = ?in_memory_state_root, "Computed in-memory state root matches");
return Ok(())
}
Expand All @@ -170,28 +166,27 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {

// Insert block, state and hashes
provider_rw.insert_historical_block(
block
.clone()
.try_seal_with_senders()
.map_err(|_| BlockValidationError::SenderRecoveryError)?,
block.clone().try_recover().map_err(|_| BlockValidationError::SenderRecoveryError)?,
)?;
provider_rw.write_state(
&execution_outcome,
OriginalValuesKnown::No,
StorageLocation::Database,
)?;
let storage_lists = provider_rw.changed_storages_with_range(block.number..=block.number)?;
let storage_lists =
provider_rw.changed_storages_with_range(block.number..=block.number())?;
let storages = provider_rw.plain_state_storages(storage_lists)?;
provider_rw.insert_storage_for_hashing(storages)?;
let account_lists = provider_rw.changed_accounts_with_range(block.number..=block.number)?;
let account_lists =
provider_rw.changed_accounts_with_range(block.number..=block.number())?;
let accounts = provider_rw.basic_accounts(account_lists)?;
provider_rw.insert_account_for_hashing(accounts)?;

let (state_root, incremental_trie_updates) = StateRoot::incremental_root_with_updates(
provider_rw.tx_ref(),
block.number..=block.number,
block.number..=block.number(),
)?;
if state_root != block.state_root {
if state_root != block.state_root() {
eyre::bail!(
"Computed incremental state root mismatch. Expected: {:?}. Got: {:?}",
block.state_root,
Expand Down
12 changes: 6 additions & 6 deletions bin/reth/src/commands/debug_cmd/merkle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//! Command for debugging merkle tree calculation.
use crate::{args::NetworkArgs, utils::get_single_header};
use alloy_consensus::BlockHeader;
use alloy_eips::BlockHashOrNumber;
use backon::{ConstantBuilder, Retryable};
use clap::Parser;
Expand Down Expand Up @@ -128,7 +129,7 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {
info!(target: "reth::cli", target_block_number=self.to, "Finished downloading tip of block range");

// build the full block client
let consensus: Arc<dyn Consensus<Error = ConsensusError>> =
let consensus: Arc<dyn Consensus<BlockTy<N>, Error = ConsensusError>> =
Arc::new(EthBeaconConsensus::new(provider_factory.chain_spec()));
let block_range_client = FullBlockClient::new(fetch_client, consensus);

Expand All @@ -153,18 +154,17 @@ impl<C: ChainSpecParser<ChainSpec = ChainSpec>> Command<C> {

for block in blocks.into_iter().rev() {
let block_number = block.number;
let sealed_block = block
.try_seal_with_senders::<BlockTy<N>>()
.map_err(|block| eyre::eyre!("Error sealing block with senders: {block:?}"))?;
let sealed_block =
block.try_recover().map_err(|_| eyre::eyre!("Error sealing block with senders"))?;
trace!(target: "reth::cli", block_number, "Executing block");

provider_rw.insert_block(sealed_block.clone(), StorageLocation::Database)?;

td += sealed_block.difficulty;
td += sealed_block.difficulty();
let mut executor = executor_provider.batch_executor(StateProviderDatabase::new(
LatestStateProviderRef::new(&provider_rw),
));
executor.execute_and_verify_one(&sealed_block.clone().unseal())?;
executor.execute_and_verify_one(&sealed_block)?;
let execution_outcome = executor.finalize();

provider_rw.write_state(
Expand Down
10 changes: 7 additions & 3 deletions book/sources/exex/tracking-state/src/bin/2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ use std::{

use alloy_primitives::BlockNumber;
use futures_util::{FutureExt, TryStreamExt};
use reth::{api::FullNodeComponents, builder::NodeTypes, primitives::EthPrimitives};
use reth::{
api::{BlockBody, FullNodeComponents},
builder::NodeTypes,
primitives::EthPrimitives,
};
use reth_exex::{ExExContext, ExExEvent};
use reth_node_ethereum::EthereumNode;
use reth_tracing::tracing::info;
Expand Down Expand Up @@ -36,7 +40,7 @@ impl<Node: FullNodeComponents<Types: NodeTypes<Primitives = EthPrimitives>>> Fut
while let Some(notification) = ready!(this.ctx.notifications.try_next().poll_unpin(cx))? {
if let Some(reverted_chain) = notification.reverted_chain() {
this.transactions = this.transactions.saturating_sub(
reverted_chain.blocks_iter().map(|b| b.body().transactions.len() as u64).sum(),
reverted_chain.blocks_iter().map(|b| b.body().transaction_count() as u64).sum(),
);
}

Expand All @@ -45,7 +49,7 @@ impl<Node: FullNodeComponents<Types: NodeTypes<Primitives = EthPrimitives>>> Fut

this.transactions += committed_chain
.blocks_iter()
.map(|b| b.body().transactions.len() as u64)
.map(|b| b.body().transaction_count() as u64)
.sum::<u64>();

this.ctx
Expand Down
1 change: 1 addition & 0 deletions crates/chain-state/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ alloy-signer-local = { workspace = true, optional = true }
rand = { workspace = true, optional = true }

[dev-dependencies]
reth-primitives-traits = { workspace = true, features = ["test-utils"] }
reth-testing-utils.workspace = true
alloy-signer.workspace = true
alloy-signer-local.workspace = true
Expand Down
Loading
Loading