From e8f0daec46bf413645104a242612b19e9e0bb2d4 Mon Sep 17 00:00:00 2001 From: HashEngineering Date: Tue, 2 Apr 2024 14:30:09 -0700 Subject: [PATCH] fix: consider non-denominated coins in mixing progress calc (#249) * fix: consider non-denominated coins in mixing progress calc * tests: add coinjoin-unmixed.wallet * tests: fix context --- .../bitcoinj/wallet/CoinJoinExtension.java | 26 ++++++++++++++-- .../wallet/DerivationPathFactory.java | 2 +- .../java/org/bitcoinj/wallet/WalletEx.java | 6 ++-- .../wallet/CoinJoinExtensionTest.java | 28 ++++++++++++++++++ .../bitcoinj/wallet/coinjoin-unmixed.wallet | Bin 0 -> 56044 bytes 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 core/src/test/java/org/bitcoinj/wallet/CoinJoinExtensionTest.java create mode 100644 core/src/test/resources/org/bitcoinj/wallet/coinjoin-unmixed.wallet diff --git a/core/src/main/java/org/bitcoinj/wallet/CoinJoinExtension.java b/core/src/main/java/org/bitcoinj/wallet/CoinJoinExtension.java index 897e84ab2..f0d97f16a 100644 --- a/core/src/main/java/org/bitcoinj/wallet/CoinJoinExtension.java +++ b/core/src/main/java/org/bitcoinj/wallet/CoinJoinExtension.java @@ -55,6 +55,7 @@ import java.util.Set; import java.util.TreeMap; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Stream; @@ -217,12 +218,19 @@ public Coin getUnmixableTotal() { return sum; } + /** returns a tree associating denominations with their outputs + * Denomination of -1 are collaterals + * Denomination of -2 are other undenominated outputs + * + * @return + */ public TreeMap> getOutputs() { checkNotNull(wallet); TreeMap> outputs = Maps.newTreeMap(); for (Coin amount : CoinJoin.getStandardDenominations()) { outputs.put(CoinJoin.amountToDenomination(amount), Lists.newArrayList()); } + outputs.put(-2, Lists.newArrayList()); outputs.put(0, Lists.newArrayList()); for (TransactionOutput output : wallet.getUnspents()) { byte [] pkh = ScriptPattern.extractHashFromP2PKH(output.getScriptPubKey()); @@ -230,6 +238,9 @@ public TreeMap> getOutputs() { int denom = CoinJoin.amountToDenomination(output.getValue()); List listDenoms = outputs.get(denom); listDenoms.add(output); + } else { + // non-denominated and non-collateral coins + outputs.get(-2).add(output); } } return outputs; @@ -593,7 +604,7 @@ public double getMixingProgress() { getOutputs().forEach((denom, outputs) -> { outputs.forEach(output -> { // do not count mixing collateral for fees - if (denom != -1) { + if (denom >= 0) { // getOutputs has a bug where non-denominated items are marked as denominated TransactionOutPoint outPoint = new TransactionOutPoint(output.getParams(), output.getIndex(), output.getParentTransactionHash()); int rounds = ((WalletEx) wallet).getRealOutpointCoinJoinRounds(outPoint); @@ -601,10 +612,21 @@ public double getMixingProgress() { totalInputs.addAndGet(1); totalRounds.addAndGet(rounds); } + } else if (denom == -2) { + // estimate what the denominations would be: use greedy algorithm + AtomicInteger unmixedInputs = new AtomicInteger(0); + AtomicReference outputValue = new AtomicReference<>(output.getValue().subtract(CoinJoin.getCollateralAmount())); + CoinJoinClientOptions.getDenominations().forEach(coin -> { + while (outputValue.get().subtract(coin).isGreaterThan(Coin.ZERO)) { + unmixedInputs.getAndIncrement(); + outputValue.set(outputValue.get().subtract(coin)); + } + }); + totalInputs.set(totalInputs.get() + unmixedInputs.get()); } }); }); - double progress = totalRounds.get() / (requiredRounds * totalInputs.get()); + double progress = totalInputs.get() != 0 ? totalRounds.get() / (requiredRounds * totalInputs.get()) : 0.0; log.info("getMixingProgress: {} = {} / ({} * {})", progress, totalRounds.get(), requiredRounds, totalInputs.get()); return Math.max(0.0, Math.min(progress, 1.0)); } diff --git a/core/src/main/java/org/bitcoinj/wallet/DerivationPathFactory.java b/core/src/main/java/org/bitcoinj/wallet/DerivationPathFactory.java index ef1841a37..782483519 100644 --- a/core/src/main/java/org/bitcoinj/wallet/DerivationPathFactory.java +++ b/core/src/main/java/org/bitcoinj/wallet/DerivationPathFactory.java @@ -193,7 +193,7 @@ public ImmutableList coinJoinDerivationPath(int account) { .add(FEATURE_PURPOSE) .add(coinType) .add(new ChildNumber(4, true)) - .add(ChildNumber.ZERO_HARDENED) + .add(new ChildNumber(account, true)) .build(); } diff --git a/core/src/main/java/org/bitcoinj/wallet/WalletEx.java b/core/src/main/java/org/bitcoinj/wallet/WalletEx.java index 0f650a1e2..9c931a666 100644 --- a/core/src/main/java/org/bitcoinj/wallet/WalletEx.java +++ b/core/src/main/java/org/bitcoinj/wallet/WalletEx.java @@ -396,7 +396,7 @@ int getRealOutpointCoinJoinRounds(TransactionOutPoint outpoint, int rounds) { } // make sure the final output is non-denominate - if (!CoinJoin.isDenominatedAmount (txOut.getValue())){ //NOT DENOM + if (!CoinJoin.isDenominatedAmount (txOut.getValue())) { //NOT DENOM roundsRef = -2; mapOutpointRoundsCache.put(outpoint, roundsRef); @@ -404,7 +404,7 @@ int getRealOutpointCoinJoinRounds(TransactionOutPoint outpoint, int rounds) { return roundsRef; } - for (TransactionOutput out :wtx.getTransaction().getOutputs()){ + for (TransactionOutput out :wtx.getTransaction().getOutputs()) { if (!CoinJoin.isDenominatedAmount (out.getValue())){ // this one is denominated but there is another non-denominated output found in the same tx roundsRef = 0; @@ -418,7 +418,7 @@ int getRealOutpointCoinJoinRounds(TransactionOutPoint outpoint, int rounds) { int nShortest = -10; // an initial value, should be no way to get this by calculations boolean fDenomFound = false; // only denoms here so let's look up - for (TransactionInput txinNext :wtx.getTransaction().getInputs()){ + for (TransactionInput txinNext :wtx.getTransaction().getInputs()) { if (isMine(txinNext)) { int n = getRealOutpointCoinJoinRounds(txinNext.getOutpoint(), rounds + 1); // denom found, find the shortest chain or initially assign nShortest with the first found value diff --git a/core/src/test/java/org/bitcoinj/wallet/CoinJoinExtensionTest.java b/core/src/test/java/org/bitcoinj/wallet/CoinJoinExtensionTest.java new file mode 100644 index 000000000..e2c188492 --- /dev/null +++ b/core/src/test/java/org/bitcoinj/wallet/CoinJoinExtensionTest.java @@ -0,0 +1,28 @@ +package org.bitcoinj.wallet; + +import org.bitcoinj.core.Coin; +import org.bitcoinj.core.Context; +import org.bitcoinj.params.TestNet3Params; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.Assert.assertEquals; + +public class CoinJoinExtensionTest { + + @Test public void emptyWalletProgressTest() { + new Context(TestNet3Params.get()); + try (InputStream is = getClass().getResourceAsStream("coinjoin-unmixed.wallet")) { + WalletEx wallet = (WalletEx) new WalletProtobufSerializer().readWallet(is); + assertEquals(Coin.valueOf(99999628), wallet.getBalance(Wallet.BalanceType.ESTIMATED)); + + assertEquals(0.00, wallet.getCoinJoin().getMixingProgress(), 0.001); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (UnreadableWalletException e) { + throw new RuntimeException(e); + } + } +} diff --git a/core/src/test/resources/org/bitcoinj/wallet/coinjoin-unmixed.wallet b/core/src/test/resources/org/bitcoinj/wallet/coinjoin-unmixed.wallet new file mode 100644 index 0000000000000000000000000000000000000000..5a31b652c6100f344917db4a43501f855a157c22 GIT binary patch literal 56044 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 AEdT%j literal 0 HcmV?d00001