From 1d32cb8fed89df44879194a1b3779ef69cdad813 Mon Sep 17 00:00:00 2001 From: Matthew Whitehead Date: Fri, 20 Oct 2023 17:15:03 +0100 Subject: [PATCH 1/3] Don't put NONCE_TOO_LOW transactions into the invalid nonce cache Signed-off-by: Matthew Whitehead --- .../besu/ethereum/eth/transactions/TransactionPool.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java index c41027deb1b..3a4e8538f55 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java @@ -277,7 +277,12 @@ private ValidationResult addTransaction( .log(); metrics.incrementRejected( isLocal, hasPriority, validationResult.result.getInvalidReason(), "txpool"); - if (!isLocal) { + if (!isLocal + && !validationResult + .result + .getInvalidReason() + .name() + .equals(TransactionInvalidReason.NONCE_TOO_LOW.name())) { pendingTransactions.signalInvalidAndRemoveDependentTransactions(transaction); } } From c3329886d7beb15426b431042ade235ff1fa0696 Mon Sep 17 00:00:00 2001 From: Matthew Whitehead Date: Mon, 30 Oct 2023 10:19:25 +0000 Subject: [PATCH 2/3] Update unit tests Signed-off-by: Matthew Whitehead --- .../sorter/AbstractLegacyTransactionPoolTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/sorter/AbstractLegacyTransactionPoolTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/sorter/AbstractLegacyTransactionPoolTest.java index 1b35bd26516..46d735f9954 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/sorter/AbstractLegacyTransactionPoolTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/sorter/AbstractLegacyTransactionPoolTest.java @@ -16,7 +16,7 @@ import static java.util.Arrays.asList; import static java.util.Collections.singletonList; -import static org.hyperledger.besu.ethereum.transaction.TransactionInvalidReason.NONCE_TOO_LOW; +import static org.hyperledger.besu.ethereum.transaction.TransactionInvalidReason.TRANSACTION_ALREADY_KNOWN; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; @@ -38,7 +38,7 @@ public abstract class AbstractLegacyTransactionPoolTest extends AbstractTransact public void shouldNotAddRemoteTransactionsWhenThereIsALowestInvalidNonceForTheSender() { givenTransactionIsValid(transaction1); when(transactionValidatorFactory.get().validate(eq(transaction0), any(Optional.class), any())) - .thenReturn(ValidationResult.invalid(NONCE_TOO_LOW)); + .thenReturn(ValidationResult.invalid(TRANSACTION_ALREADY_KNOWN)); transactionPool.addRemoteTransactions(asList(transaction0, transaction1)); From 2ad5b1e3d4843eb21c0d263c211b927ee36c95fb Mon Sep 17 00:00:00 2001 From: Matthew Whitehead Date: Mon, 30 Oct 2023 11:44:31 +0000 Subject: [PATCH 3/3] Use list of errors to ignore Signed-off-by: Matthew Whitehead --- .../ethereum/eth/transactions/TransactionPool.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java index 3a4e8538f55..9e0ca14a284 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java @@ -55,6 +55,7 @@ import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.IntSummaryStatistics; @@ -93,6 +94,8 @@ public class TransactionPool implements BlockAddedObserver { private static final Logger LOG = LoggerFactory.getLogger(TransactionPool.class); private static final Logger LOG_FOR_REPLAY = LoggerFactory.getLogger("LOG_FOR_REPLAY"); + private static final List INVALID_TX_CACHE_IGNORED_ERRORS = + new ArrayList<>(Arrays.asList(TransactionInvalidReason.NONCE_TOO_LOW)); private final Supplier pendingTransactionsSupplier; private final PluginTransactionValidator pluginTransactionValidator; private volatile PendingTransactions pendingTransactions; @@ -278,11 +281,8 @@ private ValidationResult addTransaction( metrics.incrementRejected( isLocal, hasPriority, validationResult.result.getInvalidReason(), "txpool"); if (!isLocal - && !validationResult - .result - .getInvalidReason() - .name() - .equals(TransactionInvalidReason.NONCE_TOO_LOW.name())) { + && !INVALID_TX_CACHE_IGNORED_ERRORS.contains( + validationResult.result.getInvalidReason())) { pendingTransactions.signalInvalidAndRemoveDependentTransactions(transaction); } }