diff --git a/core/src/main/java/haveno/core/offer/OpenOfferManager.java b/core/src/main/java/haveno/core/offer/OpenOfferManager.java index af8984598b..c8390a5af0 100644 --- a/core/src/main/java/haveno/core/offer/OpenOfferManager.java +++ b/core/src/main/java/haveno/core/offer/OpenOfferManager.java @@ -1169,16 +1169,24 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe Set scheduledTxs = new HashSet(); for (MoneroTxWallet tx : xmrWalletService.getTxs()) { - // skip if outputs unavailable - if (tx.getIncomingTransfers() == null || tx.getIncomingTransfers().isEmpty()) continue; + // skip if no funds available + BigInteger sentToSelfAmount = xmrWalletService.getAmountSentToSelf(tx); // amount sent to self always shows 0, so compute from destinations manually + if (sentToSelfAmount.equals(BigInteger.ZERO) && (tx.getIncomingTransfers() == null || tx.getIncomingTransfers().isEmpty())) continue; if (!isOutputsAvailable(tx)) continue; if (isTxScheduledByOtherOffer(openOffers, openOffer, tx.getHash())) continue; - // add scheduled tx - for (MoneroIncomingTransfer transfer : tx.getIncomingTransfers()) { - if (transfer.getAccountIndex() == 0) { - scheduledAmount = scheduledAmount.add(transfer.getAmount()); - scheduledTxs.add(tx); + // schedule transaction if funds sent to self, because they are not included in incoming transfers // TODO: fix in libraries? + if (sentToSelfAmount.compareTo(BigInteger.ZERO) > 0) { + scheduledAmount = scheduledAmount.add(sentToSelfAmount); + scheduledTxs.add(tx); + } else if (tx.getIncomingTransfers() != null) { + + // schedule transaction if incoming tranfers to account 0 + for (MoneroIncomingTransfer transfer : tx.getIncomingTransfers()) { + if (transfer.getAccountIndex() == 0) { + scheduledAmount = scheduledAmount.add(transfer.getAmount()); + scheduledTxs.add(tx); + } } } diff --git a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java index 6857766521..759dabd086 100644 --- a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java +++ b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java @@ -1219,10 +1219,29 @@ public class XmrWalletService extends XmrWalletBase { return cachedAvailableBalance; } + public boolean hasAddress(String address) { + for (MoneroSubaddress subaddress : getSubaddresses()) { + if (subaddress.getAddress().equals(address)) return true; + } + return false; + } + public List getSubaddresses() { return cachedSubaddresses; } + public BigInteger getAmountSentToSelf(MoneroTxWallet tx) { + BigInteger sentToSelfAmount = BigInteger.ZERO; + if (tx.getOutgoingTransfer() != null && tx.getOutgoingTransfer().getDestinations() != null) { + for (MoneroDestination destination : tx.getOutgoingTransfer().getDestinations()) { + if (hasAddress(destination.getAddress())) { + sentToSelfAmount = sentToSelfAmount.add(destination.getAmount()); + } + } + } + return sentToSelfAmount; + } + public List getOutputs(MoneroOutputQuery query) { List filteredOutputs = new ArrayList(); for (MoneroOutputWallet output : cachedOutputs) {