reth_transaction_pool/test_utils/
okvalidator.rs

1use std::marker::PhantomData;
2
3use crate::{
4    validate::ValidTransaction, EthPooledTransaction, PoolTransaction, TransactionOrigin,
5    TransactionValidationOutcome, TransactionValidator,
6};
7
8/// A transaction validator that determines all transactions to be valid.
9#[derive(Debug)]
10#[non_exhaustive]
11pub struct OkValidator<T = EthPooledTransaction> {
12    _phantom: PhantomData<T>,
13}
14
15impl<T> Default for OkValidator<T> {
16    fn default() -> Self {
17        Self { _phantom: Default::default() }
18    }
19}
20
21impl<T> TransactionValidator for OkValidator<T>
22where
23    T: PoolTransaction,
24{
25    type Transaction = T;
26
27    async fn validate_transaction(
28        &self,
29        _origin: TransactionOrigin,
30        transaction: Self::Transaction,
31    ) -> TransactionValidationOutcome<Self::Transaction> {
32        // Always return valid
33        let authorities = transaction.authorization_list().map(|auths| {
34            auths.iter().flat_map(|auth| auth.recover_authority()).collect::<Vec<_>>()
35        });
36        TransactionValidationOutcome::Valid {
37            balance: *transaction.cost(),
38            state_nonce: transaction.nonce(),
39            bytecode_hash: None,
40            transaction: ValidTransaction::Valid(transaction),
41            propagate: false,
42            authorities,
43        }
44    }
45}