Skip to content

Commit bcefb00

Browse files
authored
chore: moved OkValidator into txpool behind test-utils feature gate (paradigmxyz#16144)
1 parent 5cb481c commit bcefb00

File tree

6 files changed

+58
-81
lines changed

6 files changed

+58
-81
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/ethereum/node/tests/e2e/pool.rs

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::utils::eth_payload_attributes;
2-
use alloy_consensus::{EthereumTxEnvelope, Transaction, TxEip4844};
2+
use alloy_consensus::{EthereumTxEnvelope, TxEip4844};
33
use alloy_eips::{eip1559::ETHEREUM_BLOCK_GAS_LIMIT_30M, Encodable2718};
44
use alloy_genesis::Genesis;
55
use alloy_primitives::B256;
@@ -14,47 +14,11 @@ use reth_primitives_traits::Recovered;
1414
use reth_provider::CanonStateSubscriptions;
1515
use reth_tasks::TaskManager;
1616
use reth_transaction_pool::{
17-
blobstore::InMemoryBlobStore, validate::ValidTransaction, BlockInfo, CoinbaseTipOrdering,
18-
EthPooledTransaction, Pool, PoolTransaction, TransactionOrigin, TransactionPool,
19-
TransactionPoolExt, TransactionValidationOutcome, TransactionValidator,
17+
blobstore::InMemoryBlobStore, test_utils::OkValidator, BlockInfo, CoinbaseTipOrdering,
18+
EthPooledTransaction, Pool, TransactionOrigin, TransactionPool, TransactionPoolExt,
2019
};
2120
use std::sync::Arc;
2221

23-
/// A transaction validator that determines all transactions to be valid.
24-
///
25-
/// An actual validator impl like
26-
/// [`TransactionValidationTaskExecutor`](reth_transaction_pool::pool::TransactionValidationTaskExecutor)
27-
/// would require up to date db access.
28-
///
29-
/// CAUTION: This validator is not safe to use since it doesn't actually validate the transaction's
30-
/// properties such as chain id, balance, nonce, etc.
31-
#[derive(Debug, Default)]
32-
#[non_exhaustive]
33-
struct OkValidator;
34-
35-
impl TransactionValidator for OkValidator {
36-
type Transaction = EthPooledTransaction;
37-
38-
async fn validate_transaction(
39-
&self,
40-
_origin: TransactionOrigin,
41-
transaction: Self::Transaction,
42-
) -> TransactionValidationOutcome<Self::Transaction> {
43-
// Always return valid
44-
let authorities = transaction.authorization_list().map(|auths| {
45-
auths.iter().flat_map(|auth| auth.recover_authority()).collect::<Vec<_>>()
46-
});
47-
TransactionValidationOutcome::Valid {
48-
balance: *transaction.cost(),
49-
state_nonce: transaction.nonce(),
50-
bytecode_hash: None,
51-
transaction: ValidTransaction::Valid(transaction),
52-
propagate: false,
53-
authorities,
54-
}
55-
}
56-
}
57-
5822
// Test that the pool's maintenance task can correctly handle `CanonStateNotification::Commit`
5923
// events
6024
#[tokio::test]

crates/transaction-pool/src/test_utils/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ pub use mock::*;
1111

1212
mod pool;
1313

14+
mod okvalidator;
15+
pub use okvalidator::*;
16+
1417
/// A [Pool] used for testing
1518
pub type TestPool =
1619
Pool<MockTransactionValidator<MockTransaction>, MockOrdering, InMemoryBlobStore>;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use std::marker::PhantomData;
2+
3+
use 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]
11+
pub struct OkValidator<T = EthPooledTransaction> {
12+
_phantom: PhantomData<T>,
13+
}
14+
15+
impl<T> Default for OkValidator<T> {
16+
fn default() -> Self {
17+
Self { _phantom: Default::default() }
18+
}
19+
}
20+
21+
impl<T> TransactionValidator for OkValidator<T>
22+
where
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+
}

examples/network-txpool/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ edition.workspace = true
66
license.workspace = true
77

88
[dependencies]
9-
alloy-consensus.workspace = true
109
reth-ethereum = { workspace = true, features = ["test-utils", "network", "pool", "provider"] }
1110
eyre.workspace = true
1211
tokio.workspace = true

examples/network-txpool/src/main.rs

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@
99
1010
#![warn(unused_crate_dependencies)]
1111

12-
use alloy_consensus::Transaction;
1312
use reth_ethereum::{
1413
network::{config::rng_secret_key, EthNetworkPrimitives, NetworkConfig, NetworkManager},
1514
pool::{
16-
blobstore::InMemoryBlobStore, validate::ValidTransaction, CoinbaseTipOrdering,
17-
EthPooledTransaction, PoolTransaction, TransactionListenerKind, TransactionOrigin,
18-
TransactionPool, TransactionValidationOutcome, TransactionValidator,
15+
blobstore::InMemoryBlobStore, test_utils::OkValidator, CoinbaseTipOrdering,
16+
EthPooledTransaction, Pool, TransactionListenerKind, TransactionPool,
1917
},
2018
provider::test_utils::NoopProvider,
2119
};
@@ -28,7 +26,11 @@ async fn main() -> eyre::Result<()> {
2826
// remote or able to validate transaction against the latest state.
2927
let client = NoopProvider::default();
3028

31-
let pool = reth_ethereum::pool::Pool::new(
29+
let pool: Pool<
30+
OkValidator<EthPooledTransaction>,
31+
CoinbaseTipOrdering<EthPooledTransaction>,
32+
InMemoryBlobStore,
33+
> = reth_ethereum::pool::Pool::new(
3234
OkValidator::default(),
3335
CoinbaseTipOrdering::default(),
3436
InMemoryBlobStore::default(),
@@ -66,38 +68,3 @@ async fn main() -> eyre::Result<()> {
6668

6769
Ok(())
6870
}
69-
70-
/// A transaction validator that determines all transactions to be valid.
71-
///
72-
/// An actual validator impl like
73-
/// [TransactionValidationTaskExecutor](reth_ethereum::pool::TransactionValidationTaskExecutor)
74-
/// would require up to date db access.
75-
///
76-
/// CAUTION: This validator is not safe to use since it doesn't actually validate the transaction's
77-
/// properties such as chain id, balance, nonce, etc.
78-
#[derive(Debug, Default)]
79-
#[non_exhaustive]
80-
struct OkValidator;
81-
82-
impl TransactionValidator for OkValidator {
83-
type Transaction = EthPooledTransaction;
84-
85-
async fn validate_transaction(
86-
&self,
87-
_origin: TransactionOrigin,
88-
transaction: Self::Transaction,
89-
) -> TransactionValidationOutcome<Self::Transaction> {
90-
// Always return valid
91-
let authorities = transaction.authorization_list().map(|auths| {
92-
auths.iter().flat_map(|auth| auth.recover_authority()).collect::<Vec<_>>()
93-
});
94-
TransactionValidationOutcome::Valid {
95-
balance: *transaction.cost(),
96-
state_nonce: transaction.nonce(),
97-
bytecode_hash: None,
98-
transaction: ValidTransaction::Valid(transaction),
99-
propagate: false,
100-
authorities,
101-
}
102-
}
103-
}

0 commit comments

Comments
 (0)