From f34ea4b24c2f4a427fcef82beca8a82ba402826f Mon Sep 17 00:00:00 2001 From: Junsung Cho Date: Thu, 25 Jul 2024 09:34:50 +0900 Subject: [PATCH] Bug fix for FastRawTransactionManager.resetNonce Signed-off-by: Junsung Cho --- CHANGELOG.md | 1 + .../web3j/tx/FastRawTransactionManager.java | 12 ++++--- .../tx/FastRawTransactionManagerTest.java | 33 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 core/src/test/java/org/web3j/tx/FastRawTransactionManagerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b638f612..ccedc9b57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes * Bug fix for Int256 decode range [2^248, type(int256).max] and [ type(int256.min), -(2^248) ) +* Bug fix for FastRawTransactionManager.resetNonce [#2084](https://github.com/hyperledger/web3j/pull/2084) ### Features diff --git a/core/src/main/java/org/web3j/tx/FastRawTransactionManager.java b/core/src/main/java/org/web3j/tx/FastRawTransactionManager.java index 3ccd2b876..bb35c9440 100644 --- a/core/src/main/java/org/web3j/tx/FastRawTransactionManager.java +++ b/core/src/main/java/org/web3j/tx/FastRawTransactionManager.java @@ -12,14 +12,14 @@ */ package org.web3j.tx; -import java.io.IOException; -import java.math.BigInteger; - import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3j; import org.web3j.service.TxSignService; import org.web3j.tx.response.TransactionReceiptProcessor; +import java.io.IOException; +import java.math.BigInteger; + /** * Simple RawTransactionManager derivative that manages nonces to facilitate multiple transactions * per block. @@ -73,7 +73,11 @@ public BigInteger getCurrentNonce() { } public synchronized void resetNonce() throws IOException { - nonce = super.getNonce(); + nonce = super.getNonce().subtract(BigInteger.ONE); + } + + public synchronized void clearNonce() { + nonce = BigInteger.valueOf(-1); } public synchronized void setNonce(BigInteger value) { diff --git a/core/src/test/java/org/web3j/tx/FastRawTransactionManagerTest.java b/core/src/test/java/org/web3j/tx/FastRawTransactionManagerTest.java new file mode 100644 index 000000000..176b26d1e --- /dev/null +++ b/core/src/test/java/org/web3j/tx/FastRawTransactionManagerTest.java @@ -0,0 +1,33 @@ +package org.web3j.tx; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.web3j.crypto.SampleKeys; +import org.web3j.protocol.Web3j; + +import java.io.IOException; +import java.math.BigInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + +public class FastRawTransactionManagerTest { + private Web3j web3j; + private FastRawTransactionManager fastRawTransactionManager; + + @BeforeEach + public void setUp() throws Exception { + web3j = mock(Web3j.class); + fastRawTransactionManager = new FastRawTransactionManager(web3j, SampleKeys.CREDENTIALS); + } + + @Test + void clearNonce() throws IOException { + fastRawTransactionManager.setNonce(BigInteger.valueOf(42)); + + fastRawTransactionManager.clearNonce(); + + BigInteger currentNonce = fastRawTransactionManager.getCurrentNonce(); + assertEquals(currentNonce, BigInteger.valueOf(-1)); + } +} \ No newline at end of file