@@ -3,7 +3,9 @@ use std::{
33 thread,
44} ;
55
6- use reth_transaction_pool:: { BestTransactions , error:: InvalidPoolTransactionError } ;
6+ use reth_transaction_pool:: {
7+ BestTransactions , PoolTransaction , error:: InvalidPoolTransactionError ,
8+ } ;
79use tempo_transaction_pool:: best:: BestTransaction ;
810
911/// Event returned by [`BestTransactionsStream`].
@@ -153,23 +155,19 @@ fn is_invalidated_buffered_transaction(
153155 invalid : & BestTransaction ,
154156 candidate : & BestTransaction ,
155157) -> bool {
158+ // Skip invalidation for expiring nonce transactions - they are independent
159+ // and should not block other expiring nonce txs from the same sender
156160 if invalid. transaction . is_expiring_nonce ( ) {
157161 return false ;
158162 }
159163
160164 if invalid. transaction . is_aa_2d ( ) {
161- let Some ( invalid_id) = invalid. transaction . aa_transaction_id ( ) else {
162- return false ;
163- } ;
164- return candidate
165+ candidate
165166 . transaction
166167 . aa_transaction_id ( )
167- . is_some_and ( |candidate_id| {
168- candidate_id. seq_id == invalid_id. seq_id && candidate_id. nonce >= invalid_id. nonce
169- } ) ;
168+ . zip ( invalid. transaction . aa_transaction_id ( ) )
169+ . is_some_and ( |( candidate_id, invalid_id) | candidate_id. seq_id == invalid_id. seq_id )
170+ } else {
171+ candidate. transaction . sender ( ) == invalid. transaction . sender ( )
170172 }
171-
172- !candidate. transaction . is_aa_2d ( )
173- && candidate. sender ( ) == invalid. sender ( )
174- && candidate. nonce ( ) >= invalid. nonce ( )
175173}
0 commit comments