From 7fd722496445de2e7b1d3adb882be9ed082e5dcc Mon Sep 17 00:00:00 2001 From: ahamlat Date: Mon, 11 Sep 2023 13:21:59 +0200 Subject: [PATCH] Fix issue 5824 - Duplicate key errors in EthScheduler-Transactions (#5857) Fix issue 5824 - Duplicate key errors in EthScheduler-Transactions Signed-off-by: Ameziane H --- CHANGELOG.md | 2 ++ .../eth/transactions/TransactionPool.java | 3 ++- .../TransactionPoolLondonTest.java | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 111752b9e25..197a9b3478d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ - Layered transaction pool implementation is now stable and enabled by default. If you want still to use the legacy implementation, use `--tx-pool=legacy` [#5772](https://github.com/hyperledger/besu) ### Bug Fixes +- do not create ignorable storage on revert storage-variables subcommand [#5830](https://github.com/hyperledger/besu/pull/5830) +- fix duplicate key errors in EthScheduler-Transactions [#5857](https://github.com/hyperledger/besu/pull/5857) - do not create ignorable storage on revert storage-variables subcommand [#5830](https://github.com/hyperledger/besu/pull/5830) ### Download Links 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 41978bcb932..9f5cc273b29 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 @@ -218,7 +218,8 @@ public Map> addRemoteTransactio addedTransactions.add(transaction); } return result; - })); + }, + (transaction1, transaction2) -> transaction1)); LOG_FOR_REPLAY .atTrace() diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolLondonTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolLondonTest.java index e546684ffdc..2f151cac80d 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolLondonTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolLondonTest.java @@ -18,6 +18,7 @@ import static java.util.Collections.emptyList; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.mockito.Mockito.when; import org.hyperledger.besu.config.StubGenesisConfigOptions; @@ -54,6 +55,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +@SuppressWarnings("unchecked") public class TransactionPoolLondonTest extends AbstractTransactionPoolTest { private static final Wei BASE_FEE_FLOOR = Wei.of(7L); @@ -253,6 +255,25 @@ public void shouldAcceptLocal1559TxsWhenMaxFeePerGasIsAtLeastEqualToMinMinGasPri .isEqualTo(1); } + @Test + public void addRemoteTransactionsShouldAllowDuplicates() { + final Transaction transaction1 = createTransaction(1, Wei.of(7L)); + final Transaction transaction2 = createTransaction(2, Wei.of(7L)); + final Transaction transaction3 = createTransaction(2, Wei.of(7L)); + final Transaction transaction4 = createTransaction(3, Wei.of(7L)); + + givenTransactionIsValid(transaction1); + givenTransactionIsValid(transaction2); + givenTransactionIsValid(transaction3); + givenTransactionIsValid(transaction4); + + assertThatCode( + () -> + transactionPool.addRemoteTransactions( + List.of(transaction1, transaction2, transaction3, transaction4))) + .doesNotThrowAnyException(); + } + private int add1559TxAndGetPendingTxsCount( final Wei genesisBaseFee, final Wei minGasPrice,