1use arb_primitives::ArbTransactionSigned;
4use arb_txpool::ArbPooledTransaction;
5use reth_chainspec::EthereumHardforks;
6use reth_node_builder::{
7 components::{PoolBuilder, TxPoolBuilder},
8 BuilderContext, FullNodeTypes, NodeTypes,
9};
10use reth_primitives_traits::NodePrimitives;
11use reth_transaction_pool::{
12 CoinbaseTipOrdering, EthTransactionPool, TransactionValidationTaskExecutor,
13};
14use tracing::{debug, info};
15
16pub type ArbTransactionPool<Client, Evm> =
18 EthTransactionPool<Client, reth_transaction_pool::blobstore::DiskFileBlobStore, Evm>;
19
20#[derive(Debug, Default, Clone, Copy)]
22pub struct ArbPoolBuilder;
23
24impl<Types, Node, Evm> PoolBuilder<Node, Evm> for ArbPoolBuilder
25where
26 Types: NodeTypes<
27 ChainSpec: EthereumHardforks,
28 Primitives: NodePrimitives<SignedTx = ArbTransactionSigned>,
29 >,
30 Node: FullNodeTypes<Types = Types>,
31 Evm: reth_evm::ConfigureEvm<Primitives = Types::Primitives> + Clone + 'static,
32{
33 type Pool = reth_transaction_pool::Pool<
34 TransactionValidationTaskExecutor<
35 reth_transaction_pool::EthTransactionValidator<
36 Node::Provider,
37 ArbPooledTransaction,
38 Evm,
39 >,
40 >,
41 CoinbaseTipOrdering<ArbPooledTransaction>,
42 reth_transaction_pool::blobstore::DiskFileBlobStore,
43 >;
44
45 async fn build_pool(
46 self,
47 ctx: &BuilderContext<Node>,
48 evm_config: Evm,
49 ) -> eyre::Result<Self::Pool> {
50 let pool_config = ctx.pool_config();
51
52 let blob_store = reth_node_builder::components::create_blob_store_with_cache(ctx, Some(0))?;
53
54 let validator =
55 TransactionValidationTaskExecutor::eth_builder(ctx.provider().clone(), evm_config)
56 .set_eip4844(false)
57 .with_max_tx_input_bytes(ctx.config().txpool.max_tx_input_bytes)
58 .with_local_transactions_config(pool_config.local_transactions_config.clone())
59 .set_tx_fee_cap(ctx.config().rpc.rpc_tx_fee_cap)
60 .with_max_tx_gas_limit(ctx.config().txpool.max_tx_gas_limit)
61 .with_minimum_priority_fee(ctx.config().txpool.minimum_priority_fee)
62 .with_additional_tasks(ctx.config().txpool.additional_validation_tasks)
63 .build_with_tasks(ctx.task_executor().clone(), blob_store.clone());
64
65 let transaction_pool = TxPoolBuilder::new(ctx)
66 .with_validator(validator)
67 .build_and_spawn_maintenance_task(blob_store, pool_config)?;
68
69 info!(target: "reth::cli", "Transaction pool initialized");
70 debug!(target: "reth::cli", "Spawned txpool maintenance task");
71
72 Ok(transaction_pool)
73 }
74}