diff --git a/core/src/main/java/org/bitcoinj/core/Wallet.java b/core/src/main/java/org/bitcoinj/core/Wallet.java index e3e68e30..646cddae 100644 --- a/core/src/main/java/org/bitcoinj/core/Wallet.java +++ b/core/src/main/java/org/bitcoinj/core/Wallet.java @@ -5084,7 +5084,7 @@ public class Wallet extends BaseTaggableObject changeAddress = currentChangeAddress(); changeOutput = new TransactionOutput(params, req.tx, change, changeAddress); // If the change output would result in this transaction being rejected as dust, just drop the change and make it a fee - if (req.ensureMinRequiredFee && Transaction.MIN_NONDUST_OUTPUT.compareTo(change) >= 0) { + if (req.ensureMinRequiredFee && change.isLessThan(Transaction.MIN_NONDUST_OUTPUT)) { // This solution definitely fits in category 3 isCategory3 = true; additionalValueForNextCategory = Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add( diff --git a/core/src/test/java/org/bitcoinj/core/WalletTest.java b/core/src/test/java/org/bitcoinj/core/WalletTest.java index 61479600..7e6bb1bb 100644 --- a/core/src/test/java/org/bitcoinj/core/WalletTest.java +++ b/core/src/test/java/org/bitcoinj/core/WalletTest.java @@ -2414,18 +2414,18 @@ public class WalletTest extends TestWithWallet { assertEquals(spend8.getOutput(0).getValue(), COIN.subtract(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE)); SendRequest request9 = SendRequest.to(notMyAddr, COIN.subtract( - Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT))); + Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI))); wallet.completeTx(request9); - assertEquals(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT), request9.tx.getFee()); + assertEquals(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI), request9.tx.getFee()); Transaction spend9 = request9.tx; // ...in fact, also add fee if we would get back less than MIN_NONDUST_OUTPUT assertEquals(1, spend9.getOutputs().size()); // We optimize for priority, so the output selected should be the largest one. assertEquals(spend9.getOutput(0).getValue(), - COIN.subtract(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT))); + COIN.subtract(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI))); SendRequest request10 = SendRequest.to(notMyAddr, COIN.subtract( - Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).add(SATOSHI))); + Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT))); wallet.completeTx(request10); assertEquals(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE, request10.tx.getFee()); Transaction spend10 = request10.tx; @@ -2679,11 +2679,13 @@ public class WalletTest extends TestWithWallet { for (int i = 0; i < 98; i++) request26.tx.addOutput(CENT, notMyAddr); request26.tx.addOutput(CENT.subtract( - Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT)), notMyAddr); + Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI)), + notMyAddr); assertTrue(request26.tx.unsafeBitcoinSerialize().length > 1000); request26.feePerKb = SATOSHI; wallet.completeTx(request26); - assertEquals(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT), request26.tx.getFee()); + assertEquals(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI), + request26.tx.getFee()); Transaction spend26 = request26.tx; // If a transaction is over 1kb, the set fee should be added assertEquals(100, spend26.getOutputs().size()); @@ -2692,7 +2694,7 @@ public class WalletTest extends TestWithWallet { for (TransactionOutput out : spend26.getOutputs()) outValue26 = outValue26.add(out.getValue()); assertEquals(outValue26, COIN.subtract( - Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT))); + Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.add(Transaction.MIN_NONDUST_OUTPUT).subtract(SATOSHI))); } @Test