Skip to content

Commit

Permalink
Bug fix for FastRawTransactionManager.resetNonce
Browse files Browse the repository at this point in the history
Signed-off-by: Junsung Cho <[email protected]>
  • Loading branch information
junsung-cho committed Aug 9, 2024
1 parent fbcbf82 commit aeba374
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline

* Bug fix for Int256 decode range [#2070](https://github.com/hyperledger/web3j/pull/2070)
* Bug fix for BytesType.bytes32PaddedLength [#2089](https://github.com/hyperledger/web3j/pull/2089)
* Bug fix for FastRawTransactionManager.resetNonce [#2084](https://github.com/hyperledger/web3j/pull/2084)

### Features

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
46 changes: 46 additions & 0 deletions core/src/test/java/org/web3j/tx/FastRawTransactionManagerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2024 Web3 Labs Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.web3j.tx;

import java.io.IOException;
import java.math.BigInteger;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import org.web3j.crypto.SampleKeys;
import org.web3j.protocol.Web3j;

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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.web3j.tx.response.QueuingTransactionReceiptProcessor;
import org.web3j.utils.Convert;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.web3j.tx.TransactionManager.DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH;
Expand Down Expand Up @@ -96,6 +97,26 @@ public void testTransactionPolling() throws Exception {
assertTrue(transactionReceipts.isEmpty());
}

@Test
public void testTransactionResetNonce() throws Exception {
FastRawTransactionManager transactionManager =
new FastRawTransactionManager(
web3j,
ALICE,
new PollingTransactionReceiptProcessor(
web3j, POLLING_FREQUENCY, DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH));

Transfer transfer = new Transfer(web3j, transactionManager);
BigInteger gasPrice = transfer.requestCurrentGasPrice();

createTransaction(transfer, gasPrice).send();
createTransaction(transfer, gasPrice).send();
transactionManager.resetNonce();
createTransaction(transfer, gasPrice).send();

assertEquals(transactionManager.getCurrentNonce(), BigInteger.valueOf(2));
}

@Test
public void testTransactionQueuing() throws Exception {

Expand Down

0 comments on commit aeba374

Please sign in to comment.