Skip to content

Commit 213c474

Browse files
matthew1001fab-10
authored andcommitted
Don't put NONCE_TOO_LOW transactions into the invalid nonce cache (hyperledger#6067)
* Don't put NONCE_TOO_LOW transactions into the invalid nonce cache Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> * Update unit tests Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> * Use list of errors to ignore Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> --------- Signed-off-by: Matthew Whitehead <matthew1001@gmail.com> Signed-off-by: Matt Whitehead <matthew1001@gmail.com> Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
1 parent 8b70e71 commit 213c474

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import java.math.BigInteger;
5656
import java.nio.charset.StandardCharsets;
5757
import java.util.ArrayList;
58+
import java.util.Arrays;
5859
import java.util.Collection;
5960
import java.util.Comparator;
6061
import java.util.IntSummaryStatistics;
@@ -93,6 +94,8 @@
9394
public class TransactionPool implements BlockAddedObserver {
9495
private static final Logger LOG = LoggerFactory.getLogger(TransactionPool.class);
9596
private static final Logger LOG_FOR_REPLAY = LoggerFactory.getLogger("LOG_FOR_REPLAY");
97+
private static final List<TransactionInvalidReason> INVALID_TX_CACHE_IGNORED_ERRORS =
98+
new ArrayList<>(Arrays.asList(TransactionInvalidReason.NONCE_TOO_LOW));
9699
private final Supplier<PendingTransactions> pendingTransactionsSupplier;
97100
private final PluginTransactionValidator pluginTransactionValidator;
98101
private volatile PendingTransactions pendingTransactions;
@@ -277,7 +280,9 @@ private ValidationResult<TransactionInvalidReason> addTransaction(
277280
.log();
278281
metrics.incrementRejected(
279282
isLocal, hasPriority, validationResult.result.getInvalidReason(), "txpool");
280-
if (!isLocal) {
283+
if (!isLocal
284+
&& !INVALID_TX_CACHE_IGNORED_ERRORS.contains(
285+
validationResult.result.getInvalidReason())) {
281286
pendingTransactions.signalInvalidAndRemoveDependentTransactions(transaction);
282287
}
283288
}

ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/sorter/AbstractLegacyTransactionPoolTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import static java.util.Arrays.asList;
1818
import static java.util.Collections.singletonList;
19-
import static org.hyperledger.besu.ethereum.transaction.TransactionInvalidReason.NONCE_TOO_LOW;
19+
import static org.hyperledger.besu.ethereum.transaction.TransactionInvalidReason.TRANSACTION_ALREADY_KNOWN;
2020
import static org.mockito.ArgumentMatchers.any;
2121
import static org.mockito.ArgumentMatchers.eq;
2222
import static org.mockito.Mockito.never;
@@ -38,7 +38,7 @@ public abstract class AbstractLegacyTransactionPoolTest extends AbstractTransact
3838
public void shouldNotAddRemoteTransactionsWhenThereIsALowestInvalidNonceForTheSender() {
3939
givenTransactionIsValid(transaction1);
4040
when(transactionValidatorFactory.get().validate(eq(transaction0), any(Optional.class), any()))
41-
.thenReturn(ValidationResult.invalid(NONCE_TOO_LOW));
41+
.thenReturn(ValidationResult.invalid(TRANSACTION_ALREADY_KNOWN));
4242

4343
transactionPool.addRemoteTransactions(asList(transaction0, transaction1));
4444

0 commit comments

Comments
 (0)