reth_network/test_utils/
transactions.rs1#![allow(dead_code)]
4
5use crate::{
6 cache::LruCache,
7 transactions::{
8 constants::{
9 tx_fetcher::DEFAULT_MAX_COUNT_FALLBACK_PEERS,
10 tx_manager::DEFAULT_MAX_COUNT_TRANSACTIONS_SEEN_BY_PEER,
11 },
12 fetcher::{TransactionFetcher, TxFetchMetadata},
13 PeerMetadata, TransactionsManager,
14 },
15 NetworkConfigBuilder, NetworkManager,
16};
17use alloy_primitives::TxHash;
18use reth_eth_wire::EthVersion;
19use reth_eth_wire_types::EthNetworkPrimitives;
20use reth_network_api::{PeerKind, PeerRequest, PeerRequestSender};
21use reth_network_peers::PeerId;
22use reth_storage_api::noop::NoopProvider;
23use reth_transaction_pool::test_utils::{testing_pool, TestPool};
24use secp256k1::SecretKey;
25use std::sync::Arc;
26use tokio::sync::mpsc;
27use tracing::trace;
28
29pub async fn new_tx_manager(
31) -> (TransactionsManager<TestPool, EthNetworkPrimitives>, NetworkManager<EthNetworkPrimitives>) {
32 let secret_key = SecretKey::new(&mut rand_08::thread_rng());
33 let client = NoopProvider::default();
34
35 let config = NetworkConfigBuilder::new(secret_key)
36 .listener_port(0)
38 .disable_discovery()
39 .build(client);
40
41 let pool = testing_pool();
42
43 let transactions_manager_config = config.transactions_manager_config.clone();
44 let (_network_handle, network, transactions, _) = NetworkManager::new(config)
45 .await
46 .unwrap()
47 .into_builder()
48 .transactions(pool.clone(), transactions_manager_config)
49 .split_with_handle();
50
51 (transactions, network)
52}
53
54pub fn buffer_hash_to_tx_fetcher(
56 tx_fetcher: &mut TransactionFetcher,
57 hash: TxHash,
58 peer_id: PeerId,
59 retries: u8,
60 tx_encoded_length: Option<usize>,
61) {
62 match tx_fetcher.hashes_fetch_inflight_and_pending_fetch.get_or_insert(hash, || {
63 TxFetchMetadata::new(
64 retries,
65 LruCache::new(DEFAULT_MAX_COUNT_FALLBACK_PEERS as u32),
66 tx_encoded_length,
67 )
68 }) {
69 Some(metadata) => {
70 metadata.fallback_peers_mut().insert(peer_id);
71 }
72 None => {
73 trace!(target: "net::tx",
74 peer_id=format!("{peer_id:#}"),
75 %hash,
76 "failed to insert hash from peer in schnellru::LruMap, dropping hash"
77 )
78 }
79 }
80
81 tx_fetcher.hashes_pending_fetch.insert(hash);
82}
83
84pub fn new_mock_session(
86 peer_id: PeerId,
87 version: EthVersion,
88) -> (PeerMetadata<EthNetworkPrimitives>, mpsc::Receiver<PeerRequest>) {
89 let (to_mock_session_tx, to_mock_session_rx) = mpsc::channel(1);
90
91 (
92 PeerMetadata::new(
93 PeerRequestSender::new(peer_id, to_mock_session_tx),
94 version,
95 Arc::from(""),
96 DEFAULT_MAX_COUNT_TRANSACTIONS_SEEN_BY_PEER,
97 PeerKind::Trusted,
98 ),
99 to_mock_session_rx,
100 )
101}