reth_transaction_pool/test_utils/
okvalidator.rs1use std::marker::PhantomData;
2
3use crate::{
4 validate::ValidTransaction, EthPooledTransaction, PoolTransaction, TransactionOrigin,
5 TransactionValidationOutcome, TransactionValidator,
6};
7use reth_ethereum_primitives::Block;
8
9#[derive(Debug)]
11#[non_exhaustive]
12pub struct OkValidator<T = EthPooledTransaction> {
13 _phantom: PhantomData<T>,
14 propagate: bool,
16}
17
18impl<T> OkValidator<T> {
19 pub const fn set_propagate_transactions(mut self, propagate: bool) -> Self {
21 self.propagate = propagate;
22 self
23 }
24}
25
26impl<T> Default for OkValidator<T> {
27 fn default() -> Self {
28 Self { _phantom: Default::default(), propagate: false }
29 }
30}
31
32impl<T> TransactionValidator for OkValidator<T>
33where
34 T: PoolTransaction,
35{
36 type Transaction = T;
37 type Block = Block;
38
39 async fn validate_transaction(
40 &self,
41 _origin: TransactionOrigin,
42 transaction: Self::Transaction,
43 ) -> TransactionValidationOutcome<Self::Transaction> {
44 let authorities = transaction.authorization_list().map(|auths| {
46 auths.iter().flat_map(|auth| auth.recover_authority()).collect::<Vec<_>>()
47 });
48 TransactionValidationOutcome::Valid {
49 balance: *transaction.cost(),
50 state_nonce: transaction.nonce(),
51 bytecode_hash: None,
52 transaction: ValidTransaction::Valid(transaction),
53 propagate: self.propagate,
54 authorities,
55 }
56 }
57}